From 5f41b0bc190c8f7ba9b4f6d015b48b2a6039b7f8 Mon Sep 17 00:00:00 2001 From: Shuxia Ning <NingShuxia0927@outlook.com> Date: 星期四, 19 十二月 2024 16:43:39 +0800 Subject: [PATCH] 入参 --- WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs | 369 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 241 insertions(+), 128 deletions(-) diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs index 18a2f0c..a51d25f 100644 --- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs +++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs @@ -17,11 +17,9 @@ #region Private Variable private XYDiagram _diagram; + private XYDiagramDefaultPane _default_pane; private AxisX _axis_x; - private AxisY _axis_y; - - private Series _series_line; - private Series _series_point; + private AxisY _axis_y; private List<Yw.Geometry.Point2d> _point_pt_list; private List<Yw.Geometry.Point2d> _line_pt_list; @@ -114,27 +112,37 @@ _diagram = (XYDiagram)chartControl1.Diagram; + _default_pane=_diagram.DefaultPane; _axis_x = _diagram.AxisX; //_axis_x.SetAxisXQDisplay(); _axis_y = _diagram.AxisY; //_axis_y.SetAxisYQLDisplay(); - _series_line = this.chartControl1.GetSeriesByName("SeriesLine"); - //_series_line.SetCurveQLDisplay(); - - _series_point = this.chartControl1.GetSeriesByName("SeriesPoint"); - //_series_point.SetPointQLDisplay(); + _axis_x.Visibility = DefaultBoolean.False; _axis_x.GridLines.Visible = false; _axis_y.Visibility = DefaultBoolean.False; _axis_y.GridLines.Visible = false; - - _series_point.Visible = false; + this.chartControl1.SetChartMonoColorDisplay(); } + /// <summary> + /// 鍒濆鍖栧潗鏍囪酱 + /// </summary> + private void InitialCoordinate() + { + //璁剧疆鎴愮櫧鏉垮潗鏍� + _coordinate = new UniversalCoordinate(); + _coordinate.GridNumberX = 30; + _coordinate.GridNumberY = 16; + _coordinate.StartLineNoY = 10; + _coordinate.EndLineNoY = 15; + _coordinate.CoordMinX = 0; _coordinate.CoordSpaceX = 1000; + _coordinate.CoordMinY = 10; _coordinate.CoordSpaceY = 100; + } #endregion Initial @@ -143,93 +151,211 @@ /// <summary> /// 缁戝畾鏁版嵁 /// </summary> - public void SetBindingData(List<Yw.Geometry.Point2d> point_pt_list, List<Yw.Geometry.Point2d> line_pt_list, string coordinate = null) + public void SetBindingData(List<Yw.Geometry.Point2d> point_pt_list, List<Yw.Geometry.Point2d> line_pt_list, string coordinate = null, Color? color = null) { _initial_data = false; _point_pt_list = point_pt_list; _line_pt_list = line_pt_list; _coordinate = UniversalCoordinate.ToModel(coordinate); - if (line_pt_list == null || !line_pt_list.Any()) + + this.chartControl1.BeginInit(); + this.chartControl1.Series.Clear(); + this.chartControl1.AnnotationRepository.Clear(); + this.chartControl1.Legend.CustomItems.Clear(); + if (IsInvalidData()) { + _initial_data = false; + this.chartControl1.EndInit(); return; } - if (point_pt_list == null || !point_pt_list.Any()) - { - point_pt_list = line_pt_list.Select(x => x.Clone()).ToList(); - } - - _initial_data = true; - UpdateChart(); - } - - #endregion - - #region Update - - /// <summary> - /// 鏇存柊鏇茬嚎 - /// </summary> - public void UpdateCurve(List<Yw.Geometry.Point2d> point_pt_list) - { - if (point_pt_list == null || !point_pt_list.Any()) - return; - - _point_pt_list = point_pt_list; - _line_pt_list = point_pt_list.GetFitPointList(); - - UpdateChart(true); - } - - /// <summary> - /// 鏇存柊鍥捐〃 - /// </summary> - /// <param name="calc_coordinate">璁$畻鍧愭爣</param> - public void UpdateChart(bool calc_coordinate = false) - { - if (calc_coordinate || _coordinate == null) - { - //涓嶅己杩绠�,灏辩敤涓婃鏇存柊鐨勫潗鏍囩郴 - CalcCoordinate(); - } - - CalcChartAxis(); - - CalcSeries(); - } - - #endregion Update - - #region Calc - - /// <summary> - /// 璁$畻鍧愭爣 - /// </summary> - public void CalcCoordinate() - { - if (_line_pt_list == null || _line_pt_list.Count < 4) - { - //璁剧疆鎴愮櫧鏉垮潗鏍� - _coordinate = new UniversalCoordinate(); - _coordinate.GridNumberX = 30; - _coordinate.GridNumberY = 16; - //鏄剧ず鐨勫潗鏍囩嚎鍙� - _coordinate.StartLineNoY = 10; - _coordinate.EndLineNoY = 15; - //鍧愭爣鏈�灏忓�煎拰闂撮殧 - _coordinate.CoordMinX = 0; _coordinate.CoordSpaceX = 1000; - _coordinate.CoordMinY = 10; _coordinate.CoordSpaceY = 100; - return; - } - - _coordinate = UniversalCoordinate.CalcCoordinate(_line_pt_list); - } - - /// <summary> - /// 璁$畻鍥捐〃杞� - /// </summary> - public void CalcChartAxis() - { + + AddPointSeries(color.Value, _axis_x, _axis_y, _default_pane, _point_pt_list); + AddLineSeries(color.Value, _axis_x, _axis_y, _default_pane, _line_pt_list); if (_coordinate == null) + SetCoordinate(); + + SetChartAxis(); + this.chartControl1.EndInit(); + _initial_data = true; + + } + + //鏄惁鏄棤鏁堟暟鎹� + private bool IsInvalidData() + { + if (_point_pt_list == null || !_point_pt_list.Any()) + { + return true; + } + if (_line_pt_list == null || !_line_pt_list.Any()) + { + return true; + } + return false; + } + + #region Add Chart Data + + private void AddPointSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list) + { + if (pt_list == null || !pt_list.Any()) + return; + + var view = new DevExpress.XtraCharts.PointSeriesView(); + view.PointMarkerOptions.Size = 8; + view.PointMarkerOptions.Kind = MarkerKind.Circle; + view.PointMarkerOptions.BorderColor = color; + view.Color = color; + view.AxisX = axis_x; + view.AxisY = axis_y; + view.EmptyPointOptions.Color = Color.Transparent; + view.Pane = pane; + + var series_pt_list = new List<SeriesPoint>(); + for (int i = 0; i < pt_list.Count; i++) + { + var pt = pt_list[i]; + var series_pt = new DevExpress.XtraCharts.SeriesPoint(pt.X, new double[] { pt.Y }); + series_pt_list.Add(series_pt); + } + + var series = new DevExpress.XtraCharts.Series(); + series.ShowInLegend = false; + series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; + series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; + series.CrosshairEnabled = DefaultBoolean.False; + series.CrosshairLabelVisibility = DefaultBoolean.False; + series.ToolTipEnabled = DefaultBoolean.False; + series.SeriesPointsSorting = SortingMode.None; + series.Visible = true; + series.View = view; + series.CrosshairLabelPattern = "{A}"; + series.Points.AddRange(series_pt_list); + this.chartControl1.Series.Add(series); + } + + private void AddLineSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list, DashStyle dash = DashStyle.Solid) + { + if (pt_list == null || !pt_list.Any()) + return; + + var view = new DevExpress.XtraCharts.LineSeriesView(); + view.LineStyle.DashStyle = dash; + view.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; + view.LineStyle.Thickness = 2; + view.Color = color; + view.EnableAntialiasing = DefaultBoolean.True; + view.MarkerVisibility = DefaultBoolean.False; + view.AxisX = axis_x; + view.AxisY = axis_y; + view.EmptyPointOptions.Color = Color.Transparent; + view.Pane = pane; + + var series_pt_list = pt_list.Select(x => x.ToSeriesPoint()).ToArray(); + var series = new DevExpress.XtraCharts.Series(); + series.ShowInLegend = false; + series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; + series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; + series.CrosshairEnabled = DefaultBoolean.False; + series.ToolTipEnabled = DefaultBoolean.False; + series.SeriesPointsSorting = SortingMode.None; + series.Visible = true; + series.View = view; + series.Points.AddRange(series_pt_list); + + this.chartControl1.Series.Add(series); + } + + private void AddAnnotation(string caption, Color color, AxisYBase axis_y, XYDiagramPaneBase pane, Yw.Geometry.Point2d pt, double angle = -10) + { + if (pt == null) + return; + var anchor_pt = pt; + var pane_anchor_pt = new DevExpress.XtraCharts.PaneAnchorPoint(); + pane_anchor_pt.Pane = pane; + pane_anchor_pt.AxisYCoordinate.Axis = axis_y; + pane_anchor_pt.AxisXCoordinate.AxisValue = anchor_pt.X; + pane_anchor_pt.AxisYCoordinate.AxisValue = anchor_pt.Y; + + var relative_position = new DevExpress.XtraCharts.RelativePosition(); + relative_position.Angle = angle; + relative_position.ConnectorLength = 20; + + var text_annotation = new TextAnnotation(); + text_annotation.Border.Visibility = DefaultBoolean.False; + text_annotation.AnchorPoint = pane_anchor_pt; + text_annotation.AutoHeight = true; + text_annotation.AutoWidth = true; + text_annotation.BackColor = System.Drawing.Color.Transparent; + text_annotation.Border.Color = color; + text_annotation.ConnectorStyle = DevExpress.XtraCharts.AnnotationConnectorStyle.Line; + text_annotation.Padding.Bottom = 1; + text_annotation.Padding.Left = 1; + text_annotation.Padding.Right = 1; + text_annotation.Padding.Top = 1; + text_annotation.RuntimeMoving = true; + text_annotation.RuntimeAnchoring = false; + text_annotation.RuntimeResizing = false; + text_annotation.RuntimeRotation = false; + text_annotation.Text = caption; + text_annotation.TextColor = color; + text_annotation.ShapePosition = relative_position; + text_annotation.Visible = true; + + this.chartControl1.AnnotationRepository.Add(text_annotation); + } + + #endregion + + #endregion + + + + #region Set Axis + + private double _minX, _maxX; + private double _maxY = 0, _minY = 10000; + + /// <summary> + /// 璁剧疆鍧愭爣 + /// </summary> + private void SetCoordinate() + { + if (IsInvalidData()) + { + InitialCoordinate(); + return; + } + + _minX = _point_pt_list.Min(x => x.X); + _maxX = _point_pt_list.Max(x => x.X); + + _minY = _point_pt_list.Min(x => x.Y); + _maxY = _point_pt_list.Max(x => x.Y); + + _minX = Math.Min(_line_pt_list.Min(x => x.X), _minX); + _maxX = Math.Min(_line_pt_list.Max(x => x.X), _maxX); + + _minY = Math.Min(_line_pt_list.Min(x => x.Y), _minY); + _maxY = Math.Min(_line_pt_list.Max(x => x.Y), _maxY); + + + _coordinate = UniversalCoordinate.CalcCoordinate(_minX, _maxX, _minY, _maxY); + if (_coordinate == null) + return; + if (_coordinate.CoordMinX + _coordinate.CoordSpaceX * this._coordinate.GridNumberX < _maxX * 1.05) + { + _coordinate.GridNumberX++; + } + + } + + /// <summary> + /// 璁剧疆鍥捐〃杞� + /// </summary> + public void SetChartAxis() + { + if (_coordinate == null || IsInvalidData()) { _axis_x.Visibility = DefaultBoolean.False; _axis_x.GridLines.Visible = false; @@ -237,52 +363,39 @@ _axis_y.GridLines.Visible = false; return; } - if (_line_pt_list != null && _line_pt_list.Any()) - { + + //璁$畻鍒诲害 X + var axis_x_labels = new List<CustomAxisLabel>(); + var dis_x = _coordinate.CoordMinX; + for (int i = 0; i < _coordinate.GridNumberX + 1; i++) + { + axis_x_labels.Add(new CustomAxisLabel(dis_x.ToString("N0"), dis_x)); + dis_x = dis_x + _coordinate.CoordSpaceX; } - //娴侀噺 - if (_line_pt_list != null) + _axis_x.CustomLabels.Clear(); + _axis_x.CustomLabels.AddRange(axis_x_labels.ToArray()); + _axis_x.Visibility = DefaultBoolean.True; + _axis_x.GridLines.Visible = true; + + + //璁$畻鍒诲害 Y + var axis_y_labels = new List<CustomAxisLabel>(); + var dis_y = _coordinate.CoordMinY + _coordinate.CoordSpaceY * _coordinate.StartLineNoY; + for (int i = _coordinate.StartLineNoY; i < _coordinate.EndLineNoY + 1; i++) { - //璁$畻鍒诲害 - var labels = new List<CustomAxisLabel>(); - var disX = _coordinate.CoordMinX; - for (int i = 0; i < _coordinate.GridNumberX + 1; i++) - { - labels.Add(new CustomAxisLabel(disX.ToString("N0"), disX)); - disX = disX + _coordinate.CoordSpaceX; - } - - //鍧愭爣鍒诲害 - _axis_x.CustomLabels.Clear(); - _axis_x.CustomLabels.AddRange(labels.ToArray()); - _axis_x.Visibility = DefaultBoolean.True; - _axis_x.GridLines.Visible = true; - _axis_x.SetAxisRange(_coordinate.CoordMinX, _coordinate.CoordMinX + _coordinate.GridNumberX * _coordinate.CoordSpaceX); + axis_y_labels.Add(new CustomAxisLabel(dis_y.ToString(), dis_y)); + dis_y = dis_y + _coordinate.CoordSpaceY; } - - { - //璁$畻鍒诲害 - var labels = new List<CustomAxisLabel>(); - var display_head = _coordinate.CoordMinY + _coordinate.CoordSpaceY * _coordinate.StartLineNoY; - for (int i = _coordinate.StartLineNoY; i < _coordinate.EndLineNoY + 1; i++) - { - labels.Add(new CustomAxisLabel(display_head.ToString(), display_head)); - display_head = display_head + _coordinate.CoordSpaceY; - } + _axis_y.CustomLabels.Clear(); + _axis_y.CustomLabels.AddRange(axis_y_labels.ToArray()); + _axis_y.Visibility = DefaultBoolean.True; + _axis_y.GridLines.Visible = true; - _axis_y.CustomLabels.Clear(); - _axis_y.CustomLabels.AddRange(labels.ToArray()); - _axis_y.Visibility = DefaultBoolean.True; - _axis_y.GridLines.Visible = true; - } - - - _axis_x.SetAxisRange(_coordinate.CoordMinX, _coordinate.CoordMinX + _coordinate.GridNumberX * _coordinate.CoordSpaceX); + _axis_x.SetAxisRange(_coordinate.CoordMinX, _coordinate.DispMaxX()); _axis_y.SetAxisRange(_coordinate.DispMinY(), _coordinate.DispMaxY()); - } /// <summary> @@ -426,7 +539,7 @@ } DefinePointChangedEvent?.Invoke(_point_pt_list); - CalcChartAxis(); + SetChartAxis(); } #endregion ChartEvent -- Gitblit v1.9.3