global using Yw.EPAnet; using DevExpress.Xpo.Helpers; using HStation.WinFrmUI.Xhs; using HStation.WinFrmUI.Xhs.Core; using NPOI.SS.Formula.Functions; using Yw.WinFrmUI.HydroL2d; using Yw.WinFrmUI.HydroL3d; namespace HStation.WinFrmUI { public partial class XhsProjectSimulationCorePage : DocumentPage { public XhsProjectSimulationCorePage() { InitializeComponent(); this.PageTitle.Caption = "水力模拟"; this.PageTitle.HeaderSvgImage = this.svgImg32[0]; this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; } private HStation.Vmo.XhsProjectVmo _project = null;//项目 private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;//项目站 private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息 private Yw.Model.HydroParterInfo _parter = null; private Yw.EPAnet.CheckResult _checkResult = null; private Yw.EPAnet.CalcuResult _calcuResult = null; /// /// 绑定数据 /// public async Task SetBindingData ( HStation.Vmo.XhsProjectVmo project, HStation.Vmo.XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo ) { if (project == null) { return; } _project = project; _projectSite = projectSite; _hydroInfo = hydroInfo; if (_projectSite == null) { _projectSite = await BLLFactory.Instance.GetDefaultByProjectID(_project.ID); } if (_hydroInfo == null) { var hydroRelation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); _hydroInfo = await BLLFactory.Instance.GetByID(hydroRelation.ModelID); } } /// /// 初始化数据 /// public override async void InitialDataSource() { base.InitialDataSource(); if (_project == null) { return; } this.PageTitle.Caption = $"{_project.Name}\r\n水力模拟"; await this.xhsProjectSimulationBimfaceCtrl1.SetBindingData(_project, _projectSite, () => _hydroInfo); this.xhsProjectSimulationQ3dCtrl1.SetBindingData(_hydroInfo); this.xhsProjectSimulationL3dCtrl1.SetBindingData(_hydroInfo); this.xhsProjectSimulationPropertyCtrl1.SetBindingData(() => _hydroInfo); } //水力计算 private async void barBtnHydroCalcu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); _calcuResult = netWork.Calcu(); if (_calcuResult.Succeed) { ShowProperty(); TipFormHelper.ShowSucceed("计算成功!"); } else { this.xhsProjectSimulationHydroCalcuFailedCtrl1.SetBindingData(_calcuResult.FailedList); this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlHydroCalcu.Height = 350; } await this.xhsProjectSimulationBimfaceCtrl1.ShowCalcuCustomLabels(_calcuResult); } //水力构件列表 private void barBtnHydroParterList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; // this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.hydroParterListCtrl1.SetBindingData(_hydroInfo); this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlHydroParterList.Height = 350; } //导出水力INP文件 private void barBtnHydroExportInp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } var fileName = Yw.WinFrmUI.FileDialogHelper.SaveInp("导出Inp文件"); if (string.IsNullOrEmpty(fileName)) { return; } var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); var result = netWork.ToInpString(); File.WriteAllText(fileName, result); TipFormHelper.ShowSucceed("导出成功"); } //水力构件明细面板点击事件 private async void hydroParterListCtrl1_HydroClickEvent(Yw.Model.HydroParterInfo parter) { var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.ID == parter.ID); await this.xhsProjectSimulationBimfaceCtrl1.SetSelectedComponents(new List() { _parter.Code }); ShowProperty(); } #region Bimface //bimface 加载完成事件 private async void xhsProjectSimulationBimfaceCtrl1_LoadCompletedEvent() { if (_hydroInfo == null) { return; } var elementIds = new List(); var pumps = _hydroInfo.Pumps?.Where(x => x.LinkStatus == Yw.Hydro.PumpStatus.Open).ToList(); pumps?.ForEach(x => elementIds.Add(x.Code)); var valves = _hydroInfo.Valves?.Where(x => x.LinkStatus == Yw.Hydro.ValveStatus.Open).ToList(); valves?.ForEach(x => elementIds.Add(x.Code)); await this.xhsProjectSimulationBimfaceCtrl1.SetOpenComponentsColor(elementIds); } //bimface 水力点击事件 private void xhsProjectSimulationBimfaceCtrl1_HydroClickEvent(Yw.Model.HydroParterInfo obj) { if (_hydroInfo == null) { return; } _parter = obj; ShowProperty(); SetBimfaceLinkColor(); } //设置Bimface连接颜色 private async void SetBimfaceLinkColor() { if (_hydroInfo == null) { return; } List elementIds = null; if (_parter != null) { if (_parter is Yw.Model.HydroLinkInfo linker) { elementIds = new List() { linker.StartCode, linker.EndCode }; } } await this.xhsProjectSimulationBimfaceCtrl1.SetLinkComponentsColor(elementIds); } #endregion Bimface #region 属性面板 #endregion #region 自动匹配 //自动匹配 private void barBtnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; var input = AssetsMatchingParasHelper.Create(_hydroInfo); this.xhsProjectSimulationMatchingListCtrl1.SetBindingData(input); this.xhsProjectSimulationMatchingListCtrl1.ApplyMatchingEvent += (output) => { return AssetsMatchingParasHelper.Apply(_hydroInfo, output); }; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlMatchingList.Height = 350; } #endregion #region 未匹配列表 //未匹配列表 private void barBtnUnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.xhsProjectSimulationUnMatchingListCtrl1.SetBindingData(_hydroInfo); this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlUnMatchingList.Height = 350; } //未匹配列表点击事件 private async void xhsProjectSimulationUnMatchingListCtrl1_HydroClickEvent(Yw.Model.HydroParterInfo parter) { var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.ID == parter.ID); var elementIds = new List() { _parter.Code }; await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds); ShowProperty(); SetBimfaceLinkColor(); } //未匹配列表查看模型 private async void xhsProjectSimulationUnMatchingListCtrl1_ViewModelEvent(List parters) { var codes = parters?.Select(x => x.Code).Distinct().ToList(); await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(codes); _parter = null; ShowProperty(); } #endregion #region 一键显隐 //显隐编码列表 private List _fastShowHideCodeList = null; //触发一键显隐 private async void barBtnShowHide_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } if (_hydroInfo.Decorators == null || _hydroInfo.Decorators.Count < 1) { return; } if (_fastShowHideCodeList == null) { _fastShowHideCodeList = _hydroInfo.Decorators.Select(x => x.Code).ToList(); await this.xhsProjectSimulationBimfaceCtrl1.HideComponents(_fastShowHideCodeList); } else { await this.xhsProjectSimulationBimfaceCtrl1.ShowComponents(_fastShowHideCodeList); _fastShowHideCodeList = null; } } #endregion #region 水力校验 //水力验证 private void barBtnHydroCheck_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); _checkResult = netWork.Check(); if (_checkResult.Succeed) { TipFormHelper.ShowSucceed("校验通过!"); return; } this.xhsProjectSimulationHydroCheckFailedCtrl1.SetBindingData(_checkResult.FailedList); this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlHydroCheck.Height = 350; } //水力校验点击 private async void xhsProjectSimulationHydroCheckFailedCtrl1_HydroClickEvent(string code) { if (_hydroInfo == null) { return; } var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.Code == code); var elementIds = new List() { _parter.Code }; await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds); ShowProperty(); } #endregion #region 保存水力信息 //保存 private async void barBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } var id = await BLLFactory.Instance.Save(_hydroInfo); if (id < 1) { TipFormHelper.ShowError("保存失败!"); return; } _hydroInfo = await BLLFactory.Instance.GetByID(id); TipFormHelper.ShowSucceed("保存成功!"); } #endregion #region 业务方法 //显示属性 private void ShowProperty() { if (_hydroInfo == null) { return; } if (_parter == null) { this.xhsProjectSimulationPropertyCtrl1.SelectParter(null); return; } this.xhsProjectSimulationPropertyCtrl1.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) { IHydroCalcuProperty calcuProperty = null; if (calcuParter is Yw.EPAnet.CalcuNode calcuNode) { var calcuNodeProperty = new Yw.WinFrmUI.HydroCalcuNodeProperty(); calcuNodeProperty.ID = _parter.ID; 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.HydroCalcuLinkProperty(); calcuLinkProperty.ID = _parter.ID; calcuLinkProperty.CalcuHeadLoss = calcuLink.Headloss; calcuLinkProperty.CalcuFlow = calcuLink.Flow; calcuLinkProperty.CalcuVelocity = calcuLink.Velocity; calcuProperty = calcuLinkProperty; } if (calcuProperty != null) { this.xhsProjectSimulationPropertyCtrl1.UpdateCalcuProperty(calcuProperty); } } } } } #endregion 业务方法 #region 配置 //显示RadialMenu private void barBtnSetList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.rmSet.ShowPopup(MousePosition, true); } #endregion } }