From 1c82571504174fba279276a80ea8dac28a674c1e Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期四, 24 十月 2024 12:30:45 +0800 Subject: [PATCH] 优化了泵计算属性和计算结果缓存问题 --- WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs | 246 +++++++++++++++++++++++++++++-------------------- 1 files changed, 145 insertions(+), 101 deletions(-) diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs index dd92fc4..6d27250 100644 --- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs +++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs @@ -1,7 +1,9 @@ 锘縢lobal using Yw.EPAnet; using DevExpress.Mvvm.Native; using DevExpress.XtraRichEdit.Layout; +using DevExpress.XtraSpreadsheet.Commands; using HStation.WinFrmUI.PhartRelation; +using Yw.Pump; using Yw.WinFrmUI.Bimface; using Yw.WinFrmUI.Hydro; @@ -245,50 +247,22 @@ { ShowPropertyCtrl(); } - if (_parter == null) { _propertyCtrl?.SelectParter(null); return; } - _propertyCtrl?.SelectParter(_parter.Code); - if (_calcuResult != null) - { - if (_calcuResult.Succeed) - { - var allCalcuParterList = _calcuResult.GetParterList(); - var calcuParter = allCalcuParterList.Find(x => x.Id == _parter.Code); - if (calcuParter != null) - { - IHydroCalcuResult calcuProperty = null; - if (calcuParter is Yw.EPAnet.CalcuNode calcuNode) - { - var calcuNodeProperty = new Yw.WinFrmUI.HydroCalcuNodeResult(); - calcuNodeProperty.Code = _parter.Code; - calcuNodeProperty.CalcuPress = calcuNode.Press; - calcuNodeProperty.CalcuDemand = calcuNode.Demand; - calcuNodeProperty.CalcuHead = calcuNode.Head; - calcuProperty = calcuNodeProperty; - } - else if (calcuParter is Yw.EPAnet.CalcuLink calcuLink) - { - var calcuLinkProperty = new Yw.WinFrmUI.HydroCalcuLinkResult(); - calcuLinkProperty.Code = _parter.Code; - calcuLinkProperty.CalcuHeadLoss = calcuLink.Headloss; - calcuLinkProperty.CalcuFlow = calcuLink.Flow; - calcuLinkProperty.CalcuVelocity = calcuLink.Velocity; - calcuProperty = calcuLinkProperty; - } - if (calcuProperty != null) - { - _propertyCtrl?.UpdateCalcuProperty(calcuProperty); - } - } + var allCalcuResultList = GetAllCalcuResultList(); + if (allCalcuResultList != null && allCalcuResultList.Count > 0) + { + var calcuResult = allCalcuResultList.Find(x => x.Code == _parter.Code); + if (calcuResult != null) + { + _propertyCtrl?.UpdateCalcuProperty(calcuResult); } } - } #endregion @@ -970,6 +944,68 @@ #region 姘村姏璁$畻 + + #region 鍓嶆彁鏉′欢 + + //鏄剧ず璁$畻鍓嶆彁鏉′欢绐椾綋 + private async void ShowCalcuPrefixDlg() + { + if (_hydroInfo == null) + { + return; + } + var dlg = new SetHydroCalcuPrefixDlg(); + dlg.SetBindingData(_hydroInfo); + dlg.HydroViewEvent += async (parter) => + { + _parter = parter; + if (_parter != null) + { + await _bimfaceCtrl?.ZoomAndSelectComponents(new List<string>() { _parter.Code }); + } + ShowProperty(); + }; + dlg.HydroCalcuEvent += async () => + { + if (_hydroInfo == null) + { + return; + } + + //鏍¢獙 + _checkResult = _hydroInfo.Check(); + if (!_checkResult.Succeed) + { + ShowCheckCtrl(); + TipFormHelper.ShowWarn("鏍¢獙澶辫触锛岃妫�鏌ュ悗閲嶈瘯"); + return; + } + + var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); + _calcuResult = netWork.Calcu(); + if (_calcuResult.Succeed) + { + GetAllCalcuResultList(false); + await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult); + TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�"); + } + else + { + ShowCalcuFailedCtrl(); + TipFormHelper.ShowError("璁$畻澶辫触锛�"); + } + + }; + if (dlg.ShowDialog() == DialogResult.Cancel) + { + await _bimfaceCtrl?.ClearLogicCalcuCustomLabels(); + } + } + + #endregion + + #region 璁$畻澶辫触 + //璁$畻澶辫触鎺т欢 private HydroCalcuFailedCtrl _calcuFailedCtrl = null; @@ -1008,8 +1044,16 @@ this.docPnlBottom.Height = 350; } + #endregion + + #region 璁$畻缁撴灉 + + //鎵�鏈夎绠楃粨鏋滃垪琛� + private List<IHydroCalcuResult> _allCalcuResultList = null; + //鑾峰彇璁$畻缁撴灉 - private List<IHydroCalcuResult> GetAllCalcuResultList() + //true 浣跨敤缂撳瓨锛宖alse 涓嶄娇鐢ㄧ紦瀛� + private List<IHydroCalcuResult> GetAllCalcuResultList(bool isCache = true) { if (_hydroInfo == null) { @@ -1023,7 +1067,12 @@ { return default; } - var list = new List<IHydroCalcuResult>(); + if (isCache) + { + return _allCalcuResultList; + } + + _allCalcuResultList = new List<IHydroCalcuResult>(); var allNodeList = _hydroInfo.GetAllNodes(); if (allNodeList != null && allNodeList.Count > 0) { @@ -1042,91 +1091,86 @@ CalcuHead = calcuNode.Head, CalcuDemand = calcuNode.Demand }; - list.Add(calcuResult); + _allCalcuResultList.Add(calcuResult); } } } } - var allListList = _hydroInfo.GetAllLinks(); - if (allListList != null && allListList.Count > 0) + var allLinkList = _hydroInfo.GetAllLinks(); + if (allLinkList != null && allLinkList.Count > 0) { var allCalcuLinkList = _calcuResult.LinkList; if (allCalcuLinkList != null && allCalcuLinkList.Count > 0) { - foreach (var link in allListList) + foreach (var link in allLinkList) { var calcuLink = allCalcuLinkList.Find(x => x.Id == link.Code); if (calcuLink != null) { - var calcuResult = new HydroCalcuLinkResult() + if (link is Yw.Model.HydroPumpInfo pump) { - Code = link.Code, - CalcuFlow = calcuLink.Flow, - CalcuVelocity = calcuLink.Velocity, - CalcuHeadLoss = calcuLink.Headloss - }; - list.Add(calcuResult); + var calcuResult = new HydroCalcuPumpResult() + { + Code = link.Code, + CalcuFlow = calcuLink.Flow, + CalcuVelocity = calcuLink.Velocity, + CalcuHeadLoss = calcuLink.Headloss, + CalcuQ = calcuLink.Flow + }; + if (calcuResult.CalcuQ > 0) + { + var startCalcuNode = _calcuResult.NodeList?.Find(x => x.Id == link.StartCode); + var endCalcuNode = _calcuResult.NodeList?.Find(x => x.Id == link.EndCode); + if (startCalcuNode != null && endCalcuNode != null) + { + calcuResult.CalcuH = Math.Abs(startCalcuNode.Press - endCalcuNode.Press); + } + + if (pump.RatedN.HasValue) + { + var curveqp = _hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP); + if (curveqp != null) + { + if (curveqp.CurveData != null && curveqp.CurveData.Count > 3) + { + var point2dList = curveqp.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); + var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN.Value, pump.RatedN.Value * pump.SpeedRatio); + var pumpCurveQp = new Yw.Pump.CurveQP(eFeatType.Cubic, point2dSimularList); + calcuResult.CalcuP = pumpCurveQp.FeatCurve.GetPointY(calcuResult.CalcuQ.Value); + } + } + } + if (calcuResult.CalcuH.HasValue && calcuResult.CalcuP.HasValue) + { + calcuResult.CalcuE = Yw.Pump.CalculationHelper.CalcuE(calcuResult.CalcuQ.Value, calcuResult.CalcuH.Value, calcuResult.CalcuP.Value); + } + } + + + _allCalcuResultList.Add(calcuResult); + } + else + { + var calcuResult = new HydroCalcuLinkResult() + { + Code = link.Code, + CalcuFlow = calcuLink.Flow, + CalcuVelocity = calcuLink.Velocity, + CalcuHeadLoss = calcuLink.Headloss + }; + _allCalcuResultList.Add(calcuResult); + } + } } } } - return list; + return _allCalcuResultList; } - //鏄剧ず璁$畻鍓嶆彁绐椾綋 - private async void ShowCalcuPrefixDlg() - { - if (_hydroInfo == null) - { - return; - } - var dlg = new SetHydroCalcuPrefixDlg(); - dlg.SetBindingData(_hydroInfo); - dlg.HydroViewEvent += async (parter) => - { - _parter = parter; - if (_parter != null) - { - await _bimfaceCtrl?.ZoomAndSelectComponents(new List<string>() { _parter.Code }); - } - ShowProperty(); - }; - dlg.HydroCalcuEvent += async () => - { - if (_hydroInfo == null) - { - return; - } - - //鏍¢獙 - _checkResult = _hydroInfo.Check(); - if (!_checkResult.Succeed) - { - ShowCheckCtrl(); - TipFormHelper.ShowWarn("鏍¢獙澶辫触锛岃妫�鏌ュ悗閲嶈瘯"); - return; - } - - var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); - _calcuResult = netWork.Calcu(); - if (_calcuResult.Succeed) - { - await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult); - TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�"); - } - else - { - ShowCalcuFailedCtrl(); - TipFormHelper.ShowError("璁$畻澶辫触锛�"); - } - }; - if (dlg.ShowDialog() == DialogResult.Cancel) - { - await _bimfaceCtrl?.ClearLogicCalcuCustomLabels(); - } - } + #endregion //姘村姏璁$畻 private void barBtnHydroCalcu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) -- Gitblit v1.9.3