From 342fa8be89ce72d4a1f87fc857def22b41722dfc Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期日, 03 十一月 2024 14:43:19 +0800
Subject: [PATCH] 曲线 问题修改

---
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/PumpParallelAnalyDlg.cs                                                    |   53 ++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/04-variable-speed/PumpVariableSpeedChart.cs            |   22 +
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.Designer.cs |  360 ++++++++++++------------
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelChart.cs          |   78 ++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/04-coordinate/PumpAxisValueDlg.cs                               |    1 
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/99-common/PumpParallelChartDlg.cs                                          |   28 +
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.Designer.cs                |    2 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/02-valve-chart/01-chart/ValvePerform2dChart.cs                                |   34 +
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.cs                         |   60 ++-
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.cs          |   37 +
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.resx        |  180 ++++++------
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelInfoViewModel.cs  |   12 
 12 files changed, 531 insertions(+), 336 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/99-common/PumpParallelChartDlg.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/99-common/PumpParallelChartDlg.cs
index ddd1271..1b183c8 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/99-common/PumpParallelChartDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/99-common/PumpParallelChartDlg.cs
@@ -189,20 +189,38 @@
                 return default;
             }
 
+            Yw.Geometry.CubicSpline2d qh = new Yw.Geometry.CubicSpline2d(calc_pt_qh_list);
+            Yw.Geometry.CubicSpline2d qe = new Yw.Geometry.CubicSpline2d(calc_pt_qe_list);
+            Yw.Geometry.CubicSpline2d qp = new Yw.Geometry.CubicSpline2d(calc_pt_qp_list);
+
+            var total_flow = list.Sum(x => x.Qh.MaxX);
+            var parallel_flow = calc_pt_qh_list.Max(x => x.X);
+            if (total_flow > parallel_flow * 1.05)
+            {
+                var ex_ratio = total_flow / parallel_flow;
+                if (qh != null)
+                    qh.MaxX = qh.MaxX * ex_ratio;
+                if (qe != null)
+                    qe.MaxX = qe.MaxX * ex_ratio;
+                if (qp != null)
+                    qp.MaxX = qp.MaxX * ex_ratio;
+            }
+
+
+
             var vm_sp = new Yw.WinFrmUI.Phart.PumpSerialParallelInfoViewModel();
             vm_sp.Id = _parallel_id;
             vm_sp.Name = line_name;
-            vm_sp.Qh = new Yw.Geometry.CubicSpline2d(calc_pt_qh_list);
-            vm_sp.Qe = new Yw.Geometry.CubicSpline2d(calc_pt_qe_list);
-            vm_sp.Qp = new Yw.Geometry.CubicSpline2d(calc_pt_qp_list);
+            vm_sp.Qh = qh;
+            vm_sp.Qe = qe;
+            vm_sp.Qp = qp;
             vm_sp.QhCalc = vm_sp.Qh;
             vm_sp.QeCalc = vm_sp.Qe;
             vm_sp.QpCalc = vm_sp.Qp;
             vm_sp.Color = Color.Black;
             vm_sp.IsBp = true;
             vm_sp.IsDefault = true;
-
-            var pt_list = vm_sp.Qp.GetPointList(12);
+             
             return vm_sp;
 
         }
diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/PumpParallelAnalyDlg.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/PumpParallelAnalyDlg.cs
index 55de50d..8949c90 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/PumpParallelAnalyDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/PumpParallelAnalyDlg.cs
@@ -121,7 +121,7 @@
                     vm.Qp = new CubicSpline2d(qp_pt_list);
                 }
                 vm.CalcuQ = x.CalcuQ;
-                vm.CalcuH = x.CalcuH;
+                vm.CalcuH = x.CalcuH; 
                 vm.Color = GetRandomColor(i);
                 vm.Calc();
                 vm_list.Add(vm);
@@ -189,25 +189,60 @@
             line_name = "骞惰仈鏇茬嚎";
             calc_bol = helper.CalculateParallel(out calc_pt_qh_list, out calc_pt_qe_list, out calc_pt_qp_list);
 
-            if (!calc_bol || calc_pt_qh_list.Count < 3)
+            if (!calc_bol || calc_pt_qh_list.Count < 4)
             {
                 return default;
             }
 
+            var qh = new Yw.Geometry.CubicSpline2d(calc_pt_qh_list);
+            var qe = new Yw.Geometry.CubicSpline2d(calc_pt_qe_list);
+            var qp = new Yw.Geometry.CubicSpline2d(calc_pt_qp_list);
+
+
             var vm_sp = new Yw.WinFrmUI.Phart.PumpSerialParallelInfoViewModel();
             vm_sp.Id = _parallel_id;
             vm_sp.Name = line_name;
-            vm_sp.Qh = new Yw.Geometry.CubicSpline2d(calc_pt_qh_list);
-            vm_sp.Qe = new Yw.Geometry.CubicSpline2d(calc_pt_qe_list);
-            vm_sp.Qp = new Yw.Geometry.CubicSpline2d(calc_pt_qp_list);
-            vm_sp.QhCalc = vm_sp.Qh;
-            vm_sp.QeCalc = vm_sp.Qe;
-            vm_sp.QpCalc = vm_sp.Qp;
+            vm_sp.Qh = qh;
+            vm_sp.Qe = qe;
+            vm_sp.Qp = qp;
+
+
             vm_sp.Color = Color.Black;
             vm_sp.IsBp = true;
             vm_sp.IsDefault = true;
 
-            var pt_list = vm_sp.Qp.GetPointList(12);
+            var total_flow = list.Sum(x => x.Qh.MaxX);
+            var parallel_flow = calc_pt_qh_list.Max(x => x.X);
+            double extend_ratio = 1;
+            if (total_flow > parallel_flow * 1.05)
+            {
+                extend_ratio = total_flow / parallel_flow;
+                extend_ratio = Math.Round(extend_ratio, 1);
+                if (qh != null)
+                {
+                    var ex_pt_list = qh.GetPointList();
+                    var ex_qh = new Yw.Geometry.CubicSpline2d(ex_pt_list);
+                    ex_qh.MaxX = ex_qh.MaxX * extend_ratio;
+                    vm_sp.QhCalc = ex_qh;
+                }
+
+                if (qe != null)
+                {
+                    var ex_pt_list = qe.GetPointList();
+                    var ex_qe = new Yw.Geometry.CubicSpline2d(ex_pt_list);
+                    ex_qe.MaxX = ex_qe.MaxX * extend_ratio;
+                    vm_sp.QeCalc = ex_qe;
+                }
+                if (qp != null)
+                {
+                    var ex_pt_list = qp.GetPointList();
+                    var ex_qp = new Yw.Geometry.CubicSpline2d(ex_pt_list);
+                    ex_qp.MaxX = ex_qp.MaxX * extend_ratio;
+                    vm_sp.QpCalc = ex_qp;
+                }
+            }
+            vm_sp.ExtendFlow = qh.MaxX;
+            vm_sp.ExtendRatio = extend_ratio;
             return vm_sp;
 
         }
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.Designer.cs
index 12334d0..3d16a78 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.Designer.cs
@@ -195,7 +195,7 @@
             series2.Name = "SeriesCurveQE";
             series2.SeriesID = 1;
             splineSeriesView2.AxisYName = "AxisYQE";
-            splineSeriesView2.Color = Color.Green; 
+            splineSeriesView2.Color = Color.Green;
             series2.View = splineSeriesView2;
             series3.Name = "SeriesCurveQP";
             series3.SeriesID = 2;
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.cs
index 811dedb..8d3d71a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/01-perform/PumpPerformChart.cs
@@ -1,14 +1,8 @@
-锘縰sing DevExpress.Charts.Model;
-using DevExpress.Utils;
+锘縰sing DevExpress.Utils;
 using DevExpress.XtraCharts;
 using DevExpress.XtraEditors;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Linq;
 using System.Text;
-using System.Windows.Forms;
 using Yw.Geometry;
-using static DevExpress.Utils.Drawing.Helpers.NativeMethods;
 
 namespace Yw.WinFrmUI.Phart
 {
@@ -88,7 +82,11 @@
             set
             {
                 _lineVisible = value;
-                this.barCekLineVisible.Checked = _lineVisible;
+                this.barCekLineVisible.Checked = _lineVisible; 
+                this.barBtnSetAxisHValue.Enabled = _lineVisible;
+                this.barBtnSetAxisQValue.Enabled = _lineVisible;
+                this.barBtnPositioningMaxE.Enabled = _lineVisible;
+                this.barBtnPositioningMaxQ.Enabled = _lineVisible;
             }
         }
         private bool _lineVisible = false;
@@ -111,10 +109,10 @@
         /// </summary>
         private void InitialChart()
         {
+           
             this.chartControl1.SetChartDisplay();
             this.chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
-
-
+ 
             _main_chart_diagram = (XYDiagram)chartControl1.Diagram;
             _bottom_panel = (XYDiagramPane)_main_chart_diagram.FindPaneByName("BottomPanel");
 
@@ -218,9 +216,7 @@
                     path.AddCurve(g_pts.ToArray());
                     dxArgs.Cache.DrawPath(pen, path);
                 }
-            }
-
-
+            }  
         }
 
 
@@ -702,7 +698,8 @@
 
             if (workQ == null)
             {
-                workQ = (minQ + maxQ) / 2;
+                //workQ = (minQ + maxQ) / 2;
+                workQ = minQ;
             }
             else
             {
@@ -764,7 +761,7 @@
             if (workH < minH || workH > maxH)
                 return;
 
-            var workQ = _qh.GetPointY(workH);
+            var workQ = _qh.GetPointsX(workH)?.LastOrDefault();
             CalcWorkPointByQ(workQ);
         }
 
@@ -776,10 +773,10 @@
             if (!_lineVisible)
                 return;
             if (_qe == null)
-                return;
-
-
-            var workQ = _qe.MaxX;
+                return; 
+            var pt_list = _qe.GetPointList();
+            pt_list = pt_list.OrderBy(x => x.Y).ToList();
+            var workQ = pt_list.Last().X;
             CalcWorkPointByQ(workQ);
         }
 
@@ -975,7 +972,7 @@
         // 鍙抽敭瀵硅薄 
         private object _rightClickObj = null;
         private bool _onMoveWorkPointLine = false;
-        private bool _onMoveWorkHLine = false;
+        private bool _onMoveWorkHLine = false; 
         private void chartControl1_MouseDown(object sender, MouseEventArgs e)
         {
             if (!_initial_data)
@@ -1029,6 +1026,7 @@
         {
             if (!_initial_data)
                 return;
+
             if (_onMoveWorkPointLine)
             {
                 var diagramCoordinates = _main_chart_diagram.PointToDiagram(e.Location);
@@ -1047,8 +1045,24 @@
                     return;
                 double chartH = axisValue.NumericalValue;
                 CalcWorkPointByH(chartH);
-
             }
+            else
+            {
+                var hitInfo = chartControl1.CalcHitInfo(e.Location);
+                if (hitInfo.InConstantLine)
+                {
+                    this.chartControl1.Cursor = Cursors.Hand;
+                }
+                else if (hitInfo.InAnnotation)
+                {
+                    this.chartControl1.Cursor = Cursors.SizeAll;
+
+                }
+                else
+                {
+                    this.chartControl1.Cursor = Cursors.Default;
+                }
+            }   
         }
 
         private void chartControl1_MouseUp(object sender, MouseEventArgs e)
@@ -1093,6 +1107,7 @@
                 return;
             var dlg = new PumpAxisValueDlg();
             dlg.SetBindingData();
+            dlg.Text = "鎵▼";
             dlg.VerifyValueChanged += (value) =>
             {
                 var min = _qh_pt_list.Min(x => x.Y);
@@ -1119,7 +1134,6 @@
                     item.Visible = _eq_visible;
                 }
             }
-
         }
 
         private void barBtnPositioningMaxQ_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
@@ -1202,7 +1216,7 @@
         {
             if (!_initial_data)
                 return;
-            _lineVisible = visible;
+            LineVisible = visible; 
             CalcWorkPointByQ();
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.Designer.cs
index 00046a4..5ce01a5 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.Designer.cs
@@ -31,29 +31,29 @@
         private void InitializeComponent()
         {
             components = new System.ComponentModel.Container();
-            DevExpress.XtraCharts.TextAnnotation textAnnotation2 = new DevExpress.XtraCharts.TextAnnotation();
-            DevExpress.XtraCharts.ChartAnchorPoint chartAnchorPoint2 = new DevExpress.XtraCharts.ChartAnchorPoint();
-            DevExpress.XtraCharts.RelativePosition relativePosition2 = new DevExpress.XtraCharts.RelativePosition();
-            DevExpress.XtraCharts.XYDiagram xyDiagram2 = new DevExpress.XtraCharts.XYDiagram();
-            DevExpress.XtraCharts.ConstantLine constantLine3 = new DevExpress.XtraCharts.ConstantLine();
-            DevExpress.XtraCharts.ConstantLine constantLine4 = new DevExpress.XtraCharts.ConstantLine();
-            DevExpress.XtraCharts.XYDiagramPane xyDiagramPane2 = new DevExpress.XtraCharts.XYDiagramPane();
-            DevExpress.XtraCharts.SecondaryAxisY secondaryAxisy3 = new DevExpress.XtraCharts.SecondaryAxisY();
-            DevExpress.XtraCharts.SecondaryAxisY secondaryAxisy4 = new DevExpress.XtraCharts.SecondaryAxisY();
-            DevExpress.XtraCharts.Series series8 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView8 = new DevExpress.XtraCharts.SplineSeriesView();
-            DevExpress.XtraCharts.Series series9 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView9 = new DevExpress.XtraCharts.SplineSeriesView();
-            DevExpress.XtraCharts.Series series10 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView10 = new DevExpress.XtraCharts.SplineSeriesView();
-            DevExpress.XtraCharts.Series series11 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView11 = new DevExpress.XtraCharts.SplineSeriesView();
-            DevExpress.XtraCharts.Series series12 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView12 = new DevExpress.XtraCharts.SplineSeriesView();
-            DevExpress.XtraCharts.Series series13 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView13 = new DevExpress.XtraCharts.SplineSeriesView();
-            DevExpress.XtraCharts.Series series14 = new DevExpress.XtraCharts.Series();
-            DevExpress.XtraCharts.SplineSeriesView splineSeriesView14 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.TextAnnotation textAnnotation1 = new DevExpress.XtraCharts.TextAnnotation();
+            DevExpress.XtraCharts.ChartAnchorPoint chartAnchorPoint1 = new DevExpress.XtraCharts.ChartAnchorPoint();
+            DevExpress.XtraCharts.RelativePosition relativePosition1 = new DevExpress.XtraCharts.RelativePosition();
+            DevExpress.XtraCharts.XYDiagram xyDiagram1 = new DevExpress.XtraCharts.XYDiagram();
+            DevExpress.XtraCharts.ConstantLine constantLine1 = new DevExpress.XtraCharts.ConstantLine();
+            DevExpress.XtraCharts.ConstantLine constantLine2 = new DevExpress.XtraCharts.ConstantLine();
+            DevExpress.XtraCharts.XYDiagramPane xyDiagramPane1 = new DevExpress.XtraCharts.XYDiagramPane();
+            DevExpress.XtraCharts.SecondaryAxisY secondaryAxisy1 = new DevExpress.XtraCharts.SecondaryAxisY();
+            DevExpress.XtraCharts.SecondaryAxisY secondaryAxisy2 = new DevExpress.XtraCharts.SecondaryAxisY();
+            DevExpress.XtraCharts.Series series1 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView1 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.Series series2 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView2 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.Series series3 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView3 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.Series series4 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView4 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.Series series5 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView5 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.Series series6 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView6 = new DevExpress.XtraCharts.SplineSeriesView();
+            DevExpress.XtraCharts.Series series7 = new DevExpress.XtraCharts.Series();
+            DevExpress.XtraCharts.SplineSeriesView splineSeriesView7 = new DevExpress.XtraCharts.SplineSeriesView();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PumpPerformCompareChart));
             chartControl1 = new DevExpress.XtraCharts.ChartControl();
             popMenuChart = new DevExpress.XtraBars.PopupMenu(components);
@@ -85,27 +85,27 @@
             popMenuLine = new DevExpress.XtraBars.PopupMenu(components);
             bar1 = new DevExpress.XtraBars.Bar();
             ((System.ComponentModel.ISupportInitialize)chartControl1).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)textAnnotation2).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)xyDiagram2).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)constantLine3).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)constantLine4).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)xyDiagramPane2).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)secondaryAxisy3).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)secondaryAxisy4).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series8).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView8).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series9).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView9).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series10).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView10).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series11).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView11).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series12).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView12).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series13).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView13).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)series14).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView14).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textAnnotation1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)xyDiagram1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)constantLine1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)constantLine2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)xyDiagramPane1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)secondaryAxisy1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)secondaryAxisy2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series3).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView3).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series4).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView4).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series5).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView5).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series6).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView6).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)series7).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView7).BeginInit();
             ((System.ComponentModel.ISupportInitialize)popMenuChart).BeginInit();
             ((System.ComponentModel.ISupportInitialize)barManager1).BeginInit();
             ((System.ComponentModel.ISupportInitialize)popMenuLine).BeginInit();
@@ -113,75 +113,75 @@
             // 
             // chartControl1
             // 
-            chartAnchorPoint2.X = 871;
-            chartAnchorPoint2.Y = 783;
-            textAnnotation2.AnchorPoint = chartAnchorPoint2;
-            textAnnotation2.AnnotationID = 0;
-            textAnnotation2.AutoHeight = true;
-            textAnnotation2.AutoWidth = true;
-            textAnnotation2.Name = "TextAnnoWorkPoint";
-            relativePosition2.Angle = -205.38790629109593D;
-            relativePosition2.ConnectorLength = 65.30696746902278D;
-            textAnnotation2.ShapePosition = relativePosition2;
-            textAnnotation2.Text = "宸ヤ綔鐐�";
-            textAnnotation2.TextAlignment = StringAlignment.Near;
-            chartControl1.AnnotationRepository.AddRange(new DevExpress.XtraCharts.Annotation[] { textAnnotation2 });
+            chartAnchorPoint1.X = 871;
+            chartAnchorPoint1.Y = 783;
+            textAnnotation1.AnchorPoint = chartAnchorPoint1;
+            textAnnotation1.AnnotationID = 0;
+            textAnnotation1.AutoHeight = true;
+            textAnnotation1.AutoWidth = true;
+            textAnnotation1.Name = "TextAnnoWorkPoint";
+            relativePosition1.Angle = -205.38790629109593D;
+            relativePosition1.ConnectorLength = 65.30696746902278D;
+            textAnnotation1.ShapePosition = relativePosition1;
+            textAnnotation1.Text = "宸ヤ綔鐐�";
+            textAnnotation1.TextAlignment = StringAlignment.Near;
+            chartControl1.AnnotationRepository.AddRange(new DevExpress.XtraCharts.Annotation[] { textAnnotation1 });
             chartControl1.BorderOptions.Visibility = DevExpress.Utils.DefaultBoolean.False;
-            constantLine3.AxisValueSerializable = "1";
-            constantLine3.ConstantLineID = 0;
-            constantLine3.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
-            constantLine3.LineStyle.Thickness = 2;
-            constantLine3.Name = "WorkPointLine";
-            constantLine3.Title.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 8F);
-            constantLine3.Title.Text = "宸ヤ綔鐐�";
-            xyDiagram2.AxisX.ConstantLines.AddRange(new DevExpress.XtraCharts.ConstantLine[] { constantLine3 });
-            xyDiagram2.AxisX.Title.Text = "娴侀噺 锛坢鲁/h锛�";
-            xyDiagram2.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
-            xyDiagram2.AxisX.VisibleInPanesSerializable = "-1";
-            xyDiagram2.AxisY.Color = Color.DodgerBlue;
-            constantLine4.AxisValueSerializable = "1";
-            constantLine4.ConstantLineID = 0;
-            constantLine4.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
-            constantLine4.LineStyle.Thickness = 2;
-            constantLine4.Name = "WorkHLine";
-            constantLine4.Title.Text = "鎵▼";
-            xyDiagram2.AxisY.ConstantLines.AddRange(new DevExpress.XtraCharts.ConstantLine[] { constantLine4 });
-            xyDiagram2.AxisY.Label.TextColor = Color.DodgerBlue;
-            xyDiagram2.AxisY.Title.Alignment = StringAlignment.Far;
-            xyDiagram2.AxisY.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.False;
-            xyDiagram2.AxisY.Title.Text = "鎵▼/m";
-            xyDiagram2.AxisY.Title.TextColor = Color.DodgerBlue;
-            xyDiagram2.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
-            xyDiagram2.AxisY.VisibleInPanesSerializable = "-1";
-            xyDiagram2.DefaultPane.BorderVisible = false;
-            xyDiagram2.DefaultPane.Title.Text = "鏃犳暟鎹�";
-            xyDiagramPane2.Name = "BottomPanel";
-            xyDiagramPane2.PaneID = 0;
-            xyDiagramPane2.RuntimeCollapse = DevExpress.Utils.DefaultBoolean.False;
-            xyDiagramPane2.Visibility = DevExpress.XtraCharts.ChartElementVisibility.Hidden;
-            xyDiagram2.Panes.AddRange(new DevExpress.XtraCharts.XYDiagramPane[] { xyDiagramPane2 });
-            secondaryAxisy3.AxisID = 0;
-            secondaryAxisy3.Color = Color.Green;
-            secondaryAxisy3.Label.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
-            secondaryAxisy3.Label.TextColor = Color.Green;
-            secondaryAxisy3.Name = "AxisYQE";
-            secondaryAxisy3.Title.Text = "鏁堢巼/%";
-            secondaryAxisy3.Title.TextColor = Color.Green;
-            secondaryAxisy3.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
-            secondaryAxisy3.VisibleInPanesSerializable = "-1";
-            secondaryAxisy4.AxisID = 1;
-            secondaryAxisy4.Label.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
-            secondaryAxisy4.Label.TextColor = Color.Crimson;
-            secondaryAxisy4.Name = "AxisYQP";
-            secondaryAxisy4.NumericScaleOptions.AutoGrid = false;
-            secondaryAxisy4.NumericScaleOptions.GridSpacing = 2D;
-            secondaryAxisy4.Title.Alignment = StringAlignment.Near;
-            secondaryAxisy4.Title.Text = "鍔熺巼/kW";
-            secondaryAxisy4.Title.TextColor = Color.Crimson;
-            secondaryAxisy4.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
-            secondaryAxisy4.VisibleInPanesSerializable = "-1";
-            xyDiagram2.SecondaryAxesY.AddRange(new DevExpress.XtraCharts.SecondaryAxisY[] { secondaryAxisy3, secondaryAxisy4 });
-            chartControl1.Diagram = xyDiagram2;
+            constantLine1.AxisValueSerializable = "1";
+            constantLine1.ConstantLineID = 0;
+            constantLine1.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
+            constantLine1.LineStyle.Thickness = 2;
+            constantLine1.Name = "WorkPointLine";
+            constantLine1.Title.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 8F);
+            constantLine1.Title.Text = "宸ヤ綔鐐�";
+            xyDiagram1.AxisX.ConstantLines.AddRange(new DevExpress.XtraCharts.ConstantLine[] { constantLine1 });
+            xyDiagram1.AxisX.Title.Text = "娴侀噺 锛坢鲁/h锛�";
+            xyDiagram1.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
+            xyDiagram1.AxisX.VisibleInPanesSerializable = "-1";
+            xyDiagram1.AxisY.Color = Color.DodgerBlue;
+            constantLine2.AxisValueSerializable = "1";
+            constantLine2.ConstantLineID = 0;
+            constantLine2.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
+            constantLine2.LineStyle.Thickness = 2;
+            constantLine2.Name = "WorkHLine";
+            constantLine2.Title.Text = "鎵▼";
+            xyDiagram1.AxisY.ConstantLines.AddRange(new DevExpress.XtraCharts.ConstantLine[] { constantLine2 });
+            xyDiagram1.AxisY.Label.TextColor = Color.DodgerBlue;
+            xyDiagram1.AxisY.Title.Alignment = StringAlignment.Far;
+            xyDiagram1.AxisY.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.False;
+            xyDiagram1.AxisY.Title.Text = "鎵▼/m";
+            xyDiagram1.AxisY.Title.TextColor = Color.DodgerBlue;
+            xyDiagram1.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
+            xyDiagram1.AxisY.VisibleInPanesSerializable = "-1";
+            xyDiagram1.DefaultPane.BorderVisible = false;
+            xyDiagram1.DefaultPane.Title.Text = "鏃犳暟鎹�";
+            xyDiagramPane1.Name = "BottomPanel";
+            xyDiagramPane1.PaneID = 0;
+            xyDiagramPane1.RuntimeCollapse = DevExpress.Utils.DefaultBoolean.False;
+            xyDiagramPane1.Visibility = DevExpress.XtraCharts.ChartElementVisibility.Hidden;
+            xyDiagram1.Panes.AddRange(new DevExpress.XtraCharts.XYDiagramPane[] { xyDiagramPane1 });
+            secondaryAxisy1.AxisID = 0;
+            secondaryAxisy1.Color = Color.Green;
+            secondaryAxisy1.Label.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
+            secondaryAxisy1.Label.TextColor = Color.Green;
+            secondaryAxisy1.Name = "AxisYQE";
+            secondaryAxisy1.Title.Text = "鏁堢巼/%";
+            secondaryAxisy1.Title.TextColor = Color.Green;
+            secondaryAxisy1.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
+            secondaryAxisy1.VisibleInPanesSerializable = "-1";
+            secondaryAxisy2.AxisID = 1;
+            secondaryAxisy2.Label.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
+            secondaryAxisy2.Label.TextColor = Color.Crimson;
+            secondaryAxisy2.Name = "AxisYQP";
+            secondaryAxisy2.NumericScaleOptions.AutoGrid = false;
+            secondaryAxisy2.NumericScaleOptions.GridSpacing = 2D;
+            secondaryAxisy2.Title.Alignment = StringAlignment.Near;
+            secondaryAxisy2.Title.Text = "鍔熺巼/kW";
+            secondaryAxisy2.Title.TextColor = Color.Crimson;
+            secondaryAxisy2.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
+            secondaryAxisy2.VisibleInPanesSerializable = "-1";
+            xyDiagram1.SecondaryAxesY.AddRange(new DevExpress.XtraCharts.SecondaryAxisY[] { secondaryAxisy1, secondaryAxisy2 });
+            chartControl1.Diagram = xyDiagram1;
             chartControl1.Dock = DockStyle.Fill;
             chartControl1.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Right;
             chartControl1.Legend.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
@@ -191,55 +191,55 @@
             chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True;
             chartControl1.Location = new Point(0, 34);
             chartControl1.Name = "chartControl1";
-            series8.Name = "SeriesCurveQH";
-            series8.SeriesID = 0;
-            splineSeriesView8.Color = Color.DodgerBlue;
-            series8.View = splineSeriesView8;
-            series9.Name = "SeriesCurveQE";
-            series9.SeriesID = 1;
-            splineSeriesView9.AxisYName = "AxisYQE";
-            splineSeriesView9.Color = Color.Green;
-            series9.View = splineSeriesView9;
-            series10.Name = "SeriesCurveQP";
-            series10.SeriesID = 2;
-            splineSeriesView10.AxisYName = "AxisYQP";
-            splineSeriesView10.Color = Color.Crimson;
-            series10.View = splineSeriesView10;
-            series11.Name = "SeriesEquipCurve";
-            series11.SeriesID = 6;
-            series11.ShowInLegend = false;
-            splineSeriesView11.Color = Color.FromArgb(0, 0, 0);
-            splineSeriesView11.LineStyle.Thickness = 1;
-            series11.View = splineSeriesView11;
-            series12.Name = "SeriesCurveQHwk";
-            series12.SeriesID = 7;
-            series12.ShowInLegend = false;
-            splineSeriesView12.Color = Color.Black;
-            splineSeriesView12.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dash;
-            series12.View = splineSeriesView12;
-            series13.Name = "SeriesCurveQEwk";
-            series13.SeriesID = 8;
-            series13.ShowInLegend = false;
-            splineSeriesView13.AxisYName = "AxisYQE";
-            splineSeriesView13.Color = Color.Black;
-            splineSeriesView13.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dash;
-            splineSeriesView13.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
-            series13.View = splineSeriesView13;
-            series14.Name = "SeriesCurveQPwk";
-            series14.SeriesID = 9;
-            series14.ShowInLegend = false;
-            splineSeriesView14.AxisYName = "AxisYQP";
-            splineSeriesView14.Color = Color.Black;
-            series14.View = splineSeriesView14;
+            series1.Name = "SeriesCurveQH";
+            series1.SeriesID = 0;
+            splineSeriesView1.Color = Color.DodgerBlue;
+            series1.View = splineSeriesView1;
+            series2.Name = "SeriesCurveQE";
+            series2.SeriesID = 1;
+            splineSeriesView2.AxisYName = "AxisYQE";
+            splineSeriesView2.Color = Color.Green;
+            series2.View = splineSeriesView2;
+            series3.Name = "SeriesCurveQP";
+            series3.SeriesID = 2;
+            splineSeriesView3.AxisYName = "AxisYQP";
+            splineSeriesView3.Color = Color.Crimson;
+            series3.View = splineSeriesView3;
+            series4.Name = "SeriesEquipCurve";
+            series4.SeriesID = 6;
+            series4.ShowInLegend = false;
+            splineSeriesView4.Color = Color.FromArgb(0, 0, 0);
+            splineSeriesView4.LineStyle.Thickness = 1;
+            series4.View = splineSeriesView4;
+            series5.Name = "SeriesCurveQHwk";
+            series5.SeriesID = 7;
+            series5.ShowInLegend = false;
+            splineSeriesView5.Color = Color.Black;
+            splineSeriesView5.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dash;
+            series5.View = splineSeriesView5;
+            series6.Name = "SeriesCurveQEwk";
+            series6.SeriesID = 8;
+            series6.ShowInLegend = false;
+            splineSeriesView6.AxisYName = "AxisYQE";
+            splineSeriesView6.Color = Color.Black;
+            splineSeriesView6.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dash;
+            splineSeriesView6.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
+            series6.View = splineSeriesView6;
+            series7.Name = "SeriesCurveQPwk";
+            series7.SeriesID = 9;
+            series7.ShowInLegend = false;
+            splineSeriesView7.AxisYName = "AxisYQP";
+            splineSeriesView7.Color = Color.Black;
+            series7.View = splineSeriesView7;
             chartControl1.SeriesSerializable = new DevExpress.XtraCharts.Series[]
     {
-    series8,
-    series9,
-    series10,
-    series11,
-    series12,
-    series13,
-    series14
+    series1,
+    series2,
+    series3,
+    series4,
+    series5,
+    series6,
+    series7
     };
             chartControl1.Size = new Size(1023, 822);
             chartControl1.TabIndex = 0;
@@ -500,27 +500,27 @@
             Controls.Add(barDockControlTop);
             Name = "PumpPerformCompareChart";
             Size = new Size(1023, 856);
-            ((System.ComponentModel.ISupportInitialize)textAnnotation2).EndInit();
-            ((System.ComponentModel.ISupportInitialize)constantLine3).EndInit();
-            ((System.ComponentModel.ISupportInitialize)constantLine4).EndInit();
-            ((System.ComponentModel.ISupportInitialize)xyDiagramPane2).EndInit();
-            ((System.ComponentModel.ISupportInitialize)secondaryAxisy3).EndInit();
-            ((System.ComponentModel.ISupportInitialize)secondaryAxisy4).EndInit();
-            ((System.ComponentModel.ISupportInitialize)xyDiagram2).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView8).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series8).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView9).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series9).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView10).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series10).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView11).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series11).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView12).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series12).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView13).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series13).EndInit();
-            ((System.ComponentModel.ISupportInitialize)splineSeriesView14).EndInit();
-            ((System.ComponentModel.ISupportInitialize)series14).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textAnnotation1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)constantLine1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)constantLine2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)xyDiagramPane1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)secondaryAxisy1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)secondaryAxisy2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)xyDiagram1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView3).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series3).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView4).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series4).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView5).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series5).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView6).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series6).EndInit();
+            ((System.ComponentModel.ISupportInitialize)splineSeriesView7).EndInit();
+            ((System.ComponentModel.ISupportInitialize)series7).EndInit();
             ((System.ComponentModel.ISupportInitialize)chartControl1).EndInit();
             ((System.ComponentModel.ISupportInitialize)popMenuChart).EndInit();
             ((System.ComponentModel.ISupportInitialize)barManager1).EndInit();
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.cs
index 8ad5d00..73db937 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.cs
@@ -79,7 +79,11 @@
             set
             {
                 _lineVisible = value;
-                this.barCekLineVisible.Checked = _lineVisible;
+                this.barCekLineVisible.Checked = _lineVisible; 
+                this.barBtnSetAxisHValue.Enabled = _lineVisible;
+                this.barBtnSetAxisQValue.Enabled = _lineVisible;
+                this.barBtnPositioningMaxE.Enabled = _lineVisible;
+                this.barBtnPositioningMaxQ.Enabled = _lineVisible;
             }
         }
         private bool _lineVisible = false;
@@ -818,7 +822,8 @@
 
             if (workQ == null)
             {
-                workQ = (minQ + maxQ) / 2;
+                workQ = minQ;
+                //workQ = (minQ + maxQ) / 2;
             }
             else
             {
@@ -922,10 +927,10 @@
                 return;
             if (_qe == null)
                 return;
-
-
-            var workQ = _qe.MaxX;
-            CalcWorkPointByQ(workQ);
+            var pt_list = _qe.GetPointList();
+            pt_list = pt_list.OrderBy(x => x.Y).ToList();
+            var workQ = pt_list.Last().X;
+            CalcWorkPointByQ(workQ); 
         }
 
         /// <summary>
@@ -1211,7 +1216,22 @@
                     return;
                 double chartH = axisValue.NumericalValue;
                 CalcWorkPointByH(chartH);
-
+            }
+            else
+            {
+                var hitInfo = chartControl1.CalcHitInfo(e.Location);
+                if (hitInfo.InConstantLine)
+                {
+                    this.chartControl1.Cursor = Cursors.Hand;
+                }
+                else if (hitInfo.InAnnotation)
+                {
+                    this.chartControl1.Cursor = Cursors.SizeAll; 
+                }
+                else
+                {
+                    this.chartControl1.Cursor = Cursors.Default;
+                }
             }
         }
 
@@ -1257,6 +1277,7 @@
                 return;
             var dlg = new PumpAxisValueDlg();
             dlg.SetBindingData();
+            dlg.Text = "鎵▼";
             dlg.VerifyValueChanged += (value) =>
             {
                 var min = _qh_pt_list.Min(x => x.Y);
@@ -1358,7 +1379,7 @@
         {
             if (!_initial_data)
                 return;
-            _lineVisible = visible;
+            LineVisible = visible;
             CalcWorkPointByQ();
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.resx b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.resx
index 4ab92f7..42cbb2d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/02-perform-compare/PumpPerformCompareChart.resx
@@ -435,96 +435,6 @@
   <metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <data name="barBtnPositioningMaxQ.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJEDAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iVG9wXzEwX0l0ZW1zIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3
-        IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxhY2t7ZmlsbDojNzI3Mjcy
-        O30KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQo8L3N0eWxlPg0KICA8cGF0aCBkPSJNMzEsMkgxQzAuNSwy
-        LDAsMi41LDAsM3YyNmMwLDAuNSwwLjUsMSwxLDFoMzBjMC41LDAsMS0wLjUsMS0xVjNDMzIsMi41LDMx
-        LjUsMiwzMSwyeiBNOCwxNHYxMEg2VjE0SDNsNC02ICBsNCw2SDh6IE0zMCwyOEgxNFY0aDE2VjI4eiIg
-        Y2xhc3M9IkdyZWVuIiAvPg0KICA8cGF0aCBkPSJNMjQuNiwyMGMtMiwwLTMtMS4zLTMtMy45YzAtMS4z
-        LDAuMy0yLjQsMC44LTMuMWMwLjUtMC43LDEuMy0xLjEsMi4zLTEuMWMxLjksMCwyLjksMS4zLDIuOSwz
-        LjkgIGMwLDEuMy0wLjMsMi4zLTAuOCwzQzI2LjMsMTkuNywyNS42LDIwLDI0LjYsMjB6IE0yNC43LDEz
-        LjNjLTAuOCwwLTEuMiwwLjktMS4yLDIuOGMwLDEuNywwLjQsMi42LDEuMiwyLjZjMC44LDAsMS4xLTAu
-        OSwxLjEtMi43ICBDMjUuOCwxNC4yLDI1LjQsMTMuMywyNC43LDEzLjN6IE0xOCwyMHYtNS4yaC0ydi0x
-        LjJjMC4zLDAsMC42LDAsMC44LTAuMWMwLjMsMCwwLjUtMC4xLDAuNy0wLjNjMC4yLTAuMSwwLjQtMC4z
-        LDAuNS0wLjUgIGMwLjEtMC4yLDAuMi0wLjUsMC4zLTAuOGgxLjN2OEgxOHoiIGNsYXNzPSJCbGFjayIg
-        Lz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="barBtnPositioningMaxE.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJgEAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iVG9wXzEwX1BlcmNlbnQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpu
-        ZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3Mjcy
-        NzI7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0zMSwySDFDMC41
-        LDIsMCwyLjUsMCwzdjI0YzAsMC41LDAuNSwxLDEsMWgzMGMwLjUsMCwxLTAuNSwxLTFWM0MzMiwyLjUs
-        MzEuNSwyLDMxLDJ6IE04LDEydjEwSDZWMTJIM2w0LTYgIGw0LDZIOHogTTMwLDI2SDE0VjRoMTZWMjZ6
-        IiBjbGFzcz0iR3JlZW4iIC8+DQogIDxwYXRoIGQ9Ik0xOC42LDE1LjFjLTAuOCwwLTEuNC0wLjItMS45
-        LTAuN2MtMC41LTAuNC0wLjctMS0wLjctMS44YzAtMC44LDAuMi0xLjUsMC43LTEuOXMxLjItMC43LDIt
-        MC43ICBjMC44LDAsMS40LDAuMiwxLjksMC42YzAuNCwwLjQsMC43LDEsMC43LDEuOGMwLDAuOC0wLjIs
-        MS40LTAuNywxLjlDMjAsMTQuOCwxOS40LDE1LjEsMTguNiwxNS4xeiBNMjYsMTBsLTYuMiwxMEgxOGw2
-        LjItMTBIMjZ6ICAgTTE4LjcsMTEuMmMtMC43LDAtMS4xLDAuNS0xLjEsMS40YzAsMC45LDAuMywxLjMs
-        MSwxLjNjMC43LDAsMS4xLTAuNSwxLjEtMS40QzE5LjcsMTEuNiwxOS40LDExLjIsMTguNywxMS4yeiBN
-        MjUuMywyMCAgYy0wLjgsMC0xLjQtMC4yLTEuOS0wLjdzLTAuNy0xLTAuNy0xLjhjMC0wLjgsMC4yLTEu
-        NSwwLjctMS45YzAuNS0wLjUsMS4yLTAuNywyLTAuN2MwLjgsMCwxLjQsMC4yLDEuOSwwLjZzMC43LDEs
-        MC43LDEuOCAgYzAsMC44LTAuMiwxLjQtMC43LDEuOUMyNi44LDE5LjgsMjYuMSwyMCwyNS4zLDIweiBN
-        MjUuNCwxNi4xYy0wLjcsMC0xLjEsMC41LTEuMSwxLjRjMCwwLjksMC40LDEuMywxLjEsMS4zYzAuNyww
-        LDEuMS0wLjUsMS4xLTEuNCAgYzAtMC40LTAuMS0wLjctMC4zLTFDMjYsMTYuMiwyNS43LDE2LjEsMjUu
-        NCwxNi4xeiIgY2xhc3M9IkJsYWNrIiAvPg0KPC9zdmc+Cw==
-</value>
-  </data>
-  <data name="barBtnSetAxisQValue.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAO8CAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iSG9yaXpvbnRhbF9BeGlzX0xlZnRfdG9fUmlnaHQiIHN0eWxlPSJlbmFi
-        bGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5C
-        bGFja3tmaWxsOiM3MjcyNzI7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5zdDB7b3BhY2l0eTowLjU7
-        fQo8L3N0eWxlPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0i
-        MiIgaGVpZ2h0PSIxOCIgY2xhc3M9IkJsYWNrIiAvPg0KICA8L2c+DQogIDxwb2x5Z29uIHBvaW50cz0i
-        MzAsMjcgMjYsMjQgMjYsMjYgNCwyNiA0LDI4IDI2LDI4IDI2LDMwICIgY2xhc3M9IkJsdWUiIC8+DQog
-        IDxwb2x5Z29uIHBvaW50cz0iNCwxOCA0LDIwIDYsMjAgNiwyMiA4LDIyIDgsMjAgMTAsMjAgMTAsMjIg
-        MTIsMjIgMTIsMjAgMTQsMjAgMTQsMjIgMTYsMjIgMTYsMjAgMTgsMjAgMTgsMjIgMjAsMjIgICAyMCwy
-        MCAyMiwyMCAyMiwyMiAyNCwyMiAyNCwyMCAyNiwyMCAyNiwyMiAyOCwyMiAyOCwyMCAzMCwyMCAzMCwx
-        OCAiIGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="barBtnSetAxisHValue.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAOICAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iVmVydGljYWxfQXhpc19Cb3R0b21fdG9fVXAiIHN0eWxlPSJlbmFibGUt
-        YmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVl
-        e2ZpbGw6IzExNzdENzt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5zdDB7b3BhY2l0eTowLjU7fQo8
-        L3N0eWxlPg0KICA8cG9seWdvbiBwb2ludHM9IjEyLDIgMTIsNCAxMCw0IDEwLDYgMTIsNiAxMiw4IDEw
-        LDggMTAsMTAgMTIsMTAgMTIsMTIgMTAsMTIgMTAsMTQgMTIsMTQgMTIsMTYgMTAsMTYgMTAsMTggMTIs
-        MTggICAxMiwyMCAxMCwyMCAxMCwyMiAxMiwyMiAxMiwyNCAxMCwyNCAxMCwyNiAxMiwyNiAxMiwyOCAx
-        NCwyOCAxNCwyICIgY2xhc3M9IkJsYWNrIiAvPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cmVjdCB4
-        PSIxNCIgeT0iMjYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIyIiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4N
-        CiAgPHBvbHlnb24gcG9pbnRzPSI4LDYgNSwyIDIsNiA0LDYgNCwyOCA2LDI4IDYsNiAiIGNsYXNzPSJC
-        bHVlIiAvPg0KPC9zdmc+Cw==
-</value>
-  </data>
   <data name="barSubMenuVisible.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
@@ -583,6 +493,96 @@
         Cjwvc3ZnPgs=
 </value>
   </data>
+  <data name="barBtnSetAxisHValue.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAOICAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iVmVydGljYWxfQXhpc19Cb3R0b21fdG9fVXAiIHN0eWxlPSJlbmFibGUt
+        YmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVl
+        e2ZpbGw6IzExNzdENzt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5zdDB7b3BhY2l0eTowLjU7fQo8
+        L3N0eWxlPg0KICA8cG9seWdvbiBwb2ludHM9IjEyLDIgMTIsNCAxMCw0IDEwLDYgMTIsNiAxMiw4IDEw
+        LDggMTAsMTAgMTIsMTAgMTIsMTIgMTAsMTIgMTAsMTQgMTIsMTQgMTIsMTYgMTAsMTYgMTAsMTggMTIs
+        MTggICAxMiwyMCAxMCwyMCAxMCwyMiAxMiwyMiAxMiwyNCAxMCwyNCAxMCwyNiAxMiwyNiAxMiwyOCAx
+        NCwyOCAxNCwyICIgY2xhc3M9IkJsYWNrIiAvPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cmVjdCB4
+        PSIxNCIgeT0iMjYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIyIiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4N
+        CiAgPHBvbHlnb24gcG9pbnRzPSI4LDYgNSwyIDIsNiA0LDYgNCwyOCA2LDI4IDYsNiAiIGNsYXNzPSJC
+        bHVlIiAvPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="barBtnSetAxisQValue.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAO8CAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iSG9yaXpvbnRhbF9BeGlzX0xlZnRfdG9fUmlnaHQiIHN0eWxlPSJlbmFi
+        bGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5C
+        bGFja3tmaWxsOiM3MjcyNzI7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5zdDB7b3BhY2l0eTowLjU7
+        fQo8L3N0eWxlPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0i
+        MiIgaGVpZ2h0PSIxOCIgY2xhc3M9IkJsYWNrIiAvPg0KICA8L2c+DQogIDxwb2x5Z29uIHBvaW50cz0i
+        MzAsMjcgMjYsMjQgMjYsMjYgNCwyNiA0LDI4IDI2LDI4IDI2LDMwICIgY2xhc3M9IkJsdWUiIC8+DQog
+        IDxwb2x5Z29uIHBvaW50cz0iNCwxOCA0LDIwIDYsMjAgNiwyMiA4LDIyIDgsMjAgMTAsMjAgMTAsMjIg
+        MTIsMjIgMTIsMjAgMTQsMjAgMTQsMjIgMTYsMjIgMTYsMjAgMTgsMjAgMTgsMjIgMjAsMjIgICAyMCwy
+        MCAyMiwyMCAyMiwyMiAyNCwyMiAyNCwyMCAyNiwyMCAyNiwyMiAyOCwyMiAyOCwyMCAzMCwyMCAzMCwx
+        OCAiIGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="barBtnPositioningMaxQ.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJEDAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iVG9wXzEwX0l0ZW1zIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3
+        IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxhY2t7ZmlsbDojNzI3Mjcy
+        O30KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQo8L3N0eWxlPg0KICA8cGF0aCBkPSJNMzEsMkgxQzAuNSwy
+        LDAsMi41LDAsM3YyNmMwLDAuNSwwLjUsMSwxLDFoMzBjMC41LDAsMS0wLjUsMS0xVjNDMzIsMi41LDMx
+        LjUsMiwzMSwyeiBNOCwxNHYxMEg2VjE0SDNsNC02ICBsNCw2SDh6IE0zMCwyOEgxNFY0aDE2VjI4eiIg
+        Y2xhc3M9IkdyZWVuIiAvPg0KICA8cGF0aCBkPSJNMjQuNiwyMGMtMiwwLTMtMS4zLTMtMy45YzAtMS4z
+        LDAuMy0yLjQsMC44LTMuMWMwLjUtMC43LDEuMy0xLjEsMi4zLTEuMWMxLjksMCwyLjksMS4zLDIuOSwz
+        LjkgIGMwLDEuMy0wLjMsMi4zLTAuOCwzQzI2LjMsMTkuNywyNS42LDIwLDI0LjYsMjB6IE0yNC43LDEz
+        LjNjLTAuOCwwLTEuMiwwLjktMS4yLDIuOGMwLDEuNywwLjQsMi42LDEuMiwyLjZjMC44LDAsMS4xLTAu
+        OSwxLjEtMi43ICBDMjUuOCwxNC4yLDI1LjQsMTMuMywyNC43LDEzLjN6IE0xOCwyMHYtNS4yaC0ydi0x
+        LjJjMC4zLDAsMC42LDAsMC44LTAuMWMwLjMsMCwwLjUtMC4xLDAuNy0wLjNjMC4yLTAuMSwwLjQtMC4z
+        LDAuNS0wLjUgIGMwLjEtMC4yLDAuMi0wLjUsMC4zLTAuOGgxLjN2OEgxOHoiIGNsYXNzPSJCbGFjayIg
+        Lz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="barBtnPositioningMaxE.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJgEAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iVG9wXzEwX1BlcmNlbnQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpu
+        ZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3Mjcy
+        NzI7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0zMSwySDFDMC41
+        LDIsMCwyLjUsMCwzdjI0YzAsMC41LDAuNSwxLDEsMWgzMGMwLjUsMCwxLTAuNSwxLTFWM0MzMiwyLjUs
+        MzEuNSwyLDMxLDJ6IE04LDEydjEwSDZWMTJIM2w0LTYgIGw0LDZIOHogTTMwLDI2SDE0VjRoMTZWMjZ6
+        IiBjbGFzcz0iR3JlZW4iIC8+DQogIDxwYXRoIGQ9Ik0xOC42LDE1LjFjLTAuOCwwLTEuNC0wLjItMS45
+        LTAuN2MtMC41LTAuNC0wLjctMS0wLjctMS44YzAtMC44LDAuMi0xLjUsMC43LTEuOXMxLjItMC43LDIt
+        MC43ICBjMC44LDAsMS40LDAuMiwxLjksMC42YzAuNCwwLjQsMC43LDEsMC43LDEuOGMwLDAuOC0wLjIs
+        MS40LTAuNywxLjlDMjAsMTQuOCwxOS40LDE1LjEsMTguNiwxNS4xeiBNMjYsMTBsLTYuMiwxMEgxOGw2
+        LjItMTBIMjZ6ICAgTTE4LjcsMTEuMmMtMC43LDAtMS4xLDAuNS0xLjEsMS40YzAsMC45LDAuMywxLjMs
+        MSwxLjNjMC43LDAsMS4xLTAuNSwxLjEtMS40QzE5LjcsMTEuNiwxOS40LDExLjIsMTguNywxMS4yeiBN
+        MjUuMywyMCAgYy0wLjgsMC0xLjQtMC4yLTEuOS0wLjdzLTAuNy0xLTAuNy0xLjhjMC0wLjgsMC4yLTEu
+        NSwwLjctMS45YzAuNS0wLjUsMS4yLTAuNywyLTAuN2MwLjgsMCwxLjQsMC4yLDEuOSwwLjZzMC43LDEs
+        MC43LDEuOCAgYzAsMC44LTAuMiwxLjQtMC43LDEuOUMyNi44LDE5LjgsMjYuMSwyMCwyNS4zLDIweiBN
+        MjUuNCwxNi4xYy0wLjcsMC0xLjEsMC41LTEuMSwxLjRjMCwwLjksMC40LDEuMywxLjEsMS4zYzAuNyww
+        LDEuMS0wLjUsMS4xLTEuNCAgYzAtMC40LTAuMS0wLjctMC4zLTFDMjYsMTYuMiwyNS43LDE2LjEsMjUu
+        NCwxNi4xeiIgY2xhc3M9IkJsYWNrIiAvPg0KPC9zdmc+Cw==
+</value>
+  </data>
   <data name="barBtnExport.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelChart.cs
index 413b980..401bfb9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelChart.cs
@@ -59,6 +59,7 @@
             {
                 _line_visible = value;
                 this.barCekLineVisible.Checked = _line_visible;
+                this.barBtnSetAxisQValue.Enabled = _line_visible;
             }
         }
         private bool _line_visible = false;
@@ -95,9 +96,9 @@
         private void InitialChart()
         {
             this.chartControl1.SetChartDisplay();
-            this.chartControl1.Legend.Direction = DevExpress.XtraCharts.LegendDirection.TopToBottom; 
+            this.chartControl1.Legend.Direction = DevExpress.XtraCharts.LegendDirection.TopToBottom;
 
-            _main_chart_diagram = (XYDiagram)this.chartControl1.Diagram; 
+            _main_chart_diagram = (XYDiagram)this.chartControl1.Diagram;
             _pane_qh = _main_chart_diagram.DefaultPane;
             _pane_qe = (XYDiagramPane)_main_chart_diagram.FindPaneByName("PaneQE");
             _pane_qp = (XYDiagramPane)_main_chart_diagram.FindPaneByName("PaneQP");
@@ -135,6 +136,51 @@
             this.chartControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseUp);
             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;
+        }
+
+        private void ChartControl1_CustomPaint(object sender, CustomPaintEventArgs e)
+        {
+            if (e is not DXCustomPaintEventArgs dxArgs)
+                return;
+            if (_vm_list == null || !_vm_list.Any())
+                return;
+
+            try
+            {
+                foreach (var vm in _vm_list)
+                {
+                    if (!vm.ExtendFlow.HasValue)
+                        continue;
+                    var x = vm.ExtendFlow.Value;
+                    using (Pen pen = new Pen(vm.Color, 2))
+                    {
+                        // 涓績鐐�
+                        var y = vm.QhCalc.GetPointY(x);
+                        var c_pt_qh = _main_chart_diagram.DiagramToPoint(x, y, _axis_x_q, _axis_y_qh); 
+                        dxArgs.Cache.DrawLine(pen, new Point((int)c_pt_qh.Point.X, (int)c_pt_qh.Point.Y - 15), new Point((int)c_pt_qh.Point.X, (int)c_pt_qh.Point.Y + 15));
+
+                        var y_qe = vm.QeCalc.GetPointY(x); 
+                        var c_pt_qe = _main_chart_diagram.DiagramToPoint(x, y_qe, _axis_x_q, _axis_y_qe);
+                        dxArgs.Cache.DrawLine(pen, new Point((int)c_pt_qe.Point.X, (int)c_pt_qe.Point.Y - 15), new Point((int)c_pt_qe.Point.X, (int)c_pt_qe.Point.Y + 15));
+
+
+                        var y_qp = vm.QpCalc.GetPointY(x); 
+                        var c_pt_qp = _main_chart_diagram.DiagramToPoint(x, y_qp, _axis_x_q, _axis_y_qp);
+                        dxArgs.Cache.DrawLine(pen, new Point((int)c_pt_qp.Point.X, (int)c_pt_qp.Point.Y - 15), new Point((int)c_pt_qp.Point.X, (int)c_pt_qp.Point.Y + 15));
+                    
+                    }
+                }
+
+            }
+            catch (Exception)
+            {
+
+                throw;
+            }
+          
+
         }
 
         /// <summary>
@@ -626,7 +672,9 @@
 
             if (workQ == null)
             {
-                workQ = (_minQ + _maxQ) / 2;
+                workQ = _minQ;
+                //workQ = (minQ + maxQ) / 2;
+                //workQ = (_minQ + _maxQ) / 2;
             }
 
             if (workQ < _minQ || workQ > _maxQ)
@@ -711,7 +759,8 @@
             series_qh.CrosshairEnabled = DefaultBoolean.False;
             series_qh.Tag = curve.Id.ToString();
             series_qh.ShowInLegend = true;
-            series_qh.LegendTextPattern = curve.Name; 
+            series_qh.LegendTextPattern = curve.Name;
+             
 
             var series_qh_view = new DevExpress.XtraCharts.SplineSeriesView();
             series_qh_view.LineStyle.Thickness = 2;
@@ -997,8 +1046,23 @@
                 if (axisValue == null)
                     return;
                 double chartQ = axisValue.NumericalValue;
-                CalcWorkPointByQ(chartQ);
-
+                CalcWorkPointByQ(chartQ); 
+            }
+            else
+            {
+                var hitInfo = chartControl1.CalcHitInfo(e.Location);
+                if (hitInfo.InConstantLine)
+                {
+                    this.chartControl1.Cursor = Cursors.Hand;
+                }
+                else if (hitInfo.InAnnotation)
+                {
+                    this.chartControl1.Cursor = Cursors.SizeAll;
+                }
+                else
+                {
+                    this.chartControl1.Cursor = Cursors.Default;
+                }
             }
         }
 
@@ -1094,7 +1158,7 @@
         {
             if (!_initialData)
                 return;
-            _line_visible = visible;
+            LineVisible = visible;
             CalcWorkPointByQ();
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelInfoViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelInfoViewModel.cs
index 4765a04..705cf58 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelInfoViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/03-serial-parallel/PumpSerialParallelInfoViewModel.cs
@@ -19,7 +19,7 @@
             this.QueryP = rhs.QueryP;
             this.QueryE = rhs.QueryE;
             this.ExtendRatio = rhs.ExtendRatio;
-            this.IsDefault = rhs.IsDefault; 
+            this.IsDefault = rhs.IsDefault;
             this.RunStatus = rhs.RunStatus;
             this.CalcuQ = rhs.CalcuQ;
             this.CalcuH = rhs.CalcuH;
@@ -38,8 +38,9 @@
         public bool IsDefault { get; set; }  
         public bool RunStatus { get; set; }
          
-        public double? CalcuQ { get; set; } 
-        public double? CalcuH { get; set; }
+        public double? CalcuQ { get; set; }
+        public double? CalcuH { get; set; } 
+        public  double? ExtendFlow { get; set; }
         public void Calc()
         {
             this.CurrentSpeed = Math.Round(this.CurrentHz / 50 * this.RatedSpeed);
@@ -57,6 +58,11 @@
             if (this.QpCalc != null)
                 this.QpCalc.MaxX = this.QpCalc.MaxX * this.ExtendRatio / 100;
 
+            if (this.ExtendRatio>100)
+            {
+                this.ExtendFlow = this.Qh.MaxX;
+            }
+
         }
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/04-variable-speed/PumpVariableSpeedChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/04-variable-speed/PumpVariableSpeedChart.cs
index 21b7f39..0360f29 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/04-variable-speed/PumpVariableSpeedChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/01-chart/04-variable-speed/PumpVariableSpeedChart.cs
@@ -63,6 +63,7 @@
             {
                 _line_visible = value;
                 this.barCekLineVisible.Checked = _line_visible;
+                this.barBtnSetAxisQValue.Enabled = _line_visible;
             }
         }
         private bool _line_visible = false;
@@ -705,7 +706,8 @@
 
             if (workQ == null)
             {
-                workQ = (_minQ + _maxQ) / 2;
+                workQ = _minQ;
+                //workQ = (_minQ + _maxQ) / 2;
             }
 
             if (workQ < _minQ || workQ > _maxQ)
@@ -1097,6 +1099,22 @@
                 CalcWorkPointByQ(chartQ);
 
             }
+            else
+            {
+                var hitInfo = chartControl1.CalcHitInfo(e.Location);
+                if (hitInfo.InConstantLine)
+                {
+                    this.chartControl1.Cursor = Cursors.Hand;
+                }
+                else if (hitInfo.InAnnotation)
+                {
+                    this.chartControl1.Cursor = Cursors.SizeAll;
+                }
+                else
+                {
+                    this.chartControl1.Cursor = Cursors.Default;
+                }
+            }
         }
 
         private void chartControl1_MouseUp(object sender, MouseEventArgs e)
@@ -1191,7 +1209,7 @@
         {
             if (!_initialData)
                 return;
-            _line_visible = visible;
+            LineVisible = visible;
             CalcWorkPointByQ();
         }
          
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/04-coordinate/PumpAxisValueDlg.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/04-coordinate/PumpAxisValueDlg.cs
index 3bd07a6..84298d6 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/04-coordinate/PumpAxisValueDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/01-pump-chart/04-coordinate/PumpAxisValueDlg.cs
@@ -8,6 +8,7 @@
         public PumpAxisValueDlg()
         {
             InitializeComponent();
+            this.Text = "娴侀噺";
         }
 
         public event Func<double, bool> VerifyValueChanged;
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/02-valve-chart/01-chart/ValvePerform2dChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/02-valve-chart/01-chart/ValvePerform2dChart.cs
index 1c58c68..4f17901 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/02-valve-chart/01-chart/ValvePerform2dChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-perform/02-valve-chart/01-chart/ValvePerform2dChart.cs
@@ -67,7 +67,9 @@
             set
             {
                 _lineVisible = value;
-                this.barCekLineVisible.Checked = _lineVisible;
+                this.barCekLineVisible.Checked = _lineVisible; 
+                this.barBtnSetAxisQValue.Enabled = _lineVisible;
+                this.barBtnPositioningMaxQ.Enabled = _lineVisible;
             }
         }
         private bool _lineVisible = false;
@@ -403,7 +405,8 @@
 
             if (workQ == null)
             {
-                workQ = (minQ + maxQ) / 2;
+                //workQ = (minQ + maxQ) / 2;
+                workQ = minQ;
             }
             else
             {
@@ -446,9 +449,8 @@
             var minH = _pt_ql_list.Min(x => x.Y);
             var maxH = _pt_ql_list.Max(x => x.Y);
             if (workH < minH || workH > maxH)
-                return;
-
-            var workQ = _cubic_spline_ql.GetPointY(workH);
+                return; 
+            var workQ = _cubic_spline_ql.GetPointsX(workH)?.LastOrDefault();
             CalcWorkPointByQ(workQ);
         } 
      
@@ -644,8 +646,23 @@
                 if (axisValue == null)
                     return;
                 double chartH = axisValue.NumericalValue;
-                CalcWorkPointByH(chartH);
-
+                CalcWorkPointByH(chartH); 
+            }
+            else
+            {
+                var hitInfo = chartControl1.CalcHitInfo(e.Location);
+                if (hitInfo.InConstantLine)
+                {
+                    this.chartControl1.Cursor = Cursors.Hand;
+                }
+                else if (hitInfo.InAnnotation)
+                {
+                    this.chartControl1.Cursor = Cursors.SizeAll;
+                }
+                else
+                {
+                    this.chartControl1.Cursor = Cursors.Default;
+                }
             }
         }
 
@@ -691,6 +708,7 @@
                 return;
             var dlg = new PumpAxisValueDlg();
             dlg.SetBindingData();
+            dlg.Text = "姘存崯";
             dlg.VerifyValueChanged += (value) =>
             {
                 var min = _pt_ql_list.Min(x => x.Y);
@@ -777,7 +795,7 @@
         {
             if (!_initial_data)
                 return;
-            _lineVisible = visible;
+            LineVisible = visible;
             CalcWorkPointByQ();
         }
 

--
Gitblit v1.9.3