From 7b4b2eb7dd57c29a4b3a75de8234ff9afcbe18d4 Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期三, 08 一月 2025 15:13:33 +0800
Subject: [PATCH] 水力业务图表 根据运行点延长

---
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/03-run-view/PumpRunViewChart.cs |   77 +++++++++++++++++++++++++++++++++++---
 1 files changed, 71 insertions(+), 6 deletions(-)

diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/03-run-view/PumpRunViewChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/03-run-view/PumpRunViewChart.cs
index 11bf637..11466e8 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/03-run-view/PumpRunViewChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/03-run-view/PumpRunViewChart.cs
@@ -380,12 +380,13 @@
             }
 
             if (_vm.Items != null && _vm.Items.Any())
-            {
-
+            { 
                 foreach (var vm in _vm.Items)
                 {
+                    var qh_pt_list = vm.CurveQH.GetPointList(_feat_type_qh);
+                    var max_ratio = vm.Q / qh_pt_list.Max(x => x.X) * 1.05;
                     {
-                        var qh_pt_list = vm.CurveQH.GetPointList(_feat_type_qh);
+                        qh_pt_list = qh_pt_list.GetExpandPointList(_feat_type_qh, 1, max_ratio);
                         var xxx = qh_pt_list.Select(x => x.X);
                         var yyy = qh_pt_list.Select(x => x.Y);
 
@@ -398,13 +399,15 @@
 
                     if (vm.CurveQE != null)
                     {
-                        var yyy = _vm.CurveQE.GetYList(_feat_type_qe);
+                        var qe_pt_list = vm.CurveQE.GetExpandPointList(_feat_type_qe, 1, max_ratio);
+                        var yyy = qe_pt_list.Select(x => x.Y);
                         _min_eff = Math.Min(_min_eff, yyy.Min());
                         _max_eff = Math.Max(_max_eff, yyy.Max());
                     }
                     if (vm.CurveQP != null)
                     {
-                        var yyy = _vm.CurveQP.GetYList(_feat_type_qp);
+                        var qp_pt_list = vm.CurveQP.GetExpandPointList(_feat_type_qp, 1, max_ratio);
+                        var yyy = qp_pt_list.Select(x => x.Y);
                         _min_power = Math.Min(_min_power, yyy.Min());
                         _max_power = Math.Max(_max_power, yyy.Max());
                     }
@@ -565,9 +568,39 @@
                         for (int i = 0; i < _vm.Items.Count; i++)
                         {
                             var vm = _vm.Items[i];
-                            Yw.Geometry.Point2d run_pt = new Geometry.Point2d(vm.Q, vm.H);
+                            var qh = vm.CurveQH.GetFeatCurve(_feat_type_qh);
+                            if (qh.IsInvalid())
+                                continue;
+                            var max_pt = qh.GetPointList().LastOrDefault();
 
+                            Yw.Geometry.Point2d run_pt = new Geometry.Point2d(vm.Q, vm.H); 
                             CreateCurrentLineSeries(vm.Id, vm.Color, vm.CurveName, vm.CurveQH, vm.CurveQE, vm.CurveQP, run_pt);
+
+
+                            if (max_pt.X < vm.Q)
+                            {
+                                var max_ratio = vm.Q / max_pt.X * 1.05;
+                                var qh_pt_ex_list = qh.GetPointListByXRatioRange(1, max_ratio, 100);
+                                qh_pt_ex_list = qh_pt_ex_list.Where(x => x.X >= max_pt.X).ToList();
+                                qh_pt_ex_list.Add(max_pt);
+                                CreateLineSeries(vm.Id + "qh", vm.Color, qh_pt_ex_list, _default_pane, _axis_y_head, DashStyle.Dot);
+
+                                if (vm.CurveQE != null && vm.CurveQE.Any() && _qe_visible)
+                                {
+                                    var qe = vm.CurveQE.GetFeatCurve(_feat_type_qe);
+                                    var qe_pt_ex_list = vm.CurveQE.GetExpandPointList(_feat_type_qe, 1, max_ratio, 100);
+                                    qe_pt_ex_list = qe_pt_ex_list.Where(x => x.X >= max_pt.X * 0.8).ToList();
+                                    CreateLineSeries(vm.Id + "qe", vm.Color, qe_pt_ex_list, _default_pane, _axis_y_eff, DashStyle.Dot);
+                                }
+
+                                if (vm.CurveQP != null && vm.CurveQP.Any() && _qp_visible)
+                                {
+                                    var qp = vm.CurveQP.GetFeatCurve(_feat_type_qp);
+                                    var qp_pt_ex_list = vm.CurveQP.GetExpandPointList(_feat_type_qp, 1, max_ratio, 100);
+                                    qp_pt_ex_list = qp_pt_ex_list.Where(x => x.X >= max_pt.X * 0.8).ToList();
+                                    CreateLineSeries(vm.Id + "qp", vm.Color, qp_pt_ex_list, _bottom_pane, _axis_y_power, DashStyle.Dot);
+                                }
+                            }
                         }
                     }
                 }
@@ -861,6 +894,38 @@
 
         }
 
+        /// <summary>
+        /// 鍒涘缓绾跨郴鍒�
+        /// </summary> 
+        private void CreateLineSeries(string id, Color color, List<Yw.Geometry.Point2d> pt_list, XYDiagramPaneBase pane, AxisYBase axiy, DashStyle dash = DashStyle.Solid)
+        {
+            var series = new DevExpress.XtraCharts.Series();
+            series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
+            series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
+            series.Name = id;
+            series.ShowInLegend = false;
+            series.CrosshairEnabled = DefaultBoolean.False;
+
+            var series_view = new DevExpress.XtraCharts.LineSeriesView();
+            series_view.LineStyle.Thickness = 2;
+            series_view.Color = color;
+            series_view.EnableAntialiasing = DefaultBoolean.True;
+            series_view.LineStyle.DashStyle = dash;
+            series_view.Pane = pane;
+            series_view.AxisY = axiy;
+
+            series.SeriesPointsSorting = SortingMode.None;
+            series.SeriesPointsSortingKey = SeriesPointKey.Value_1;
+            series.View = series_view;
+            series.Visible = true;
+
+            for (int i = 0; i < pt_list.Count; i++)
+            {
+                series.Points.Add(new SeriesPoint(pt_list[i].X, new double[] { pt_list[i].Y }));
+            }
+            this.chartControl1.Series.Add(series);
+        }
+
 
         #endregion
 

--
Gitblit v1.9.3