WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -2042,70 +2042,35 @@ XtraMessageBox.Show("无水泵信息"); return; } var vmList = new List<XhsSinglePumpViewModel>(); foreach (var pump in pumps) var dlg = new SimulationPumpParallelDlg(); dlg.SaveEvent += async (list) => { if (!pump.RatedN.HasValue) list?.ForEach(x => { continue; } var qh = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQH)?.CurveData; var qe = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQE)?.CurveData; var qp = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQP)?.CurveData; if (qh == null) { continue; } var qhPtList = qh.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList(); var qePtList = qe?.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList(); var qpPtList = qp?.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList(); var vm = new XhsSinglePumpViewModel(); vmList.Add(vm); vm.ID = pump.ID; vm.Name = pump.Name; vm.Code = pump.Code; vm.IsBp = true; vm.RunStatus = pump.LinkStatus == Yw.Hydro.LinkStatus.Open; vm.RatedHz = pump.RatedHz; vm.CurrentHz = Math.Round(pump.RatedHz * pump.SpeedRatio, 1); vm.RatedSpeed = pump.RatedN.Value; vm.CurrentSpeed = Math.Round(pump.RatedN.Value * pump.SpeedRatio, 1); vm.CurveQH = qhPtList; vm.CurveQE = qePtList; vm.CurveQP = qpPtList; } //var dlg = new PumpParallelAnalyDlg(); //dlg.SetBindingData(vmList); //dlg.ReloadDataEvent += (list) => //{ // list?.ForEach(x => // { // var pump = pumps.Find(t => t.Code == x.Code); // if (pump != null) // { // pump.LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed; // pump.SpeedRatio = x.CurrentHz / pump.RatedHz; // } // }); // var codes = list?.Select(x => x.Code).ToList(); // //UpdateVisualViewModelProperty(codes); // //ShowSelectedProperty(); // UpdateVisualListCtrl(); // return true; //}; //dlg.ShowDialog(); var pump = pumps.Find(t => t.Code == x.Code); if (pump != null) { pump.LinkStatus = x.LinkStatus; pump.SpeedRatio = x.SpeedRatio; } }); var visualVmListHelper = GetVisualVmListHelper(); visualVmListHelper.UpdateProperty(pumps.Select(x => x as Yw.Model.HydroVisualInfo).ToList()); SelectVisual(_visual, eVisualSource.None); var calcuResultLabelHelper = await GetCalcuResultLabelHelper(); calcuResultLabelHelper.Set(); }; dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); } //并联模拟 private void barBtnPumpParallel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var dlg = new SimulationPumpParallelDlg(); dlg.ShowDialog(); // PumpParallel(); PumpParallel(); } #endregion WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs
@@ -29,7 +29,6 @@ private void InitializeComponent() { ComponentResourceManager resources = new ComponentResourceManager(typeof(SimulationPumpParallelCtrl)); pictureEdit1 = new PictureEdit(); sidePanel1 = new SidePanel(); layoutControl1 = new DevExpress.XtraLayout.LayoutControl(); hydroPumpQueryPointListGridCtrl1 = new HydroPumpQueryPointListGridCtrl(); @@ -52,7 +51,7 @@ layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem(); layoutControlGroup5 = new DevExpress.XtraLayout.LayoutControlGroup(); layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem(); ((ISupportInitialize)pictureEdit1.Properties).BeginInit(); pumpParallelChart1 = new Yw.WinFrmUI.Phart.PumpParallelChart(); sidePanel1.SuspendLayout(); ((ISupportInitialize)layoutControl1).BeginInit(); layoutControl1.SuspendLayout(); @@ -72,15 +71,6 @@ ((ISupportInitialize)layoutControlGroup5).BeginInit(); ((ISupportInitialize)layoutControlItem7).BeginInit(); SuspendLayout(); // // pictureEdit1 // pictureEdit1.Dock = DockStyle.Fill; pictureEdit1.Location = new Point(0, 0); pictureEdit1.Name = "pictureEdit1"; pictureEdit1.Properties.ShowCameraMenuItem = CameraMenuItemVisibility.Auto; pictureEdit1.Size = new Size(640, 663); pictureEdit1.TabIndex = 0; // // sidePanel1 // @@ -161,6 +151,7 @@ btnDesign.StyleController = layoutControl1; btnDesign.TabIndex = 3; btnDesign.Text = "设置"; btnDesign.Click += btnDesign_Click; // // txtDesignH // @@ -325,15 +316,25 @@ layoutControlItem7.TextSize = new Size(0, 0); layoutControlItem7.TextVisible = false; // // pumpParallelChart1 // pumpParallelChart1.Dock = DockStyle.Fill; pumpParallelChart1.LineNameVisible = true; pumpParallelChart1.LineVisible = false; pumpParallelChart1.Location = new Point(0, 0); pumpParallelChart1.Margin = new Padding(2, 2, 2, 2); pumpParallelChart1.Name = "pumpParallelChart1"; pumpParallelChart1.Size = new Size(640, 663); pumpParallelChart1.TabIndex = 2; // // SimulationPumpParallelCtrl // AutoScaleDimensions = new SizeF(7F, 14F); AutoScaleMode = AutoScaleMode.Font; Controls.Add(pictureEdit1); Controls.Add(pumpParallelChart1); Controls.Add(sidePanel1); Name = "SimulationPumpParallelCtrl"; Size = new Size(1105, 663); ((ISupportInitialize)pictureEdit1.Properties).EndInit(); sidePanel1.ResumeLayout(false); ((ISupportInitialize)layoutControl1).EndInit(); layoutControl1.ResumeLayout(false); @@ -356,8 +357,6 @@ } #endregion private PictureEdit pictureEdit1; private SidePanel sidePanel1; private DevExpress.XtraLayout.LayoutControl layoutControl1; private SimpleButton btnDesign; @@ -380,5 +379,6 @@ private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6; private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup5; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7; private Yw.WinFrmUI.Phart.PumpParallelChart pumpParallelChart1; } } WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.cs
@@ -9,6 +9,9 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Yw.Geometry; using Yw.Pump; using Yw.WinFrmUI.Phart; namespace HStation.WinFrmUI { @@ -19,12 +22,21 @@ InitializeComponent(); this.layoutControl1.SetupLayoutControl(); this.hydroPumpListExtendGridCtrl1.StateChangedEvent += HydroPumpListExtendGridCtrl1_StateChangedEvent; this.pumpParallelChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent; this.pumpParallelChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent; this.pumpParallelChart1.ParallelStatusChangedEvent += PumpParallelChart1_ParallelStatusChangedEvent; } /// <summary> /// 保存事件 /// </summary> public event Action<List<SimulationPumpParallelSaveItemViewModel>> SaveEvent; /// <summary> /// 并联状态改变事件 /// </summary> public event Action<bool, string> ParallelStatusChangedEvent; /// <summary> /// 绑定列表 @@ -32,12 +44,16 @@ public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo) { this.hydroPumpListExtendGridCtrl1.SetBindingData(hydroInfo); var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList(); var allVmList = CreateParallelViewModels(allStateList); this.pumpParallelChart1.SetBindingData(allVmList); } //状态改变事件 private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List<HydroPumpListItemExtendViewModel> allPumpStateList) private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List<HydroPumpListItemExtendViewModel> allStateList) { var allVmList = CreateParallelViewModels(allStateList); this.pumpParallelChart1.SetBindingData(allVmList); } //保存 @@ -62,6 +78,145 @@ this.SaveEvent?.Invoke(allSaveList); } //创建 private List<PumpParallelViewModel> CreateParallelViewModels(List<HydroPumpListItemExtendViewModel> allStateList) { var allRunList = allStateList?.Where(x => x.RunStatus).ToList(); if (allRunList == null || allRunList.Count < 1) { return default; } var vmList = new List<PumpParallelViewModel>(); foreach (var item in allRunList) { var vm = new PumpParallelViewModel(); vm.Id = item.Code; vm.Name = item.Name; vm.RatedQ = item.Vmo.RatedQ.HasValue ? item.Vmo.RatedQ.Value : 0; vm.RatedH = item.Vmo.RatedH.HasValue ? item.Vmo.RatedH.Value : 0; vm.RatedP = item.Vmo.RatedP; vm.RatedN = item.Vmo.RatedN.HasValue ? item.Vmo.RatedN.Value : 0; vm.RatedHz = item.Vmo.RatedHz; vm.CurrentHz = item.Hz; vm.CurrentN = Math.Round(item.Hz / item.Vmo.RatedHz * vm.RatedN, 1); vm.CurrentColor = item.Color; double extend = 1; var curveqh = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQH); if (curveqh != null) { var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qh_pts != null && qh_pts.Count > 3) { vm.CurveQH = new CubicSpline2d(qh_pts); var qh_current_pts = qh_pts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz); vm.CurrentCurveQH = new CubicSpline2d(qh_current_pts); if (item.Extend > 100) { vm.CurrentExtendFlow = vm.CurrentCurveQH.MaxX; extend = item.Extend / 100; var qh_current_extend_pts = vm.CurrentCurveQH.GetPointListByXRatioRange(1, extend, 20); vm.CurrentCurveQH = new CubicSpline2d(qh_current_extend_pts); } } } var curveqp = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQP); if (curveqp != null) { var qppts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qppts != null && qppts.Count > 3) { vm.CurveQP = new CubicSpline2d(qppts); var sqppts = qppts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz); vm.CurrentCurveQP = new CubicSpline2d(sqppts); if (extend > 1) { var qp_current_extend_pts = vm.CurrentCurveQP.GetPointListByXRatioRange(1, extend, 20); vm.CurrentCurveQP = new CubicSpline2d(qp_current_extend_pts); } } } var curveqe = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQE); if (curveqe != null) { var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qepts != null && qepts.Count > 3) { vm.CurveQE = new CubicSpline2d(qepts); var sqepts = qepts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz); vm.CurrentCurveQE = new CubicSpline2d(sqepts); if (extend > 1) { var qe_current_extend_pts = vm.CurrentCurveQE.GetPointListByXRatioRange(1, extend, 20); vm.CurrentCurveQE = new CubicSpline2d(qe_current_extend_pts); } } } vmList.Add(vm); } return vmList; } //设计点改变 private void PumpParallelChart1_DesignPointChangedEvent(List<PumpDesignPointViewModel> obj) { var vmList = obj?.Select(x => new HydroPumpDesignPointViewModel() { Code = x.Id, Name = x.Name, DesignQ = Math.Round(x.Q, 1), DesignH = Math.Round(x.H, 2), DesignP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null, DesignE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null, }).ToList(); this.hydroPumpDesignPointListGridCtrl1.SetBindingData(vmList); } //查询点改变 private void PumpParallelChart1_QueryPointChangedEvent(List<PumpQueryPointViewModel> obj) { var vmList = obj?.Select(x => new HydroPumpQueryPointViewModel() { Code = x.Id, Name = x.Name, QueryQ = Math.Round(x.Q, 1), QueryH = Math.Round(x.H, 2), QueryP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null, QueryE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null, }).ToList(); this.hydroPumpQueryPointListGridCtrl1.SetBindingData(vmList); } //并联状态改变事件 private void PumpParallelChart1_ParallelStatusChangedEvent(bool status, string msg) { this.ParallelStatusChangedEvent?.Invoke(status, msg); } //设计点 private void btnDesign_Click(object sender, EventArgs e) { var qtext = this.txtDesignQ.Text.Trim(); if (string.IsNullOrEmpty(qtext)) { TipFormHelper.ShowWarn("请输入设计点流量!"); return; } var htext = this.txtDesignH.Text.Trim(); if (string.IsNullOrEmpty(htext)) { TipFormHelper.ShowWarn("请输入设计点扬程!"); return; } var q = double.Parse(qtext); var h = double.Parse(htext); this.pumpParallelChart1.SetDesignPoint(q, h); } } } WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.Designer.cs
@@ -31,21 +31,24 @@ ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl(); ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage(); ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); simulationPumpParallelCtrl1 = new HStation.WinFrmUI.SimulationPumpParallelCtrl(); simulationPumpParallelCtrl1 = new SimulationPumpParallelCtrl(); ribbonStatusBar1 = new DevExpress.XtraBars.Ribbon.RibbonStatusBar(); barStaticStatus = new DevExpress.XtraBars.BarStaticItem(); ((ISupportInitialize)ribbon).BeginInit(); SuspendLayout(); // // ribbon // ribbon.ExpandCollapseItem.Id = 0; ribbon.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbon.ExpandCollapseItem }); ribbon.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbon.ExpandCollapseItem, barStaticStatus }); ribbon.Location = new Point(0, 0); ribbon.MaxItemId = 1; ribbon.MaxItemId = 2; ribbon.Name = "ribbon"; ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 }); ribbon.RibbonCaptionAlignment = DevExpress.XtraBars.Ribbon.RibbonCaptionAlignment.Left; ribbon.ShowDisplayOptionsMenuButton = DevExpress.Utils.DefaultBoolean.False; ribbon.Size = new Size(996, 32); ribbon.Size = new Size(1051, 32); ribbon.StatusBar = ribbonStatusBar1; // // ribbonPage1 // @@ -63,14 +66,29 @@ simulationPumpParallelCtrl1.Dock = DockStyle.Fill; simulationPumpParallelCtrl1.Location = new Point(0, 32); simulationPumpParallelCtrl1.Name = "simulationPumpParallelCtrl1"; simulationPumpParallelCtrl1.Size = new Size(996, 601); simulationPumpParallelCtrl1.Size = new Size(1051, 603); simulationPumpParallelCtrl1.TabIndex = 1; // // ribbonStatusBar1 // ribbonStatusBar1.ItemLinks.Add(barStaticStatus); ribbonStatusBar1.Location = new Point(0, 611); ribbonStatusBar1.Name = "ribbonStatusBar1"; ribbonStatusBar1.Ribbon = ribbon; ribbonStatusBar1.Size = new Size(1051, 24); // // barStaticStatus // barStaticStatus.Alignment = DevExpress.XtraBars.BarItemLinkAlignment.Right; barStaticStatus.Id = 1; barStaticStatus.Name = "barStaticStatus"; // // SimulationPumpParallelDlg // AutoScaleDimensions = new SizeF(7F, 14F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(996, 633); ClientSize = new Size(1051, 635); Controls.Add(ribbonStatusBar1); Controls.Add(simulationPumpParallelCtrl1); Controls.Add(ribbon); FormBorderStyle = FormBorderStyle.SizableToolWindow; @@ -78,6 +96,7 @@ Ribbon = ribbon; RibbonVisibility = DevExpress.XtraBars.Ribbon.RibbonVisibility.Hidden; StartPosition = FormStartPosition.CenterParent; StatusBar = ribbonStatusBar1; Text = "并联模拟"; ((ISupportInitialize)ribbon).EndInit(); ResumeLayout(false); @@ -90,5 +109,7 @@ private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1; private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1; private HStation.WinFrmUI.SimulationPumpParallelCtrl simulationPumpParallelCtrl1; private DevExpress.XtraBars.Ribbon.RibbonStatusBar ribbonStatusBar1; private DevExpress.XtraBars.BarStaticItem barStaticStatus; } } WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.cs
@@ -6,9 +6,34 @@ { InitializeComponent(); this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon; this.simulationPumpParallelCtrl1.SaveEvent += SimulationPumpParallelCtrl1_SaveEvent; this.simulationPumpParallelCtrl1.ParallelStatusChangedEvent += SimulationPumpParallelCtrl1_ParallelStatusChangedEvent; } /// <summary> /// 保存事件 /// </summary> public event Action<List<SimulationPumpParallelSaveItemViewModel>> SaveEvent; /// <summary> /// 绑定数据 /// </summary> public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo) { this.simulationPumpParallelCtrl1.SetBindingData(hydroInfo); } //保存 private void SimulationPumpParallelCtrl1_SaveEvent(List<SimulationPumpParallelSaveItemViewModel> obj) { this.SaveEvent?.Invoke(obj); } //并联状态发生改变 private void SimulationPumpParallelCtrl1_ParallelStatusChangedEvent(bool status, string msg) { this.barStaticStatus.Caption = msg; } } WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs
@@ -33,15 +33,15 @@ /// </summary> public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo) { SetBindingData(hydroInfo?.Pumps); SetBindingData(hydroInfo?.Pumps, hydroInfo); } /// <summary> /// /// </summary> public void SetBindingData(List<Yw.Model.HydroPumpInfo> allPumpList) public void SetBindingData(List<Yw.Model.HydroPumpInfo> allPumpList, Yw.Model.HydroModelInfo hydroInfo) { var list = allPumpList?.Select(x => new HydroPumpListItemExtendViewModel(x, allPumpList)).ToList(); var list = allPumpList?.Select(x => new HydroPumpListItemExtendViewModel(x, allPumpList, hydroInfo)).ToList(); SetBindingData(list); } WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs
@@ -8,7 +8,12 @@ /// <summary> /// /// </summary> public HydroPumpListItemExtendViewModel(Yw.Model.HydroPumpInfo rhs, List<Yw.Model.HydroPumpInfo> allPumpList) public HydroPumpListItemExtendViewModel ( Yw.Model.HydroPumpInfo rhs, List<Yw.Model.HydroPumpInfo> allPumpList, Yw.Model.HydroModelInfo hydroInfo ) { this.Code = rhs.Code; this.Name = rhs.Name; @@ -21,6 +26,7 @@ this.Extend = 100; this.RunStatus = rhs.LinkStatus == Yw.Hydro.LinkStatus.Open; this.Vmo = rhs; this.HydroInfo = hydroInfo; } /// <summary> @@ -64,6 +70,11 @@ /// </summary> public Yw.Model.HydroPumpInfo Vmo { get; set; } /// <summary> /// /// </summary> public Yw.Model.HydroModelInfo HydroInfo { get; set; } } }