From 0f99d4d12f2eae29bbe343f4b3131f2faeccda5d Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期二, 14 一月 2025 17:31:20 +0800
Subject: [PATCH] 泵曲线修改

---
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs |  719 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 611 insertions(+), 108 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 fa4a6f1..edbcbc1 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,24 +1,38 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing DevExpress.Spreadsheet;
+using Mapster;
+using StackExchange.Profiling.Internal;
+using Yw.Ahart;
+using Yw.Geometry;
+using Yw.Pump;
+using Yw.WinFrmUI.Phart;
+
+namespace HStation.WinFrmUI
 {
     public partial class PumpChartViewCtrl : DevExpress.XtraEditors.XtraUserControl
     {
         public PumpChartViewCtrl()
         {
             InitializeComponent();
+            this.barCekEqVisible.Checked = true;
+            this.barCekEqulEffVisible.Checked = true;
+            this.barCekPowerVisible.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+            this.barCekEqVisible.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+
+            this.barBtnAddVariableSpeedMenu.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+            this.barBtnAddEqualEffMenu.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+            this.barCekEqulEffVisible.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; 
         }
 
+
         private Yw.Vmo.PhartDiagramExGraphListVmo _vmo = null;
-        private Yw.WinFrmUI.Phart.PumpCurveViewModel _vm = null;
+        private List<Yw.WinFrmUI.Phart.PumpViewChartViewModel> _vm_list = null;
 
-        private bool _default_visible = true;
-        private bool _power_visible = false;
-        private bool _eff_visible = false;
-        private bool _split_panel = false;
-
-        /// <summary>
-        /// 鏁版嵁鍙樻洿浜嬩欢
-        /// </summary>
-        public event Action<Yw.Vmo.PhartDiagramExGraphListVmo> DataChangedEvent;
+        private string _coordinate = null;
+        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>
         /// 缁戝畾鏁版嵁
@@ -26,152 +40,641 @@
         public void SetBindingData(Yw.Vmo.PhartDiagramExGraphListVmo vmo, double nr)
         {
             _vmo = vmo;
+            _nr = nr;
+            _vm_list = null;
+            _coordinate = null;
             if (vmo == null)
             {
                 ClearBindingData();
                 return;
             }
-            var vm_list = vmo.GetPumpCurveViewMdoelList();
-            if (vm_list == null || !vm_list.Any())
+
+            var vm_list = new List<Yw.WinFrmUI.Phart.PumpViewChartViewModel>();
+            if (vmo.GraphList == null || !vmo.GraphList.Any())
             {
                 ClearBindingData();
                 return;
             }
-            var vm_def = vmo.GetDefaultPumpCurveViewMdoel();
-            if (vm_def == null)
-                return;
+            _coordinate = vmo.DispParas;
 
-            var vm_v_speed_list = vmo.GetVariableSpeedPumpCurveViewMdoelList();
-            var vm_e_eff_list = vmo.GetCurveEqualEViewMdoelList();
-
-            var vm = new Yw.WinFrmUI.Phart.PumpCurveViewModel();
-            vm.Id = "";
-            vm.ColorQH = Color.Blue;
-            vm.ColorQE = Color.Green;
-            vm.ColorQP = Color.Red;
-            vm.CurveQHName = "QH";
-            vm.CurveQPName = "QP";
-            vm.CurveQH = vm_def.CurveQH.FeatCurve.GetPointList(50);
-            vm.CurveQE = vm_def.CurveQE?.FeatCurve.GetPointList(50);
-            vm.CurveQP = vm_def.CurveQP?.FeatCurve.GetPointList(50);
-            vm.PointListQH = vm.CurveQH;
-            vm.PointListQE = vm.CurveQE;
-            vm.PointListQP = vm.CurveQP;
-            vm.Equip = null;
-            if (vm_e_eff_list == null || !vm_e_eff_list.Any())
+            foreach (var graph in vmo.GraphList)
             {
-                var curve_qe = vm_def.CurveQE.FeatCurve;
-                if (curve_qe != null && curve_qe.IsValid())
+                double hz = 50;
+                double n = nr;
+                var curve_type = (Yw.Ahart.eCurveType)graph.GraphType;
+                switch (curve_type)
                 {
-                    var max_eff = curve_qe.GetPointList().Max(x => x.Y);
-                    var eff_list = EqualParaCurveEListHelper.CalcEqualParaCurveE(vm_def, 50, 30, max_eff - 1);
-                    if (eff_list != null && eff_list.Any())
-                    {
-                        vm.EqualEffList = new List<Yw.WinFrmUI.Phart.PumpCurveEqualEffViewModel>();
-                        foreach (var item in eff_list)
+                    case Yw.Ahart.eCurveType.QH:
                         {
-                            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 paras = PhartGraphHelper.GetGraphParas<Yw.WinFrmUI.Phart.QHGraphParasViewModel>(curve_type, graph.GraphParas);
+                            hz = paras.Hz;
+                            n = paras.N;
                         }
+                        break;
+                    case Yw.Ahart.eCurveType.QP:
+                        {
+                            var paras = PhartGraphHelper.GetGraphParas<Yw.WinFrmUI.Phart.QPGraphParasViewModel>(curve_type, graph.GraphParas);
+                            hz = paras.Hz;
+                            n = paras.N;
+                        }
+                        break;
+                    case Yw.Ahart.eCurveType.QE:
+                        {
+                            var paras = PhartGraphHelper.GetGraphParas<Yw.WinFrmUI.Phart.QEGraphParasViewModel>(curve_type, graph.GraphParas);
+                            hz = paras.Hz;
+                            n = paras.N;
+                        }
+                        break;
+                }
+
+                var feat_curve = PhartGraphHelper.GetPerformCurve(curve_type, graph.GeometryInfo);
+                var geometry_paras = PhartGraphHelper.GetGeometryParas(curve_type, graph.GeometryParas);
+                var annotation_list = PhartGraphHelper.GetAnnotationParasList(curve_type, graph.AnnotationParas);
+                if (curve_type == eCurveType.QE)
+                    annotation_list = null;
+                    var vm = new Yw.WinFrmUI.Phart.PumpViewChartViewModel();
+                vm.Id = graph.ID.ToString();
+                vm.Hz = hz;
+                vm.N = n;
+                vm.AnnotationList = annotation_list;
+                vm.CurveType = feat_curve.CurveType;
+                vm.FeatType = feat_curve.FeatType;
+                vm.DefPointList = geometry_paras?.DefinePoints;
+                vm.FitPointList = feat_curve.FeatCurve.GetPointList(100);
+                if (vm.CurveType== eCurveType.EqualE)
+                    vm.FitPointList = feat_curve.FeatCurve.GetPointList(10);
+
+                vm.GraphParas = graph.GraphParas;
+                vm_list.Add(vm);
+            }
+ 
+            _vm_list = vm_list;
+            _vm_list[0].IsSelect = true;
+             
+            SetColor(_vm_list);
+            SetBindingData(_vm_list, _coordinate, _split_panel, _eff_visible, _power_visible, _equal_eff_visible);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary> 
+        private void SetColor(List<Yw.WinFrmUI.Phart.PumpViewChartViewModel> vm_list)
+        {
+            if (vm_list == null || !vm_list.Any())
+                return;
+            var group = vm_list.GroupBy(x => x.Hz);
+            if (group.Count() > 1)
+            {
+                for (int i = 0; i < group.Count(); i++)
+                {
+                    var color = Yw.WinFrmUI.PhartColorHelper.Get(i);
+                    var item = group.ElementAt(i);
+                    foreach (var vm in item)
+                    {
+                        vm.Color = color;
+                        if (vm.CurveType == eCurveType.EqualE)
+                            vm.Color = Color.DarkGreen;
                     }
                 }
             }
-
-
-            //vm.VariableSpeedList = new List<Yw.WinFrmUI.Phart.PumpChartVariableSpeedViewModel>(); 
-            //vm.EqualPowerList = new List<Yw.WinFrmUI.Phart.PumpChartEqualPowerViewModel>(); 
-            //for (int eff = 30; eff < 90; eff += 1)
-            //{
-            //    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)
-            //    {
-            //        var qe = vm_defult.CurveQE.ToNewByN(50, hz);
-            //        var q_array = qe.FeatCurve.GetPointsX(eff);
-            //        if (q_array == null || !q_array.Any())
-            //        {
-            //            continue;
-            //        }
-            //        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);
-            //}
-
-            //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);
-            //}
-
-            SetBindingData(vm, _default_visible, _split_panel, _eff_visible, _power_visible);
+            else
+            {
+                var item = group.ElementAt(0);
+                foreach (var vm in item)
+                {
+                    switch (vm.CurveType)
+                    {
+                        case Yw.Ahart.eCurveType.QH: vm.Color = Yw.WinFrmUI.Phart.PumpChartDisplay.CurveColorQH; break;
+                        case Yw.Ahart.eCurveType.QP: vm.Color = Yw.WinFrmUI.Phart.PumpChartDisplay.CurveColorQP; break;
+                        case Yw.Ahart.eCurveType.QE: vm.Color = Yw.WinFrmUI.Phart.PumpChartDisplay.CurveColorQE; break;
+                    }
+                } 
+            }
         }
-
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.WinFrmUI.Phart.PumpCurveViewModel vm, bool default_visible = true, bool split_panel = false, bool eff_visible = false, bool power_visible = true)
+        private void SetBindingData(List<Yw.WinFrmUI.Phart.PumpViewChartViewModel> vm_list, string coordinate, bool split_panel, bool eff_visible, bool power_visible, bool equal_eff_visible)
         {
-            _vm = vm;
-            if (vm == null)
+            if (IsInvalidData())
             {
                 ClearBindingData();
                 return;
             }
-            this.pumpChart1.SetBindingData(vm, default_visible, split_panel, eff_visible, power_visible);
+            var list = new List<Yw.WinFrmUI.Phart.PumpViewChartViewModel>();
+            foreach (var item in vm_list)
+            {
+                if (!eff_visible)
+                {
+                    if (item.CurveType == eCurveType.QE)
+                    {
+                        continue;
+                    };
+                }
+
+                if (!power_visible)
+                {
+                    if (item.CurveType == eCurveType.QP)
+                    {
+                        continue;
+                    };
+                }
+
+                if (!equal_eff_visible)
+                {
+                    if (item.CurveType == eCurveType.EqualE)
+                    {
+                        continue;
+                    };
+                }
+
+                list.Add(item);
+            }
+
+            this.pumpViewChart1.SetBindingData(list, coordinate, split_panel, eff_visible, power_visible, equal_eff_visible);
         }
 
+        //鏄惁鏄棤鏁堟暟鎹�
+        private bool IsInvalidData()
+        {
+            if (_vm_list == null || !_vm_list.Any())
+            {
+                return true;
+            }
+            if (!_vm_list.Exists(x => x.CurveType == Yw.Ahart.eCurveType.QH))
+            {
+                return true;
+            }
+            return false;
+        }
 
         /// <summary>
         /// 娓呯┖缁戝畾鏁版嵁
         /// </summary>
         public void ClearBindingData()
         {
-            this.pumpChart1.ClearBindingData();
+            this.pumpViewChart1.Clear();
+        }
+
+
+        private void SetEquip()
+        {
+            if (_vmo == null)
+                return;
+            if (_vm_list == null || !_vm_list.Any())
+                return;
+            if (this.barTxtStartHead.EditValue == null)
+                return;
+            if (this.barTxtPipeHead.EditValue == null)
+                return;
+            if (this.barTxtPipeQ.EditValue == null)
+                return;
+
+            var qh50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QH);
+            if (qh50 == 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 equip_pt_list = Yw.Pump.PerformParabolaHelper.GetEquipCurvePointListByQH(qh50.FitPointList, equip_pt, start_head, 30, true, out Yw.Geometry.Point2d sect_pt);
+            if (equip_pt_list == null || sect_pt == null)
+            {
+                XtraMessageBox.Show("璁$畻澶辫触,璁捐鐐逛笉鍚堢悊!");
+                return;
+            }
+
+            var pump_sect_pt = new Yw.WinFrmUI.Phart.PumpSectPointViewModel();
+            pump_sect_pt.Q = sect_pt.X;
+            pump_sect_pt.H = sect_pt.Y;
+
+            var qe50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QE);
+            if (qe50 != null)
+            {
+                pump_sect_pt.E = qe50?.FitPointList?.GetInterPointsY(sect_pt.X)?.FirstOrDefault();
+            }
+
+            var qp50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QP);
+            if (qp50 != null)
+            {
+                pump_sect_pt.P = qp50?.FitPointList?.GetInterPointsY(sect_pt.X)?.FirstOrDefault();
+            }
+
+            this.pumpViewChart1.SetEquip(equip_pt_list, pump_sect_pt);
         }
 
         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);
+            SetBindingData(_vm_list,_coordinate, _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);
+            SetBindingData(_vm_list,_coordinate, _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);
+            SetBindingData(_vm_list,_coordinate, _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
+            {
+                this.pumpViewChart1.SetEquip(null,null);
+            }
+        }
+
+        private void barCekEqulEffVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            _equal_eff_visible = this.barCekEqulEffVisible.Checked;
+            SetBindingData(_vm_list,_coordinate, _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;
+
+            this.pumpViewChart1.SetEquip(null, null);
+        }
+
+        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 (IsInvalidData())
+                return;
+            var qh50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QH);
+            if (qh50 == null)
+                return;
+            var qe50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QE);
+            var qp50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QP);
+
+            var dlg = new Yw.WinFrmUI.Phart.SetValueDlg();
+            dlg.SetBindingData(_nr);
+            dlg.VerifyValueChanged += (speed) =>
+            {
+                var hz = Math.Round(speed / _nr * 50, 1);
+                if (hz > 50 || hz < 10)
+                {
+                    return false;
+                }
+                if (_vm_list.Exists(x => x.N == speed))
+                {
+                    TipFormHelper.ShowWarn("杞�熷凡瀛樺湪");
+                    return false;
+                }
+                hz = Math.Round(hz, 1);  
+
+                var pt_qh_list = qh50.FitPointList.GetQHPointListByN(50, hz);
+                var pt_qe_list = qe50?.FitPointList?.GetQEPointListByN(50, hz);
+                var pt_qp_list = qp50?.FitPointList?.GetQPPointListByN(50, hz);
+
+                Insert(hz,speed,pt_qh_list,pt_qe_list,pt_qp_list); 
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        private void AddByHz()
+        {
+            if (IsInvalidData())
+                return;
+
+            var qh50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QH);
+            if (qh50 == null)
+                return;
+            var qe50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QE);
+            var qp50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QP);
+
+            var dlg = new Yw.WinFrmUI.Phart.SetValueDlg();
+            dlg.VerifyValueChanged += (hz) =>
+            {
+                if (hz > 50 || hz < 10)
+                {
+                    return false;
+                }
+                if (_vm_list.Exists(x => x.Hz == hz))
+                {
+                    TipFormHelper.ShowWarn("棰戠巼宸插瓨鍦�");
+                    return false;
+                }
+                var speed = Math.Round(hz / 50 * _nr);
+                speed = Math.Round(speed, 1);
+              
+
+                var pt_qh_list = qh50.FitPointList.GetQHPointListByN(50, hz);
+                var pt_qe_list = qe50?.FitPointList?.GetQEPointListByN(50, hz);
+                var pt_qp_list = qp50?.FitPointList?.GetQPPointListByN(50, hz); 
+
+                Insert(hz, speed, pt_qh_list, pt_qe_list, pt_qp_list);  
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        private void AddByPoint()
+        {
+            if (IsInvalidData())
+                return;
+
+            var qh50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QH);
+            if (qh50 == null)
+                return;
+            var qe50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QE);
+            var qp50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QP);
+
+            var dlg = new Yw.WinFrmUI.Phart.SetPointDlg();
+            dlg.SetBindingData();
+            dlg.VerifyValueChanged += (x, y) =>
+            {
+                var pt = new Yw.Geometry.Point2d(x, y);
+                var curve = new Yw.Pump. CurveQH(qh50.FeatType, qh50.DefPointList);
+                var sect_pt = Yw.Pump.PerformParabolaHelper.GetQHSectPoint(curve, 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);
+                if (_vm_list.Exists(x => x.N == speed))
+                {
+                    TipFormHelper.ShowWarn("杞�熷凡瀛樺湪");
+                    return false;
+                }
+                var pt_qh_list = qh50.FitPointList.GetQHPointListByN(50, hz);
+                var pt_qe_list = qe50?.FitPointList?.GetQEPointListByN(50, hz);
+                var pt_qp_list = qp50?.FitPointList?.GetQPPointListByN(50, hz);
+
+                Insert(hz, speed, pt_qh_list, pt_qe_list, pt_qp_list);
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        private void AddByEff()
+        {
+            if (IsInvalidData())
+                return;
+            var qh50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QH);
+            if (qh50 == null)
+                return;
+            var qe50 = _vm_list.Find(x => x.Hz == 50 && x.CurveType == Yw.Ahart.eCurveType.QE);
+            if (qe50 == null)
+                return;
+
+            var dlg = new SetEffDlg();
+            dlg.SetBindingData();
+            dlg.VerifyValueChanged += (eff_double_list) =>
+            {
+                double max_hz = 50;
+                double min_hz = 30;
+
+                max_hz = Math.Max(max_hz, _vm_list.Max(x => x.Hz));
+                min_hz = Math.Min(min_hz, _vm_list.Min(x => x.Hz));
+
+                var qh = new Yw.Pump.CurveQH(qh50.FeatType, qh50.DefPointList);
+                var qe = new Yw.Pump.CurveQE(qe50.FeatType, qe50.DefPointList);
+
+                foreach (var eff in eff_double_list)
+                {
+                    var eff_list = EqualParaCurveEListHelper.CalcEqualParaCurveE(qh, qe, max_hz, min_hz, eff);
+                    if (eff_list != null && eff_list.Any())
+                    {
+                        foreach (var item in eff_list)
+                        {  
+                            Insert(item.Eff,item.Tension,item.IsClosed,item.IsUShaped,item.DefinePoints);
+                        }
+                    }
+                }
+                 
+                return true;
+            };
+            dlg.ShowDialog();
+
+        }
+
+
+        private async void Insert(double hz, double speed, List<Yw.Geometry.Point2d> pt_qh_list, List<Yw.Geometry.Point2d> pt_qe_list, List<Yw.Geometry.Point2d> pt_qp_list)
+        { 
+            var list = new List<Yw.Vmo.PhartGraphVmo>();
+            var graph_qh = new Yw.Vmo.PhartGraphVmo()
+            {
+                Name = "鎵▼绾�",
+                GraphType = (int)Yw.Ahart.eCurveType.QH,
+                GraphParas = new QHGraphParasViewModel()
+                {
+                    Hz = hz,
+                    N = speed,
+                }.ToJson(),
+                GeometryParas = new Yw.WinFrmUI.Phart.CurveGeometryParasViewModel
+                {
+                    DefinePoints = pt_qh_list
+                }.ToJson(),
+                GeometryStyle = (int)HStation.PhartRelation.eGeometryStyle.FeatCurve,
+                GeometryInfo = pt_qh_list.ToDbString(Yw.Ahart.eCurveType.QH, Yw.Ahart.eFeatType.Cubic),
+                AnnotationParas = new List<Yw.WinFrmUI.Phart.AnnotationParasViewModel>()
+                    {
+                       new  ()
+                       {
+                            X = pt_qh_list.Last().X,
+                            Y = pt_qh_list.Last().Y,
+                            Text = $"{speed}rpm({hz}hz)",
+                            Aligment = eTextAligment.Right
+                       }
+                    }.ToJson()
+            };
+
+            list.Add(graph_qh);
+            if (pt_qe_list != null && pt_qe_list.Any())
+            {
+                var graph_qe = new Yw.Vmo.PhartGraphVmo()
+                {
+                    Name = "鏁堢巼绾�",
+                    GraphType = (int)Yw.Ahart.eCurveType.QE,
+                    GraphParas = new QEGraphParasViewModel()
+                    {
+                        Hz = hz,
+                        N = speed,
+                    }.ToJson(),
+                    GeometryParas = new Yw.WinFrmUI.Phart.CurveGeometryParasViewModel
+                    {
+                        DefinePoints = pt_qe_list
+                    }.ToJson(),
+                    GeometryStyle = (int)HStation.PhartRelation.eGeometryStyle.FeatCurve,
+                    GeometryInfo = pt_qe_list.ToDbString(Yw.Ahart.eCurveType.QE, Yw.Ahart.eFeatType.Cubic),
+                    AnnotationParas = new List<Yw.WinFrmUI.Phart.AnnotationParasViewModel>()
+                    {
+                       new  ()
+                       {
+                            X = pt_qe_list.Last().X,
+                            Y = pt_qe_list.Last().Y,
+                            Text = $"{speed}rpm({hz}hz)",
+                            Aligment = eTextAligment.Right
+                       }
+                    }.ToJson()
+                };
+
+                list.Add(graph_qe);
+            }
+
+
+            if (pt_qp_list != null && pt_qp_list.Any())
+            {
+                var graph_qp = new Yw.Vmo.PhartGraphVmo()
+                {
+                    Name = "鍔熺巼绾�",
+                    GraphType = (int)Yw.Ahart.eCurveType.QP,
+                    GraphParas = new QPGraphParasViewModel()
+                    {
+                        Hz = hz,
+                        N = speed,
+                    }.ToJson(),
+                    GeometryParas = new Yw.WinFrmUI.Phart.CurveGeometryParasViewModel
+                    {
+                        DefinePoints = pt_qp_list
+                    }.ToJson(),
+                    GeometryStyle = (int)HStation.PhartRelation.eGeometryStyle.FeatCurve,
+                    GeometryInfo = pt_qp_list.ToDbString(Yw.Ahart.eCurveType.QP, Yw.Ahart.eFeatType.Cubic),
+                    AnnotationParas = new List<Yw.WinFrmUI.Phart.AnnotationParasViewModel>()
+                    {
+                       new  ()
+                       {
+                            X = pt_qp_list.Last().X,
+                            Y = pt_qp_list.Last().Y,
+                            Text = $"{speed}rpm({hz}hz)",
+                            Aligment = eTextAligment.Right
+                       }
+                    }.ToJson()
+                };
+
+                list.Add(graph_qp);
+            }
+
+ 
+            list.ForEach(x => x.DiagramID = _vmo.ID);
+            var bol = await new Yw.BLL.PhartGraph().Inserts(list);
+            if (!bol)
+            {
+                TipFormHelper.ShowWarn("娣诲姞澶辫触!");
+                return;
+            }
+              
+            var newVmo = await new Yw.BLL.PhartDiagramExtensions().GetByID(_vmo.ID);
+            if (newVmo == null)
+            {
+                TipFormHelper.ShowWarn("鑾峰彇澶辫触!");
+                return;
+            }
+
+            SetBindingData(newVmo, _nr);
+            SetEquip();
+        }
+
+        private async void Insert(double eff, double tension, bool is_closed,bool is_u, List<Yw.Geometry.Point2d> pt_equal_e_list)
+        {
+            if (tension<=0)
+            {
+                tension = 0.5;
+            }
+            var list = new List<Yw.Vmo.PhartGraphVmo>();
+            var graph_equal_e = new Yw.Vmo.PhartGraphVmo()
+            {
+                Name = "鎵▼绾�",
+                GraphType = (int)Yw.Ahart.eCurveType.EqualE,
+                GraphParas = new EqualEGraphParasViewModel()
+                {
+                    Eff = eff,
+                    Tension = tension,
+                    IsClosed = is_closed,
+                }.ToJson(),
+                GeometryParas = new Yw.WinFrmUI.Phart.CurveGeometryParasViewModel
+                {
+                    DefinePoints = pt_equal_e_list
+                }.ToJson(),
+                GeometryStyle = (int)HStation.PhartRelation.eGeometryStyle.FeatCurve,
+                GeometryInfo = pt_equal_e_list.ToDbString(Yw.Ahart.eCurveType.EqualE, Yw.Ahart.eFeatType.Cubic),
+               
+            };
+
+            var annotation_list = new List<Yw.WinFrmUI.Phart.AnnotationParasViewModel>();
+            annotation_list.Add(new()
+            {
+                X = pt_equal_e_list.Last().X,
+                Y = pt_equal_e_list.Last().Y,
+                Text = $"{eff}%",
+                Aligment = eTextAligment.Right
+            });
+            if (is_u)
+            {
+                var first = pt_equal_e_list.First();
+                annotation_list.Add(new()
+                {
+                    X = first.X,
+                    Y = first.Y,
+                    Text = $"{eff}%",
+                    Aligment = eTextAligment.Right
+                });
+            }
+            graph_equal_e.AnnotationParas = annotation_list.ToJson();
+            list.Add(graph_equal_e);
+            list.ForEach(x => x.DiagramID = _vmo.ID);
+            var bol = await new Yw.BLL.PhartGraph().Inserts(list);
+            if (!bol)
+            {
+                TipFormHelper.ShowWarn("娣诲姞澶辫触!");
+                return;
+            }
+
+            var newVmo = await new Yw.BLL.PhartDiagramExtensions().GetByID(_vmo.ID);
+            if (newVmo == null)
+            {
+                TipFormHelper.ShowWarn("鑾峰彇澶辫触!");
+                return;
+            }
+
+            SetBindingData(newVmo, _nr);
+            SetEquip();
         }
 
         /// <summary>
@@ -182,6 +685,6 @@
             return new Yw.Vmo.PhartDiagramExGraphListVmo();
         }
 
-    
+
     }
 }

--
Gitblit v1.9.3