From 0a1bf56909464e938a68c29b26ab88ff51380fad Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期三, 08 一月 2025 13:56:17 +0800
Subject: [PATCH] 能效分析水力图表 装置点显示文字

---
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs |  446 +++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 398 insertions(+), 48 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs
index 6152026..e24c35a 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs
@@ -1,5 +1,7 @@
-锘縰sing System.Data;
+锘縰sing DevExpress.Spreadsheet;
+using Yw.Geometry;
 using Yw.Pump;
+using Yw.WinFrmUI.Phart;
 
 namespace HStation.WinFrmUI
 {
@@ -8,78 +10,425 @@
         public PumpChartViewCtrl()
         {
             InitializeComponent();
+            this.barCekEqVisible.Checked = true;
+            this.barCekEqulEffVisible.Checked = true;
+            this.bar2.Visible = false;
+            this.barCekEqulEffVisible.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
         }
+
+        private Yw.Vmo.PhartDiagramExGraphListVmo _vmo = null;
+        private Yw.WinFrmUI.Phart.PumpPerformCurveViewModel _model = null;
+        private Yw.WinFrmUI.Phart.PumpCurveViewModel _vm = null;
+
+        private bool _default_visible = true;
+        private bool _power_visible = true;
+        private bool _eff_visible = true;
+        private bool _equal_eff_visible = true;
+        private bool _split_panel = true;
+        private double _nr;
+
+        /// <summary>
+        /// 鏁版嵁鍙樻洿浜嬩欢
+        /// </summary>
+        public event Action<Yw.Vmo.PhartDiagramExGraphListVmo> DataChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
         public void SetBindingData(Yw.Vmo.PhartDiagramExGraphListVmo vmo, double nr)
         {
+            _vmo = vmo;
+            _nr = nr;
+            if (vmo == null)
+            {
+                ClearBindingData();
+                return;
+            }
             var vm_list = vmo.GetPumpCurveViewMdoelList();
-            var vm_defult = vm_list.OrderBy(x => x.Hz).LastOrDefault();
-            var vm_ee_list = vmo.GetCurveEqualEViewMdoelList();
+            if (vm_list == null || !vm_list.Any())
+            {
+                ClearBindingData();
+                return;
+            }
+            _model = vmo.GetDefaultPumpCurveViewMdoel();
+            if (_model == null)
+                return;
 
-            var vm = new Yw.WinFrmUI.Phart.PumpChartViewModel();
+            var vm_equal_eff_list = vmo.GetCurveEqualEViewMdoelList();
+            var vm_variable_speed_eff_list = vmo.GetVariableSpeedPumpCurveViewMdoelList();
+
+            var vm = new Yw.WinFrmUI.Phart.PumpCurveViewModel();
             vm.Id = "";
             vm.ColorQH = Color.Blue;
             vm.ColorQE = Color.Green;
             vm.ColorQP = Color.Red;
-            vm.CurveQHName = "QE";
-            vm.CurveQPName = "QP";
-            vm.CurveQH = vm_defult.CurveQH.FeatCurve.GetPointList(50);
-            vm.CurveQE = vm_defult.CurveQE?.FeatCurve.GetPointList(50);
-            vm.CurveQP = vm_defult.CurveQP?.FeatCurve.GetPointList(50);
+            vm.CurveQHName = $"{_nr}rpm({50}hz)";
+            vm.CurveQPName = $"{_nr}rpm({50}hz)";
+            vm.CurveQH = _model.CurveQH.FeatCurve.GetPointList(50);
+            vm.CurveQE = _model.CurveQE?.FeatCurve.GetPointList(50);
+            vm.CurveQP = _model.CurveQP?.FeatCurve.GetPointList(50);
             vm.PointListQH = vm.CurveQH;
             vm.PointListQE = vm.CurveQE;
             vm.PointListQP = vm.CurveQP;
             vm.Equip = null;
-            vm.VariableSpeedList = new List<Yw.WinFrmUI.Phart.PumpChartVariableSpeedViewModel>();
-            vm.EqualEffList = new List<Yw.WinFrmUI.Phart.PumpChartEqualEffViewModel>();
-            vm.EqualPowerList = new List<Yw.WinFrmUI.Phart.PumpChartEqualPowerViewModel>();
-
-            for (int eff = 30; eff < 90; eff += 1)
+            if (vm_equal_eff_list != null && vm_equal_eff_list.Any())
             {
-                var ve = new Yw.WinFrmUI.Phart.PumpChartEqualEffViewModel();
-                //ve.Id = rhs.Id;
-                ve.CurveName = $"{eff}";
-                ve.Color = Color.ForestGreen;
-                ve.CurveEqualEff = new List<Yw.Geometry.Point2d>();
-                for (int hz = 30; hz <= 50; hz += 5)
+                vm.EqualEffList = new();
+                foreach (var item in vm_equal_eff_list)
                 {
-                    var qe = vm_defult.CurveQE.ToNewByN(50, hz);
-                    var q_array = qe.FeatCurve.GetPointsX(eff);
-                    if (q_array == null || !q_array.Any())
+                    var eff_vm = new Yw.WinFrmUI.Phart.PumpCurveEqualEffViewModel();
+                    eff_vm.Id = Guid.NewGuid().ToString();
+                    eff_vm.CurveName = $"{item.Eff:N1}";
+                    eff_vm.Color = Color.DarkGreen;
+                    eff_vm.CurveEqualEff = item.DefinePoints;
+                    eff_vm.Tension = item.Tension;
+                    eff_vm.IsClosed = item.IsClosed;
+                    vm.EqualEffList.Add(eff_vm);
+                }
+            }
+
+            if (vm_variable_speed_eff_list != null && vm_variable_speed_eff_list.Any())
+            {
+                vm.VariableSpeedList = new();
+                var index = 0;
+                foreach (var item in vm_variable_speed_eff_list)
+                {
+                    var vs_color = Yw.WinFrmUI.PhartColorHelper.Get(index);
+                    var vs_vm = new Yw.WinFrmUI.Phart.PumpCurveVariableSpeedViewModel();
+                    vs_vm.Id = Guid.NewGuid().ToString();
+                    vs_vm.ColorQH = vs_color;
+                    vs_vm.ColorQE = vs_color;
+                    vs_vm.ColorQP = vs_color;
+                    vs_vm.CurveQHName = $"{item.N}rpm({item.Hz}hz)";
+                    vs_vm.CurveQPName = $"{item.N}rpm({item.Hz}hz)";
+                    vs_vm.CurveQH = item.CurveQH.FeatCurve.GetPointList(30);
+                    vs_vm.CurveQE = item.CurveQE.FeatCurve.GetPointList(30);
+                    vs_vm.CurveQP = item.CurveQP.FeatCurve.GetPointList(30);
+                    vs_vm.N = item.N;
+                    vs_vm.Hz = item.Hz;
+                    vm.VariableSpeedList.Add(vs_vm);
+                    index++;
+                }
+            }
+
+            vm.VariableSpeedList = new List<PumpCurveVariableSpeedViewModel>();
+            vm.EqualEffList = new List<PumpCurveEqualEffViewModel>();
+            vm.EqualPowerList = new();
+
+            SetBindingData(vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.WinFrmUI.Phart.PumpCurveViewModel vm, bool default_visible, bool split_panel, bool eff_visible, bool power_visible, bool equal_eff_visible)
+        {
+            _vm = vm;
+            if (vm == null)
+            {
+                ClearBindingData();
+                return;
+            }
+            if (vm.VariableSpeedList != null && vm.VariableSpeedList.Any())
+            {
+                vm.ColorQH = vm.ColorQE = vm.ColorQP = Color.Black;
+            }
+            this.pumpViewChart1.SetBindingData(vm, default_visible, split_panel, eff_visible, power_visible, equal_eff_visible);
+        }
+
+
+        /// <summary>
+        /// 娓呯┖缁戝畾鏁版嵁
+        /// </summary>
+        public void ClearBindingData()
+        {
+            this.pumpViewChart1.ClearBindingData();
+        }
+
+
+        private void SetEquip()
+        {
+            if (_vm == null)
+                return;
+            if (!_vm.IsValid())
+                return;
+            if (this.barTxtStartHead.EditValue == null)
+                return;
+            if (this.barTxtPipeHead.EditValue == null)
+                return;
+            if (this.barTxtPipeQ.EditValue == null)
+                return;
+
+            var start_head = Convert.ToDouble(this.barTxtStartHead.EditValue);
+            var pipe_head = Convert.ToDouble(this.barTxtPipeHead.EditValue);
+            var pipe_flow = Convert.ToDouble(this.barTxtPipeQ.EditValue);
+
+            var equip_pt = new Yw.Geometry.Point2d(pipe_flow, pipe_head);
+            var qh_line = new Yw.Ahart.CurveQH(Yw.Ahart.eFeatType.Cubic, _vm.CurveQH);
+            var equip_line = Yw.Pump.PerformParabolaHelper.GetEquipCurvePointListByQH(qh_line, equip_pt, start_head, 30, true, out Yw.Geometry.Point2d sect_pt);
+            if (equip_line == null || sect_pt == null)
+            {
+                XtraMessageBox.Show("璁$畻澶辫触,璁捐鐐逛笉鍚堢悊!");
+                return;
+            }
+
+            _vm.Equip = new Yw.WinFrmUI.Phart.PumpCurveEquipViewModel();
+            _vm.Equip.Id = Guid.NewGuid().ToString();
+            _vm.Equip.Color = Color.Black;
+            _vm.Equip.StartH = start_head;
+            _vm.Equip.PipeQ = pipe_flow;
+            _vm.Equip.PipeH = pipe_head;
+
+            _vm.Equip.SectQ = sect_pt.X;
+            _vm.Equip.SectH = sect_pt.Y;
+
+            if (_vm.CurveQP != null && _vm.CurveQP.Any())
+            {
+                _vm.Equip.SectP = _vm.CurveQP.GetInterPointsY(sect_pt.X)?.FirstOrDefault();
+            }
+
+            if (_vm.CurveQE != null && _vm.CurveQE.Any())
+            {
+                _vm.Equip.SectE = _vm.CurveQE.GetInterPointsY(sect_pt.X)?.FirstOrDefault();
+            }
+
+            _vm.Equip.CurveEquip = equip_line.GetPointList(Yw.Ahart.eFeatType.Cubic);
+            SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        private void barCekEffVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            _eff_visible = this.barCekEffVisible.Checked;
+            SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        private void barCekPowerVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            _power_visible = this.barCekPowerVisible.Checked;
+            SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        private void barCekSplitPanel_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            _split_panel = this.barCekSplitPanel.Checked;
+            SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        private void barCekEqVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            if (this.barCekEqVisible.Checked)
+            {
+                SetEquip();
+            }
+            else
+            {
+                _vm.Equip = null;
+                SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+            }
+        }
+
+        private void barCekEqulEffVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            _equal_eff_visible = this.barCekEqulEffVisible.Checked;
+            SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        private void barBtnEqClear_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            this.barTxtStartHead.EditValue = 0;
+            this.barTxtPipeQ.EditValue = null;
+            this.barTxtPipeHead.EditValue = null;
+
+            _vm.Equip = null;
+            SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        private void barBtnSetEqPt_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            SetEquip();
+        }
+
+        private void barBtnAddVariableSpeedByN_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            AddByN();
+        }
+
+        private void barBtnAddVariableSpeedByHz_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            AddByHz();
+        }
+
+        private void barBtnAddVariableSpeedByPoint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            AddByPoint();
+        }
+
+        private void barBtnAddEqualEffByEff_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            AddByEff();
+        }
+
+        private void AddByN()
+        {
+            if (_vm == null)
+                return;
+            var dlg = new SetValueDlg();
+            dlg.SetBindingData(_nr);
+            dlg.VerifyValueChanged += (speed) =>
+            {
+                var hz = Math.Round(speed / _nr * 50, 1);
+                if (hz > 50 || hz < 10)
+                {
+                    return false;
+                }
+
+                var index = _vm.VariableSpeedList?.Count + 1 ?? 1;
+                var vs_color = Yw.WinFrmUI.PhartColorHelper.Get(index);
+                var vs_vm = new Yw.WinFrmUI.Phart.PumpCurveVariableSpeedViewModel();
+                vs_vm.Id = Guid.NewGuid().ToString();
+                vs_vm.ColorQH = vs_color;
+                vs_vm.ColorQE = vs_color;
+                vs_vm.ColorQP = vs_color;
+                vs_vm.CurveQHName = $"{speed}rpm({hz}hz)";
+                vs_vm.CurveQPName = $"{speed}rpm({hz}hz)";
+                vs_vm.CurveQH = _vm.CurveQH.GetQHPointListByN(50, hz);
+                vs_vm.CurveQE = _vm.CurveQE.GetQEPointListByN(50, hz);
+                vs_vm.CurveQP = _vm.CurveQP.GetQEPointListByN(50, hz);
+                vs_vm.N = speed;
+                vs_vm.Hz = hz;
+                _vm.VariableSpeedList.Add(vs_vm);
+                SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+
+                //this.DataChangedEvent?.Invoke();
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        private void AddByHz()
+        {
+            if (_vm == null)
+                return;
+            var dlg = new SetValueDlg();
+            dlg.VerifyValueChanged += (hz) =>
+            {
+                if (hz > 50 || hz < 10)
+                {
+                    return false;
+                }
+                var speed = Math.Round(hz / 50 * _nr);
+                var index = _vm.VariableSpeedList?.Count + 1 ?? 1;
+                var vs_color = Yw.WinFrmUI.PhartColorHelper.Get(index);
+                var vs_vm = new Yw.WinFrmUI.Phart.PumpCurveVariableSpeedViewModel();
+                vs_vm.Id = Guid.NewGuid().ToString();
+                vs_vm.ColorQH = vs_color;
+                vs_vm.ColorQE = vs_color;
+                vs_vm.ColorQP = vs_color;
+                vs_vm.CurveQHName = $"{speed}rpm({hz}hz)";
+                vs_vm.CurveQPName = $"{speed}rpm({hz}hz)";
+                vs_vm.CurveQH = _vm.CurveQH.GetQHPointListByN(50, hz);
+                vs_vm.CurveQE = _vm.CurveQE.GetQEPointListByN(50, hz);
+                vs_vm.CurveQP = _vm.CurveQP.GetQEPointListByN(50, hz);
+                vs_vm.N = speed;
+                vs_vm.Hz = hz;
+                _vm.VariableSpeedList.Add(vs_vm);
+                SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        private void AddByPoint()
+        {
+            if (_vm == null)
+                return;
+            if (!_vm.IsValid())
+                return;
+            var dlg = new SetPointDlg();
+            dlg.SetBindingData();
+            dlg.VerifyValueChanged += (x, y) =>
+            {
+                var pt = new Yw.Geometry.Point2d(x, y);
+                var sect_pt = Yw.Pump.PerformParabolaHelper.GetQHSectPoint(_model.CurveQH, pt);
+                if (sect_pt == null || sect_pt.IsZeroPoint())
+                    return false;
+
+                var speed = sect_pt.Y.CalculateSimuByH(_nr, pt.Y);
+                var hz = Math.Round(speed / _nr * 50, 1);
+                if (hz > 50 || hz < 20)
+                {
+                    return false;
+                }
+                speed = Math.Round(speed, 1);
+                var index = _vm.VariableSpeedList?.Count + 1 ?? 1;
+                var vs_color = Yw.WinFrmUI.PhartColorHelper.Get(index);
+                var vs_vm = new Yw.WinFrmUI.Phart.PumpCurveVariableSpeedViewModel();
+                vs_vm.Id = Guid.NewGuid().ToString();
+                vs_vm.ColorQH = vs_color;
+                vs_vm.ColorQE = vs_color;
+                vs_vm.ColorQP = vs_color;
+                vs_vm.CurveQHName = $"{speed}rpm({hz}hz)";
+                vs_vm.CurveQPName = $"{speed}rpm({hz}hz)";
+                vs_vm.CurveQH = _vm.CurveQH.GetQHPointListByN(50, hz);
+                vs_vm.CurveQE = _vm.CurveQE.GetQEPointListByN(50, hz);
+                vs_vm.CurveQP = _vm.CurveQP.GetQEPointListByN(50, hz);
+                vs_vm.N = speed;
+                vs_vm.Hz = hz;
+                _vm.VariableSpeedList.Add(vs_vm);
+                SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        private void AddByEff()
+        {
+            if (_vm == null)
+                return;
+            if (!_vm.IsValid())
+                return;
+            if (_vm.CurveQE == null || !_vm.CurveQE.Any())
+                return;
+            var dlg = new SetEffDlg();
+            dlg.SetBindingData();
+            dlg.VerifyValueChanged += (eff_double_list) =>
+            {
+                double max_hz = 50;
+                double min_hz = 30;
+                if (_vm.VariableSpeedList != null && _vm.VariableSpeedList.Any())
+                {
+                    max_hz = Math.Max(max_hz, _vm.VariableSpeedList.Max(x => x.Hz));
+                    min_hz = Math.Min(min_hz, _vm.VariableSpeedList.Min(x => x.Hz));
+                }
+
+                foreach (var eff in eff_double_list)
+                {
+                    var eff_list = EqualParaCurveEListHelper.CalcEqualParaCurveE(_model.CurveQH, _model.CurveQE, max_hz, min_hz, eff);
+                    if (eff_list != null && eff_list.Any())
                     {
-                        continue;
+                        foreach (var item in eff_list)
+                        {
+                            var def_pt_list = item.DefinePoints;
+                            var eff_vm = new Yw.WinFrmUI.Phart.PumpCurveEqualEffViewModel();
+                            eff_vm.Id = Guid.NewGuid().ToString();
+                            eff_vm.CurveName = $"{item.Eff:N1}";
+                            eff_vm.Color = Color.DarkGreen;
+                            eff_vm.CurveEqualEff = item.DefinePoints;
+                            eff_vm.Tension = item.Tension;
+                            eff_vm.IsClosed = item.IsClosed;
+                            _vm.EqualEffList.Add(eff_vm);
+                        }
                     }
-                    var qh = vm_defult.CurveQH.ToNewByN(50, hz);
-                    var flow = q_array.FirstOrDefault();
-                    var head = qh.FeatCurve.GetPointY(flow);
-                    ve.CurveEqualEff.Add(new Yw.Geometry.Point2d(flow, head));
-                }
-                if (!ve.CurveEqualEff.Any())
-                {
-                    continue;
                 }
 
-                vm.EqualEffList.Add(ve);
-            }
+                SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
 
-            for (int hz = 30; hz < 50; hz += 5)
-            {
-                var tN = nr * hz / 50;
-                var vs = new Yw.WinFrmUI.Phart.PumpChartVariableSpeedViewModel();
-                vs.CurveQHName = $"{tN}";
-                vs.CurveQPName = $"{tN}";
-                vs.CurveQH = vm_defult.CurveQH.GetPointListByN(nr, tN, 50);
-                vs.CurveQE = vm_defult.CurveQE.GetPointListByN(nr, tN, 50);
-                vs.CurveQP = vm_defult.CurveQP.GetPointListByN(nr, tN, 50);
-                vs.Hz = hz;
-                vs.N = tN;
-                vm.VariableSpeedList.Add(vs);
-            }
+                return true;
+            };
+            dlg.ShowDialog();
 
-            this.pumpChart1.SetChart(vm);
         }
 
         /// <summary>
@@ -90,5 +439,6 @@
             return new Yw.Vmo.PhartDiagramExGraphListVmo();
         }
 
+
     }
 }

--
Gitblit v1.9.3