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 } }