From 4c32366350018806978182f05352ef75698f995f Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期五, 17 一月 2025 11:33:19 +0800
Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0

---
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs |  319 +++++++++++++++++++---------------------------------
 1 files changed, 119 insertions(+), 200 deletions(-)

diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs
index feb1a9d..a304805 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs
@@ -86,6 +86,20 @@
 
         #endregion
 
+        #region Public Evnet
+
+        /// <summary>
+        /// 鍧愭爣鍙樻崲浜嬩欢
+        /// </summary>
+        public event Action<PumpCoordinate> CoordinateChangedEvent = null;
+
+        /// <summary>
+        /// 鏌ヨ鐐瑰彉鎹簨浠�
+        /// </summary>
+        public event Action<(long DbId,string Tag,double X,double Y)> AnnotationChangedEvent = null;
+         
+        #endregion
+
         #region Private Initial
 
         /// <summary>
@@ -95,9 +109,7 @@
         {
             this.chartControl1.SetChartDisplay();
             this.chartControl1.RuntimeHitTesting = true;
-            //this.chartControl1.AnimationStartMode = ChartAnimationMode.OnLoad;
-            //this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Series;
-            //this.chartControl1.SelectionMode = ElementSelectionMode.Single;
+            //this.chartControl1.AnimationStartMode = ChartAnimationMode.OnLoad; 
 
             this.chartControl1.ObjectHotTracked += new DevExpress.XtraCharts.HotTrackEventHandler(this.chartControl1_ObjectHotTracked);
             this.chartControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseMove);
@@ -105,7 +117,8 @@
             this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseDown);
             this.chartControl1.Resize += new System.EventHandler(this.chartControl1_Resize);
             this.chartControl1.CustomPaint += ChartControl1_CustomPaint;
-
+          
+               
 
             _diagram = (XYDiagram)this.chartControl1.Diagram;
             _default_pane = _diagram.DefaultPane;
@@ -144,8 +157,9 @@
             _anno_txt_query_info.SetTextAnnoWorkPointDisplay();
             _anno_txt_query_info.Visible = false;
         }
-         
-       
+
+   
+
 
         /// <summary>
         /// 鍒濆鍖栧潗鏍囪酱
@@ -191,7 +205,9 @@
         }
 
         private bool _on_move_x_line = false;
-        private bool _on_move_y_line = false;
+        private bool _on_move_y_line = false; 
+        private bool _on_move_annotation = false;
+        private TextAnnotation _on_move_annotation_obj = null;
         private void chartControl1_MouseDown(object sender, MouseEventArgs e)
         {
             if (!_initial_data)
@@ -211,6 +227,16 @@
                         _on_move_y_line = true;
                     }
                 }
+                else if (hitInfo.InAnnotation)
+                {
+                    if (hitInfo.Annotation.Tag is not string id)
+                        return;
+                    if (!long.TryParse(id, out long db_id))
+                        return;
+                    _on_move_annotation = true;
+                    _on_move_annotation_obj = (TextAnnotation)hitInfo.Annotation;
+                }
+
             }
 
         }
@@ -228,7 +254,6 @@
                     return;
                 double chartQ = axis_value.NumericalValue;
                 SetAxisXValue(chartQ);
-
             }
             else if (_on_move_y_line)
             {
@@ -256,23 +281,58 @@
                     this.chartControl1.Cursor = Cursors.Default;
                 }
             }
+
         }
 
         private void chartControl1_MouseUp(object sender, MouseEventArgs e)
         {
             if (!_initial_data)
                 return;
+            if (_on_move_annotation && _on_move_annotation_obj != null)
+            {
+                if (this.AnnotationChangedEvent != null)
+                {
+                    var db_id = Convert.ToInt64(_on_move_annotation_obj.Tag);
+
+                    var pane_anchor_pt = _on_move_annotation_obj.AnchorPoint as PaneAnchorPoint;
+                    if (pane_anchor_pt != null)
+                    {
+                        var diagram_coordinates = _diagram.PointToDiagram(e.Location);
+                        AxisValue axis_x_value= diagram_coordinates.GetAxisValue(_axis_x_flow);
+                        AxisValue axis_y_value = diagram_coordinates.GetAxisValue(pane_anchor_pt.AxisYCoordinate.Axis);
+  
+                        if (axis_x_value==null|| axis_y_value==null)
+                        {
+                            return;
+                        }
+
+                        var tag = pane_anchor_pt.Tag?.ToString() ?? null;
+                        var x = axis_x_value.NumericalValue;
+                        var y = axis_y_value.NumericalValue;
+
+                        pane_anchor_pt.AxisXCoordinate.AxisValue = x;
+                        pane_anchor_pt.AxisYCoordinate.AxisValue = y;
+                        this.AnnotationChangedEvent?.Invoke((db_id, tag, x, y));
+                    }
+
+
+                }
+
+            }
+
             _on_move_x_line = false;
             _on_move_y_line = false;
+            _on_move_annotation = false;
+            _on_move_annotation_obj = null;
         }
 
         private void chartControl1_Resize(object sender, EventArgs e)
         {
-            var x = this.chartControl1.Location.X + this.chartControl1.Width;
-            var y = this.chartControl1.Location.Y + 100;
+            var x = this.chartControl1.Location.X + this.chartControl1.Width*0.90;
+            var y = this.chartControl1.Location.Y+this.chartControl1.Height *0.1;
 
-            (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).X = x;
-            (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).Y = y; 
+            (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).X = (int)x;
+            (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).Y = (int)y;
         }
 
 
@@ -417,7 +477,12 @@
             _initial_data = false;
             this.chartControl1.BeginInit();
             this.chartControl1.Series.Clear();
-            this.chartControl1.AnnotationRepository.Clear();
+            for (int i = this.chartControl1.AnnotationRepository.Count - 1; i > 0; i--)
+            {
+                if (i == 0)
+                    break;
+                this.chartControl1.AnnotationRepository.RemoveAt(i);
+            }
             this.chartControl1.Legend.CustomItems.Clear();
             this.chartControl1.EndInit();
         }
@@ -438,7 +503,12 @@
 
             this.chartControl1.BeginInit();
             this.chartControl1.Series.Clear();
-            this.chartControl1.AnnotationRepository.Clear();
+            for (int i = this.chartControl1.AnnotationRepository.Count - 1; i > 0; i--)
+            {
+                if (i == 0)
+                    break;
+                this.chartControl1.AnnotationRepository.RemoveAt(i);
+            }
             this.chartControl1.Legend.CustomItems.Clear();
             if (IsInvalidData())
             {
@@ -485,14 +555,14 @@
                     axis_x = _axis_x_flow;
                     axis_y = _axis_y_power;
                     pane = _split_panel? _bottom_pane: _default_pane; 
-                } 
+                }
 
                 if (vm.AnnotationList != null && vm.AnnotationList.Any())
                 {
                     foreach (var name in vm.AnnotationList)
                     {
-                        AddAnnotation(vm.Id, name.Text, vm.Color, axis_y, pane, new Geometry.Point2d(name.X, name.Y), -40);
-                    }
+                        AddAnnotation(vm.Id, name.Tag, name.Text, vm.Color, axis_y, pane, new Geometry.Point2d(name.X, name.Y), 0,0);
+                    } 
                 }
 
 
@@ -616,7 +686,7 @@
             this.chartControl1.Series.Add(series);
         }
 
-        private void AddAnnotation(string id, string caption, Color color, AxisYBase axis_y, XYDiagramPaneBase pane, Yw.Geometry.Point2d pt, double angle = -10)
+        private void AddAnnotation(string id, string tag, string caption, Color color, AxisYBase axis_y, XYDiagramPaneBase pane, Yw.Geometry.Point2d pt, double angle = -10, double connector_length = 20)
         {
             if (pt == null)
                 return;
@@ -626,11 +696,14 @@
             pane_anchor_pt.AxisYCoordinate.Axis = axis_y;
             pane_anchor_pt.AxisXCoordinate.AxisValue = anchor_pt.X;
             pane_anchor_pt.AxisYCoordinate.AxisValue = anchor_pt.Y;
+            pane_anchor_pt.Tag = tag;
 
+
+    
             var relative_position = new DevExpress.XtraCharts.RelativePosition();
             relative_position.Angle = angle;
-            relative_position.ConnectorLength = 20;
-
+            relative_position.ConnectorLength = connector_length;
+             
             var text_annotation = new TextAnnotation();
             text_annotation.AnchorPoint = pane_anchor_pt;
             text_annotation.AutoHeight = true;
@@ -644,14 +717,17 @@
             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.RuntimeMoving = false;
+            text_annotation.RuntimeAnchoring = true;
             text_annotation.RuntimeResizing = false;
             text_annotation.RuntimeRotation = false;
+            text_annotation.RuntimeEditing = false;
             text_annotation.Text = caption;
             text_annotation.TextColor = color;
             text_annotation.ShapePosition = relative_position;
             text_annotation.Visible = true;
+            text_annotation.EnableAntialiasing = DefaultBoolean.True;
+          
             text_annotation.DXFont = new DevExpress.Drawing.DXFont(this.Font.Name, 10F);
 
             this.chartControl1.AnnotationRepository.Add(text_annotation);
@@ -930,12 +1006,12 @@
             }
             if (this.IsInvalidData())
                 return;
-            var vm_sel = _vm_list.Find(x => x.IsSelect);
-            if (vm_sel == null)
+            var qh = _vm_list.Find(x => x.IsSelect&&x.CurveType== eCurveType.QH); 
+            if (qh == null)
                 return;
 
-            var min_x = vm_sel.FitPointList.Min(x => x.X);
-            var max_x = vm_sel.FitPointList.Max(x => x.X);
+            var min_x = qh.FitPointList.Min(x => x.X);
+            var max_x = qh.FitPointList.Max(x => x.X);
 
             if (x == null)
             {
@@ -948,7 +1024,7 @@
             }
 
             var x_value = x.Value;
-            var y_value = vm_sel.FitPointList.GetInterPointsY(x_value)?.FirstOrDefault();
+            var y_value = qh.FitPointList.GetInterPointsY(x_value)?.FirstOrDefault();
 
             _const_line_x.AxisValue = x_value;
             _const_line_x.Title.Text = $"{x_value:N1}";
@@ -959,6 +1035,21 @@
             var query_info_builder = new StringBuilder();
             query_info_builder.AppendLine($"{x_value:N2} m鲁/h ");
             query_info_builder.AppendLine($"{y_value:N2} m");
+
+            var qe = _vm_list.Find(x => x.IsSelect && x.CurveType == eCurveType.QE);
+            if (qe != null)
+            {
+                var eff = qe.FitPointList.GetInterPointsY(x_value).FirstOrDefault();
+                query_info_builder.AppendLine($"{eff:N2} % ");
+            }
+
+            var qp = _vm_list.Find(x => x.IsSelect && x.CurveType == eCurveType.QP);
+            if (qp != null)
+            {
+                var power = qp.FitPointList.GetInterPointsY(x_value).FirstOrDefault();
+                query_info_builder.Append($"{power:N2} kW/h ");
+            }
+
 
             _anno_txt_query_info.Text = query_info_builder.ToString();
             _anno_txt_query_info.AutoSize = true;
@@ -990,176 +1081,4 @@
 
         #endregion
     }
-}
-
-///// <summary>
-///// 璁剧疆鍥捐〃杞�
-///// </summary>
-//private void SetChartAxis()
-//{
-//    _axis_x_flow.Visibility = DefaultBoolean.False;
-//    _axis_x_flow.GridLines.Visible = false;
-//    _axis_y_head.Visibility = DefaultBoolean.False;
-//    _axis_y_head.GridLines.Visible = false;
-//    _axis_y_eff.Visibility = DefaultBoolean.False;
-//    _axis_y_eff.GridLines.Visible = false;
-//    _axis_y_power.Visibility = DefaultBoolean.False;
-//    _axis_y_power.GridLines.Visible = false;
-//    if (_coordinate == null)
-//    {
-//        _const_line_x.Visible = false;
-//        _const_line_y.Visible = false;
-//        _bottom_pane.Visibility = ChartElementVisibility.Hidden;
-//        return;
-//    }
-
-
-//    //璁$畻鍒诲害 Q
-//    var axisQLabels = new List<CustomAxisLabel>();
-//    var disQ = _coordinate.CoordMinQ;
-//    for (int i = 0; i < _coordinate.GridNumberX + 1; i++)
-//    {
-//        axisQLabels.Add(new CustomAxisLabel(disQ.ToString("N0"), disQ));
-//        disQ = disQ + _coordinate.CoordSpaceQ;
-//    }
-
-//    _axis_x_flow.CustomLabels.Clear();
-//    _axis_x_flow.CustomLabels.AddRange(axisQLabels.ToArray());
-//    _axis_x_flow.Visibility = DefaultBoolean.True;
-//    _axis_x_flow.GridLines.Visible = true;
-
-
-//    //璁$畻鍒诲害
-//    var axis_head_labels = new List<CustomAxisLabel>();
-//    var display_head = _coordinate.CoordMinH + _coordinate.CoordSpaceH * _coordinate.StartLineNoH;
-//    for (int i = _coordinate.StartLineNoH; i < _coordinate.EndLineNoH + 1; i++)
-//    {
-//        axis_head_labels.Add(new CustomAxisLabel(display_head.ToString(), display_head));
-//        display_head = display_head + _coordinate.CoordSpaceH;
-//    }
-
-//    _axis_y_head.CustomLabels.Clear();
-//    _axis_y_head.CustomLabels.AddRange(axis_head_labels.ToArray());
-//    _axis_y_head.Visibility = DefaultBoolean.True;
-//    _axis_y_head.GridLines.Visible = true;
-
-//    //鏁堢巼
-//    if (_maxE > _minE && _eff_visible)
-//    {
-//        //璁$畻鍒诲害
-//        var label_list = new List<CustomAxisLabel>();
-//        var display_eff = _coordinate.CoordMinE + _coordinate.CoordSpaceE * _coordinate.StartLineNoE;
-//        for (int i = _coordinate.StartLineNoE; i < _coordinate.EndLineNoE + 1; i++)
-//        {
-//            label_list.Add(new CustomAxisLabel(display_eff.ToString(), display_eff));
-//            display_eff = display_eff + _coordinate.CoordSpaceE;
-//        }
-
-//        _axis_y_eff.CustomLabels.Clear();
-//        _axis_y_eff.CustomLabels.AddRange(label_list.ToArray());
-//        _axis_y_eff.Visibility = DefaultBoolean.True;
-//        _axis_y_eff.GridLines.Visible = true;
-//    }
-
-//    //鍔熺巼
-//    if (_maxP > _minP && _power_visible)
-//    {
-//        //璁$畻鍒诲害
-//        var label_list = new List<CustomAxisLabel>();
-//        double display_power = _coordinate.CoordMinP + _coordinate.CoordSpaceP * _coordinate.StartLineNoP;
-//        for (int i = _coordinate.StartLineNoP; i < _coordinate.EndLineNoP + 1; i++)
-//        {
-//            label_list.Add(new CustomAxisLabel(display_power.ToString(), display_power));
-//            display_power = display_power + _coordinate.CoordSpaceP;
-//        }
-
-//        _axis_y_power.CustomLabels.Clear();
-//        _axis_y_power.CustomLabels.AddRange(label_list.ToArray());
-//        _axis_y_power.Visibility = DefaultBoolean.True;
-//        _axis_y_power.GridLines.Visible = true;
-//    }
-
-
-//    _axis_x_flow.SetAxisRange(_coordinate.CoordMinQ, _coordinate.CoordMinQ + _coordinate.GridNumberX * _coordinate.CoordSpaceQ);
-//    if (_split_panel)
-//    {
-//        if (_power_visible)
-//        {
-//            var grid_count_head = _coordinate.EndLineNoH - _coordinate.StartLineNoH;
-//            var grid_count_eff = _coordinate.EndLineNoE - _coordinate.StartLineNoE;
-//            int grid_count_add = Math.Max(grid_count_head, grid_count_eff);
-//            if (_eff_visible)
-//                grid_count_add += +5;//澶氫袱鏉�
-
-//            var max_axis_head = _coordinate.CoordMinH + _coordinate.EndLineNoH * _coordinate.CoordSpaceH;
-//            var min_axis_head = max_axis_head - grid_count_add * _coordinate.CoordSpaceH;
-//            _axis_y_head.SetAxisRange(min_axis_head, max_axis_head);
-
-//            var min_axis_eff = _coordinate.CoordMinE + _coordinate.StartLineNoE * _coordinate.CoordSpaceE;
-//            var max_axis_eff = min_axis_eff + grid_count_add * _coordinate.CoordSpaceE;
-
-//            _axis_y_eff.SetAxisRange(min_axis_eff, max_axis_eff);
-//            _bottom_pane.Visibility = ChartElementVisibility.Visible;
-//        }
-//        else
-//        {
-//            var grid_count_power = _coordinate.EndLineNoP - _coordinate.StartLineNoP;
-//            var grid_delete_head = grid_count_power * _coordinate.CoordSpaceH;
-//            grid_delete_head = _coordinate.CoordMinH < 0 ? -grid_delete_head : grid_delete_head;
-
-//            var grid_delete_eff = grid_count_power * _coordinate.CoordSpaceE;
-//            grid_delete_eff = _coordinate.CoordMinE < 0 ? -grid_delete_eff : grid_delete_eff;
-
-//            _axis_y_head.SetAxisRange(_coordinate.CoordMinH - grid_delete_head, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH);
-//            _axis_y_eff.SetAxisRange(_coordinate.CoordMinE - grid_delete_eff, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE);
-
-//            _bottom_pane.Visibility = ChartElementVisibility.Hidden;
-//        }
-
-//        if ((!_eff_visible) && (!_power_visible))
-//        {
-//            _axis_y_head.SetAxisRange(_coordinate.DispMinH(), _coordinate.DispMaxH());
-//        }
-//        _axis_y_power.SetAxisRange(_coordinate.DispMinP(), _coordinate.DispMaxP());
-//    }
-//    else
-//    {
-//        if ((!_eff_visible) && (!_power_visible))
-//        {
-//            _axis_y_head.SetAxisRange(_coordinate.DispMinH(), _coordinate.DispMaxH());
-//        }
-//        else if ((!_eff_visible) && _power_visible)
-//        {
-//            var grid_count_eff = _coordinate.EndLineNoE - _coordinate.StartLineNoE;
-//            if (_coordinate.EndLineNoH - _coordinate.StartLineNoH < 6)
-//                grid_count_eff++;
-//            var grid_delete_head = grid_count_eff * _coordinate.CoordSpaceH;
-//            grid_delete_head = _coordinate.CoordMinH < 0 ? -grid_delete_head : grid_delete_head;
-//            var grid_delete_power = grid_count_eff * _coordinate.CoordSpaceP;
-
-//            _axis_y_head.SetAxisRange(_coordinate.CoordMinH - grid_delete_head, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH);
-//            _axis_y_power.SetAxisRange(_coordinate.CoordMinP, _coordinate.CoordMinP + _coordinate.GridNumberY * _coordinate.CoordSpaceP - grid_delete_power);
-//        }
-//        else if (_eff_visible && (!_power_visible))
-//        {
-//            var grid_count_power = _coordinate.EndLineNoP - _coordinate.StartLineNoP;
-//            var grid_delete_head = grid_count_power * _coordinate.CoordSpaceH;
-//            grid_delete_head = _coordinate.CoordMinH < 0 ? -grid_delete_head : grid_delete_head;
-
-//            var grid_delete_eff = grid_count_power * _coordinate.CoordSpaceE;
-//            grid_delete_eff = _coordinate.CoordMinE < 0 ? -grid_delete_eff : grid_delete_eff;
-
-//            _axis_y_head.SetAxisRange(_coordinate.CoordMinH - grid_delete_head, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH);
-//            _axis_y_eff.SetAxisRange(_coordinate.CoordMinE - grid_delete_eff, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE);
-//        }
-//        else
-//        {
-//            _axis_y_head.SetAxisRange(_coordinate.CoordMinH, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH);
-//            _axis_y_eff.SetAxisRange(_coordinate.CoordMinE, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE);
-//            _axis_y_power.SetAxisRange(_coordinate.CoordMinP, _coordinate.CoordMinP + _coordinate.GridNumberY * _coordinate.CoordSpaceP);
-//        }
-
-//        _bottom_pane.Visibility = ChartElementVisibility.Hidden;
-//    }
-
-//}
\ No newline at end of file
+} 
\ No newline at end of file

--
Gitblit v1.9.3