using DevExpress.Charts.Native;
using DevExpress.XtraCharts;
using IStation.Model;
using NPOI.SS.UserModel;
using System.Drawing;
namespace IStation.WinFrmUI.Curve
{
///
/// 曲线表达式扩展类
///
public static class CurveExpressChartExtend
{
public readonly static int Qh = 1, Qe, QP = 3;
#region SetChart
///
/// 设置图表
///
public static void SetChartDisplay(this ChartControl chart)
{
chart.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Right;
chart.Legend.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
chart.Legend.Direction = DevExpress.XtraCharts.LegendDirection.LeftToRight;
chart.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.Marker;
chart.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;
chart.SeriesSelectionMode = SeriesSelectionMode.Point;
SetChartBackColor(chart);
}
///
/// 设置图表背景色
///
///
public static void SetChartBackColor(this ChartControl chart)
{
chart.BackColor = CurveChartDisplay.ChartBackColor;
foreach (var title in chart.Titles)
{
if (title is ChartTitle chartTitle)
chartTitle.TextColor = CurveChartDisplay.ChartChartTitle;
}
if (chart.Diagram is XYDiagram xyDiagram)
{
xyDiagram.DefaultPane.Title.Alignment = StringAlignment.Near;
xyDiagram.DefaultPane.Title.DXFont = new Font("Tahoma", 9);
xyDiagram.DefaultPane.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
xyDiagram.DefaultPane.BackColor = CurveChartDisplay.ChartBackColor;
for (int i = 0; i < xyDiagram.Panes.Count; i++)
{
xyDiagram.Panes[i].BackColor = CurveChartDisplay.ChartBackColor;
}
}
}
///
/// 设置单色图表
///
///
public static void SetChartMonoColorDisplay(this ChartControl chart)
{
var monoColor = Color.Black;
var minorColor = Color.Gray;
var txtBackColor = Color.White;
// 注释
for (int i = 0; i < chart.AnnotationRepository.Count; i++)
{
if (chart.AnnotationRepository[i] is TextAnnotation txt)
{
txt.TextColor = monoColor;
txt.Border.Color = monoColor;
txt.BackColor = txtBackColor;
}
}
// 系列
for (int i = 0; i < chart.Series.Count; i++)
{
var series = chart.Series[i];
series.View.Color = monoColor;
if (series.View is PointSeriesView pointView)
pointView.PointMarkerOptions.BorderColor = monoColor;
}
// 轴
if (chart.Diagram is XYDiagram xyDiagram)
{
var axisX = xyDiagram.AxisX;
axisX.Color = monoColor;
axisX.Label.TextColor = monoColor;
axisX.Title.TextColor = monoColor;
axisX.GridLines.Color = monoColor;
axisX.GridLines.MinorColor = minorColor;
var axisY = xyDiagram.AxisY;
axisY.Color = monoColor;
axisY.Label.TextColor = monoColor;
axisY.Title.TextColor = monoColor;
axisY.GridLines.Color = monoColor;
axisY.GridLines.MinorColor = minorColor;
for (int i = 0; i < xyDiagram.SecondaryAxesY.Count; i++)
{
var axis = xyDiagram.SecondaryAxesY[i];
axis.Color = monoColor;
axis.Label.TextColor = monoColor;
axis.Title.TextColor = monoColor;
axis.GridLines.Color = monoColor;
axis.GridLines.MinorColor = minorColor;
}
for (int i = 0; i < axisX.Strips.Count; i++)
{
axisX.Strips[i].Color = minorColor;
}
for (int i = 0; i < xyDiagram.AxisX.ConstantLines.Count; i++)
{
var line = xyDiagram.AxisX.ConstantLines[i];
line.Color = monoColor;
line.Title.TextColor = monoColor;
}
for (int i = 0; i < xyDiagram.AxisY.ConstantLines.Count; i++)
{
var line = xyDiagram.AxisY.ConstantLines[i];
line.Color = monoColor;
line.Title.TextColor = monoColor;
}
}
}
#endregion
#region SetAxisRange
///
///
///
///
///
///
public static void SetAxisRange(this AxisX axis, double minValue, double maxValue)
{
axis.VisualRange.Auto = false;
axis.WholeRange.Auto = false;
axis.NumericScaleOptions.AutoGrid = false;
axis.WholeRange.SideMarginsValue = 0;
axis.VisualRange.SideMarginsValue = 0;
axis.WholeRange.SetMinMaxValues(minValue, maxValue);
axis.VisualRange.SetMinMaxValues(minValue, maxValue);
}
///
///
///
///
///
///
public static void SetAxisRange(this AxisY axis, double minValue, double maxValue)
{
axis.VisualRange.Auto = false;
axis.WholeRange.Auto = false;
axis.NumericScaleOptions.AutoGrid = false;
axis.WholeRange.SideMarginsValue = 0;
axis.VisualRange.SideMarginsValue = 0;
axis.WholeRange.SetMinMaxValues(minValue, maxValue);
axis.VisualRange.SetMinMaxValues(minValue, maxValue);
}
///
///
///
///
///
///
public static void SetAxisRange(this SecondaryAxisY axis, double minValue, double maxValue)
{
axis.VisualRange.Auto = false;
axis.WholeRange.Auto = false;
axis.NumericScaleOptions.AutoGrid = false;
axis.WholeRange.SideMarginsValue = 0;
axis.VisualRange.SideMarginsValue = 0;
axis.WholeRange.SetMinMaxValues(minValue, maxValue);
axis.VisualRange.SetMinMaxValues(minValue, maxValue);
}
///
///
///
///
///
///
///
///
public static void SetAxisRange(this AxisY axis, double minValueWhole, double maxValueWhole, double minValueVisual, double maxValueVisual)
{
axis.VisualRange.Auto = false;
axis.WholeRange.Auto = false;
axis.NumericScaleOptions.AutoGrid = false;
axis.WholeRange.SideMarginsValue = 0;
axis.VisualRange.SideMarginsValue = 0;
axis.WholeRange.SetMinMaxValues(minValueWhole, maxValueWhole);
axis.VisualRange.SetMinMaxValues(minValueVisual, maxValueVisual);
}
///
///
///
///
///
///
///
///
public static void SetAxisRange(this SecondaryAxisY axis, double minValueWhole, double maxValueWhole, double minValueVisual, double maxValueVisual)
{
axis.VisualRange.Auto = false;
axis.WholeRange.Auto = false;
axis.NumericScaleOptions.AutoGrid = false;
axis.WholeRange.SideMarginsValue = 0;
axis.VisualRange.SideMarginsValue = 0;
axis.WholeRange.SetMinMaxValues(minValueWhole, maxValueWhole);
axis.VisualRange.SetMinMaxValues(minValueVisual, maxValueVisual);
}
#endregion
#region SetAxisDisplay
///
/// 设置流量轴
///
///
public static void SetAxisXQDisplay(this AxisX axis)
{
axis.Color = CurveChartDisplay.AxisColorQ;
axis.Label.TextColor = CurveChartDisplay.AxisColorQ;
axis.Title.TextColor = CurveChartDisplay.AxisColorQ;
axis.GridLines.Color = Color.LightSlateGray;
axis.GridLines.LineStyle.DashStyle = (DashStyle)CurveChartDisplay.GridLineTypeX;
axis.Label.Font = CurveChartDisplay.AxisLabelFontQ;
axis.Title.Font = CurveChartDisplay.AxisTitleFontQ;
axis.Title.Alignment = StringAlignment.Center;
axis.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
axis.Label.TextPattern = "{A:#,#}";
}
///
/// 设置扬程轴
///
///
public static void SetAxisYQHDisplay(this AxisY axis)
{
axis.Color = CurveChartDisplay.CurveColorQH;
axis.Label.TextColor = CurveChartDisplay.CurveColorQH;
axis.Title.TextColor = CurveChartDisplay.CurveColorQH;
axis.GridLines.Color = CurveChartDisplay.CurveColorQH;
axis.GridLines.LineStyle.DashStyle = (DashStyle)CurveChartDisplay.GridLineTypeY;
axis.Label.Font = CurveChartDisplay.AxisLabelFontH;
axis.Title.Font = CurveChartDisplay.AxisTitleFontH;
axis.Title.Alignment = StringAlignment.Far;
axis.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
}
///
/// 设置效率轴
///
///
public static void SetSecondaryAxisYQEDisplay(this SecondaryAxisY axis)
{
axis.Color = CurveChartDisplay.CurveColorQE;
axis.Label.TextColor = CurveChartDisplay.CurveColorQE;
axis.Title.TextColor = CurveChartDisplay.CurveColorQE;
axis.GridLines.Color = CurveChartDisplay.CurveColorQE;
axis.GridLines.LineStyle.DashStyle = (DashStyle)CurveChartDisplay.GridLineTypeY;
axis.Label.Font = CurveChartDisplay.AxisLabelFontE;
axis.Title.Font = CurveChartDisplay.AxisTitleFontE;
axis.Title.Alignment = StringAlignment.Center;
axis.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
}
///
/// 设置功率轴
///
///
public static void SetSecondaryAxisYQPDisplay(this SecondaryAxisY axis)
{
axis.Color = CurveChartDisplay.CurveColorQP;
axis.Label.TextColor = CurveChartDisplay.CurveColorQP;
axis.Title.TextColor = CurveChartDisplay.CurveColorQP;
axis.GridLines.Color = CurveChartDisplay.CurveColorQP;
axis.GridLines.LineStyle.DashStyle = (DashStyle)CurveChartDisplay.GridLineTypeY;
axis.Label.Font = CurveChartDisplay.AxisLabelFontP;
axis.Title.Font = CurveChartDisplay.AxisTitleFontP;
axis.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
}
///
/// 设置工作点线
///
///
public static void SetWorkPointLineDisplay(this ConstantLine line)
{
line.Color = CurveChartDisplay.LineColor;
line.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dash;
line.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.MiterClipped;
line.LineStyle.Thickness = 2;
line.Title.DXFont = CurveChartDisplay.LineFont;
line.Title.TextColor = CurveChartDisplay.LineColor;
line.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
line.ShowInLegend = false;
}
///
/// 设置工作点线
///
///
public static void SetWorkHLineDisplay(this ConstantLine line)
{
line.Color = CurveChartDisplay.LineColor;
line.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dash;
line.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.MiterClipped;
line.LineStyle.Thickness = 2;
line.Title.DXFont = CurveChartDisplay.LineFont;
line.Title.TextColor = CurveChartDisplay.LineColor;
line.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
line.ShowInLegend = false;
}
///
/// 设置流量轴
///
///
public static void SetAxisYQColorDisplay(this AxisX axis, bool defaultColor = false)
{
axis.Color = defaultColor ? CurveChartDisplay.AxisColorQ : Color.Black;
axis.Label.TextColor = defaultColor ? CurveChartDisplay.AxisColorQ : Color.Black;
axis.Title.TextColor = defaultColor ? CurveChartDisplay.AxisColorQ : Color.Black;
//axis.GridLines.Color = defaultColor ? Color.LightSlateGray : Color.Black;
}
///
/// 设置扬程轴
///
///
public static void SetAxisYQHColorDisplay(this AxisY axis, Series curve = null, Series point = null, bool defaultColor = false)
{
axis.Color = defaultColor ? CurveChartDisplay.CurveColorQH : Color.Black;
axis.Label.TextColor = defaultColor ? CurveChartDisplay.CurveColorQH : Color.Black;
axis.Title.TextColor = defaultColor ? CurveChartDisplay.CurveColorQH : Color.Black;
//axis.GridLines.Color = defaultColor ? CurveChartDisplay.CurveColorQH : Color.Black;
if (curve != null)
{
curve.View.Color = defaultColor ? CurveChartDisplay.CurveColorQH : Color.Black;
}
if (point != null)
{
point.View.Color = defaultColor ? CurveChartDisplay.PointColorQH : Color.Black;
}
}
///
/// 设置效率轴
///
///
public static void SetSecondaryAxisYQEColorDisplay(this SecondaryAxisY axis, Series curve = null, Series point = null, bool defaultColor = false)
{
axis.Color = defaultColor ? CurveChartDisplay.CurveColorQE : Color.Black;
axis.Label.TextColor = defaultColor ? CurveChartDisplay.CurveColorQE : Color.Black;
axis.Title.TextColor = defaultColor ? CurveChartDisplay.CurveColorQE : Color.Black;
//axis.GridLines.Color = defaultColor ? CurveChartDisplay.CurveColorQE : Color.Black;
if (curve != null)
{
curve.View.Color = defaultColor ? CurveChartDisplay.CurveColorQE : Color.Black;
}
if (point != null)
{
point.View.Color = defaultColor ? CurveChartDisplay.PointColorQE : Color.Black;
}
}
///
/// 设置功率轴
///
///
public static void SetSecondaryAxisYQPColorDisplay(this SecondaryAxisY axis, Series curve = null, Series point = null, bool defaultColor = false)
{
axis.Color = defaultColor ? CurveChartDisplay.CurveColorQP : Color.Black;
axis.Label.TextColor = defaultColor ? CurveChartDisplay.CurveColorQP : Color.Black;
axis.Title.TextColor = defaultColor ? CurveChartDisplay.CurveColorQP : Color.Black;
//axis.GridLines.Color = defaultColor ? CurveChartDisplay.CurveColorQP : Color.Black;
if (curve != null)
{
curve.View.Color = defaultColor ? CurveChartDisplay.CurveColorQP : Color.Black;
}
if (point != null)
{
point.View.Color = defaultColor ? CurveChartDisplay.PointColorQP : Color.Black;
}
}
#endregion
#region SetSeries
///
/// 设置流量扬程线
///
///
public static void SetCurveQHDisplay(this Series series, bool showMarker = false)
{
series.View.Color = CurveChartDisplay.CurveColorQH;
series.ArgumentScaleType = ScaleType.Numerical;
series.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;
series.LegendTextPattern = CurveChartDisplay.AnnoTextQH;
if (series.View is SplineSeriesView view)
{
view.MarkerVisibility = showMarker ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
}
}
///
/// 设置流量效率线
///
///
public static void SetCurveQEDisplay(this Series series, bool showMarker = false)
{
series.View.Color = CurveChartDisplay.CurveColorQE;
series.ArgumentScaleType = ScaleType.Numerical;
series.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;
series.LegendTextPattern = CurveChartDisplay.AnnoTextQE;
if (series.View is SplineSeriesView view)
{
view.MarkerVisibility = showMarker ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
}
}
///
/// 设置流量功率线
///
///
public static void SetCurveQPDisplay(this Series series, bool showMarker = false)
{
series.View.Color = CurveChartDisplay.CurveColorQP;
series.ArgumentScaleType = ScaleType.Numerical;
series.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;
series.LegendTextPattern = CurveChartDisplay.AnnoTextQP;
if (series.View is SplineSeriesView view)
{
view.MarkerVisibility = showMarker ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
}
}
///
/// 设置流量扬程点
///
///
public static void SetPointQHDisplay(this Series series)
{
series.View.Color = CurveChartDisplay.PointColorQH;
series.ArgumentScaleType = ScaleType.Numerical;
series.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True;
series.ShowInLegend = false;
if (series.View is PointSeriesView view)
{
view.PointMarkerOptions.BorderColor = CurveChartDisplay.PointColorQH;
view.PointMarkerOptions.Size = CurveChartDisplay.PointSizeQH;
view.PointMarkerOptions.Kind = (MarkerKind)CurveChartDisplay.PointKindQH;
}
}
///
/// 设置流量效率点
///
///
public static void SetPointQEDisplay(this Series series)
{
series.View.Color = CurveChartDisplay.PointColorQE;
series.ArgumentScaleType = ScaleType.Numerical;
series.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True;
series.ShowInLegend = false;
if (series.View is PointSeriesView view)
{
view.PointMarkerOptions.BorderColor = CurveChartDisplay.PointColorQE;
view.PointMarkerOptions.Size = CurveChartDisplay.PointSizeQE;
view.PointMarkerOptions.Kind = (MarkerKind)CurveChartDisplay.PointKindQE;
}
}
///
/// 设置流量功率点
///
///
public static void SetPointQPDisplay(this Series series)
{
series.View.Color = CurveChartDisplay.PointColorQP;
series.ArgumentScaleType = ScaleType.Numerical;
series.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True;
series.ShowInLegend = false;
if (series.View is PointSeriesView view)
{
view.PointMarkerOptions.BorderColor = CurveChartDisplay.PointColorQP;
view.PointMarkerOptions.Size = CurveChartDisplay.PointSizeQP;
view.PointMarkerOptions.Kind = (MarkerKind)CurveChartDisplay.PointKindQP;
}
}
#region Color
///
/// 设置默认颜色
///
///
public static void SetDefaultColorDisplay(this Series series, Model.eFeatCurveType featCurveType)
{
Color pointColor = CurveChartDisplay.CurveColorQH;
Color lineColor = CurveChartDisplay.PointColorQH;
if (featCurveType == Model.eFeatCurveType.QE)
{
pointColor = CurveChartDisplay.CurveColorQE;
lineColor = CurveChartDisplay.PointColorQE;
}
else if (featCurveType == Model.eFeatCurveType.QP)
{
pointColor = CurveChartDisplay.CurveColorQP;
lineColor = CurveChartDisplay.PointColorQP;
}
if (series.View is PointSeriesView pointView)
{
pointView.Color = pointColor;
}
else if (series.View is SplineSeriesView lineView)
{
lineView.Color = lineColor;
}
}
///
/// 设置默认颜色
///
///
public static void SetQHColorDisplay(this Series series)
{
if (series.View is PointSeriesView pointView)
{
pointView.Color = CurveChartDisplay.CurveColorQH;
}
else if (series.View is SplineSeriesView lineView)
{
lineView.Color = CurveChartDisplay.PointColorQH;
}
}
///
/// 设置默认颜色
///
///
public static void SetQEColorDisplay(this Series series)
{
if (series.View is PointSeriesView pointView)
{
pointView.Color = CurveChartDisplay.CurveColorQE;
}
else if (series.View is SplineSeriesView lineView)
{
lineView.Color = CurveChartDisplay.PointColorQE;
}
}
///
/// 设置默认颜色
///
///
public static void SetQPColorDisplay(this Series series)
{
if (series.View is PointSeriesView pointView)
{
pointView.Color = CurveChartDisplay.CurveColorQP;
}
else if (series.View is SplineSeriesView lineView)
{
lineView.Color = CurveChartDisplay.PointColorQP;
}
}
///
/// 设置单色
///
///
public static void SetMonoColorDisplay(this Series series)
{
if (series.View is PointSeriesView view)
{
view.Color = Color.Black;
}
}
#endregion
#endregion
#region SetTextAnnotation
///
/// 设置流量扬程注释
///
///
public static void SetTextAnnoQHDisplay(this TextAnnotation txt)
{
txt.DXFont = CurveChartDisplay.AnnoFontQH;
txt.Text = CurveChartDisplay.AnnoTextQH;
txt.ConnectorStyle = (AnnotationConnectorStyle)CurveChartDisplay.AnnoConnTypeQH;
}
///
/// 设置流量效率注释
///
///
public static void SetTextAnnoQEDisplay(this TextAnnotation txt)
{
txt.DXFont = CurveChartDisplay.AnnoFontQE;
txt.Text = CurveChartDisplay.AnnoTextQE;
txt.ConnectorStyle = (AnnotationConnectorStyle)CurveChartDisplay.AnnoConnTypeQE;
}
///
/// 设置流量功率注释
///
///
public static void SetTextAnnoQPDisplay(this TextAnnotation txt)
{
txt.DXFont = CurveChartDisplay.AnnoFontQP;
txt.Text = CurveChartDisplay.AnnoTextQP;
txt.ConnectorStyle = (AnnotationConnectorStyle)CurveChartDisplay.AnnoConnTypeQP;
}
#endregion
}
}