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