global using Yw.EPAnet; using DevExpress.CodeParser; using DevExpress.Diagram.Core.Native; using DevExpress.Mvvm.Native; using DevExpress.Office.Utils; using DevExpress.PivotGrid.QueryMode.TuplesTree; using DevExpress.Utils.Extensions; using DevExpress.Xpo.Helpers; using DevExpress.XtraBars.Ribbon; using DevExpress.XtraRichEdit.Layout; using DevExpress.XtraSpreadsheet.Commands; using HStation.WinFrmUI.PhartRelation; using NetTaste; using NPOI.SS.Formula.Functions; using System.Diagnostics; using System.Windows.Media; using System.Windows.Media.Media3D; using Yw.Hydro; using Yw.Model; using Yw.Pump; using Yw.Vmo; using Yw.WinFrmUI.Bimface; using Yw.WinFrmUI.Hydro; namespace HStation.WinFrmUI { public partial class XhsProjectSimulationCorePage : DocumentPage { public XhsProjectSimulationCorePage() { InitializeComponent(); this.PageTitle.Caption = "水力模拟"; this.PageTitle.HeaderSvgImage = this.svgImg32[0]; this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; RegistBulkSetEvents(); } private HStation.Vmo.XhsProjectVmo _project = null;//项目 private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;//项目站 private Yw.Model.HydroModelInfo _hydroInfo = 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 void InitialDataSource() { base.InitialDataSource(); if (_project == null) { return; } this.PageTitle.Caption = $"{_project.Name}\r\n水力模拟"; ShowBimfaceCtrl(); ShowQ3dCtrl(); ShowPropertyCtrl(); } private void InitialUI() { InitialCurrentWorking(); } #region BIM控件 //bimface控件 private XhsProjectSimulationBimfaceCtrl _bimfaceCtrl = null; //获取 bimface 控件 private async Task GetBimfaceCtrl() { if (_bimfaceCtrl == null) { _bimfaceCtrl = new XhsProjectSimulationBimfaceCtrl(); _bimfaceCtrl.Dock = DockStyle.Fill; await _bimfaceCtrl.InitialData(_project, _projectSite); _bimfaceCtrl.LoadCompletedEvent += () => {//view加载完成事件 if (_hydroInfo == null) { return; } InitialUI(); }; _bimfaceCtrl.HydroMouseLeftClickEvent += (obj) => {//鼠标左键点击事件 if (_hydroInfo == null) { return; } //_selectedVisual = obj; ShowSelectedProperty(); }; } return _bimfaceCtrl; } //显示 bimface 控件 private async void ShowBimfaceCtrl() { var bimfaceCtrl = await GetBimfaceCtrl(); this.tabPageBimface.Controls.Clear(); this.tabPageBimface.Controls.Add(bimfaceCtrl); } private void SelectBimfaceParter() { } #endregion #region Q3d控件 //Q3d 控件 private XhsProjectSimulationQ3dCtrl _q3dCtrl = null; //获取 Q3d 控件 private XhsProjectSimulationQ3dCtrl GetQ3dCtrl() { if (_q3dCtrl == null) { _q3dCtrl = new XhsProjectSimulationQ3dCtrl(); _q3dCtrl.Dock = DockStyle.Fill; _q3dCtrl.InitialData(() => _hydroInfo); _q3dCtrl.SelectedPartersChangedEvent += (obj) => { if (_hydroInfo == null) { return; } var allParterList = _hydroInfo.GetAllVisuals(); _selectedVisual = allParterList?.Find(x => x.Code == obj?.FirstOrDefault()); ShowSelectedProperty(); }; } return _q3dCtrl; } //显示 Q3d 控件 private void ShowQ3dCtrl() { var q3dCtrl = GetQ3dCtrl(); this.tabPageQ3d.Controls.Clear(); this.tabPageQ3d.Controls.Add(q3dCtrl); } #endregion #region 可见列表 //所有可视字典 private Dictionary _allVisualDict = null; //获取可视字典 private Dictionary GetVisualDict() { if (_hydroInfo == null) { return default; } if (_allVisualDict == null) { _allVisualDict = new Dictionary(); var allVisualList = _hydroInfo.GetAllVisuals(); allVisualList?.ForEach(x => _allVisualDict.Add(x.Code, x)); } return _allVisualDict; } //获取可视列表 private List GetVisualList() { var allVisualDict = GetVisualDict(); return allVisualDict?.Values.ToList(); } //获取节点列表 private List GetNodeList() { if (_hydroInfo == null) { return default; } return _hydroInfo.GetAllNodes(); } //获取管段列表 private List GetLinkList() { if (_hydroInfo == null) { return default; } return _hydroInfo.GetAllLinks(); } //获取可视构件 private HydroVisualInfo GetVisual(string code) { var allVisualDict = GetVisualDict(); if (allVisualDict == null) { return default; } if (allVisualDict.ContainsKey(code)) { return allVisualDict[code]; } return default; } #endregion #region 计算结果 //计算结果 private HydroCalcuResult _calcuResult = null; //获取计算结果 private HydroCalcuResult GetCalcuResult(string calcuMode, bool needCalcuAgain = false) { if (_hydroInfo == null) { return default; } if (needCalcuAgain) { _calcuResult = _hydroInfo.Calcu(calcuMode); } if (_calcuResult == null) { _calcuResult = _hydroInfo.Calcu(calcuMode); } return _calcuResult; } //获取可视组件计算结果列表 private List GetCalcuVisualResultList(string calcuMode, bool needCalcuAgain = false) { var calcuResult = GetCalcuResult(calcuMode, needCalcuAgain); if (calcuResult == null) { return default; } if (!calcuResult.Succeed) { return default; } return calcuResult.GetVisualList(); } //获取节点计算结果列表 private List GetCalcuNodeResultList(string calcuMode, bool needCalcuAgain = false) { var calcuResult = GetCalcuResult(calcuMode, needCalcuAgain); if (calcuResult == null) { return default; } if (!calcuResult.Succeed) { return default; } return calcuResult.NodeList; } //获取管段计算结果列表 private List GetCalcuLinkResultList(string calcuMode, bool needCalcuAgain = false) { var calcuResult = GetCalcuResult(calcuMode, needCalcuAgain); if (calcuResult == null) { return default; } if (!calcuResult.Succeed) { return default; } return calcuResult.LinkList; } //所有可见计算字典 private Dictionary _allCalcuVisualDict = null; //获取可见计算字典 private Dictionary GetCalcuVisualDict(string calcuMode, bool needCalcuAgain = false) { if (_hydroInfo == null) { return default; } var allCalcuVisualResultList = GetCalcuVisualResultList(calcuMode, needCalcuAgain); if (needCalcuAgain) { _allCalcuVisualDict = new Dictionary(); allCalcuVisualResultList?.ForEach(x => _allCalcuVisualDict.Add(x.Code, x)); } if (_allCalcuVisualDict == null) { _allCalcuVisualDict = new Dictionary(); allCalcuVisualResultList?.ForEach(x => _allCalcuVisualDict.Add(x.Code, x)); } return _allCalcuVisualDict; } //获取可见计算结果 private HydroCalcuVisualResult GetCalcuVisualResult(string code, string calcuMode = Yw.EPAnet.CalcuMode.MinorLoss, bool needCalcuAgain = false) { var allCalcuVisualDict = GetCalcuVisualDict(calcuMode, needCalcuAgain); if (allCalcuVisualDict == null || allCalcuVisualDict.Count < 1) { return default; } if (allCalcuVisualDict.ContainsKey(code)) { return allCalcuVisualDict[code]; } return default; } //获取可见计算结果 private HydroCalcuVisualResult GetCalcuVisualResult(Yw.Model.HydroVisualInfo visual, string calcuMode = Yw.EPAnet.CalcuMode.MinorLoss, bool needCalcuAgain = false) { return GetCalcuVisualResult(visual?.Code, calcuMode, needCalcuAgain); } #endregion #region 视图列表 //所有可见视图字典 private Dictionary _allVisualViewModelDict = null; //获取可见视图字典 private Dictionary GetVisualViewModelDict() { if (_hydroInfo == null) { return default; } if (_allVisualViewModelDict == null) { _allVisualViewModelDict = new Dictionary(); var allVisualDict = GetVisualDict(); if (allVisualDict != null && allVisualDict.Count > 0) { foreach (var visualKeyValue in allVisualDict) { var vm = HydroVisualViewModelBuilder.CreateVisualViewModel(visualKeyValue.Value, _hydroInfo); var calcuVisualResult = GetCalcuVisualResult(visualKeyValue.Key); if (calcuVisualResult != null) { vm.UpdateCalcuProperty(calcuVisualResult); } _allVisualViewModelDict.Add(visualKeyValue.Key, vm); } } } return _allVisualViewModelDict; } //获取可见视图列表 private List GetVisualViewModelList() { var allVisualViewModelDict = GetVisualViewModelDict(); return allVisualViewModelDict?.Values.ToList(); } //更新可见视图属性 private void UpdateVisualViewModelProperty() { var allVisualViewModelList = GetVisualViewModelList(); allVisualViewModelList?.ForEach(x => x.UpdateProperty()); } //更新可见视图属性 private void UpdateVisualViewModelProperty(string code) { var allVisualViewModelDict = GetVisualViewModelDict(); if (allVisualViewModelDict != null && allVisualViewModelDict.Count > 0) { if (allVisualViewModelDict.ContainsKey(code)) { allVisualViewModelDict[code].UpdateProperty(); } } } //更新可见视图属性 private void UpdateVisualViewModelProperty(List codes) { codes?.ForEach(x => UpdateVisualViewModelProperty(x)); } //更新可见视图属性 private void UpdateVisualViewModelProperty(List visualList) { visualList?.ForEach(x => UpdateVisualViewModelProperty(x.Code)); } //更新可见视图计算属性 private void UpdateVisualViewModelCalcuProperty() { var allVisualViewModelDict = GetVisualViewModelDict(); if (allVisualViewModelDict != null && allVisualViewModelDict.Count > 0) { foreach (var visualViewModelKeyValue in allVisualViewModelDict) { var calcuVisualResult = GetCalcuVisualResult(visualViewModelKeyValue.Key); if (calcuVisualResult != null) { visualViewModelKeyValue.Value.UpdateCalcuProperty(calcuVisualResult); } } } } //获取可见视图 private HydroVisualViewModel GetVisualViewModel(string code) { if (string.IsNullOrEmpty(code)) { return default; } var allVisualViewModelList = GetVisualViewModelList(); return allVisualViewModelList?.Find(x => x.Code == code); } //获取可见视图 private HydroVisualViewModel GetVisualViewModel(Yw.Model.HydroVisualInfo visual) { return GetVisualViewModel(visual?.Code); } #endregion #region 选择构件 //选择构件 private Yw.Model.HydroVisualInfo _selectedVisual = null; //选择构件 private Yw.Model.HydroVisualInfo SelectedVisual { get { return _selectedVisual; } set { _selectedVisual = value; this.barBtnSetMonitor.Enabled = _selectedVisual != null; } } #endregion #region 属性控件 //属性控件 private XhsProjectSimulationPropertyCtrl _propertyCtrl = null; //获取属性控件 private XhsProjectSimulationPropertyCtrl GetPropertyCtrl() { if (_propertyCtrl == null) { _propertyCtrl = new XhsProjectSimulationPropertyCtrl(); _propertyCtrl.Dock = DockStyle.Fill; _propertyCtrl.HydroViewEvent += (visual) => { if (visual == null) { return; } _bimfaceCtrl?.ZoomToComponent(visual.Code); }; _propertyCtrl.BlinkLinkNodeEvent += async (link, linkNodeCode) => { //强调连接节点 if (_hydroInfo == null) { return; } if (link == null) { return; } if (string.IsNullOrEmpty(linkNodeCode)) { return; } var linkNode = GetVisual(linkNodeCode); if (linkNode == null) { return; } var blinkCodes = new List(); if (linkNode.GetType() == typeof(HydroJunctionInfo)) { var allLinkList = GetLinkList(); if (allLinkList == null || allLinkList.Count < 1) { return; } var linkList = allLinkList.Where(x => (x.StartCode == linkNodeCode || x.EndCode == linkNodeCode) && x.Code != linkNodeCode).ToList(); if (linkList == null || linkList.Count < 1) { return; } blinkCodes.AddRange(linkList.Select(x => x.Code)); } else { blinkCodes.Add(linkNodeCode); } await _bimfaceCtrl?.ClearBlinkComponents(); await _bimfaceCtrl?.SetBlinkComponents(blinkCodes); await Task.Delay(5000); await _bimfaceCtrl?.ClearBlinkComponents(); }; _propertyCtrl.PropertyValueChangedEvent += (visual) => { if (visual == null) { return; } UpdateVisualListCtrl(); //ApplyGradingResultList(visual); }; _propertyCtrl.MarkPropertyValueChangedEvent += (visual) => { //标注属性发生改变 //判断当前是否有标注展示,若有则更新标注,最好是更新单个标注 //UpdateMark(visual); }; _propertyCtrl.GradingPropertyValueChangedEvent += (parter) => { //分级属性发生改变 //判断当前是否有分级展示,若有则更新分级,最好是更新单个分级 }; _propertyCtrl.FlowEffectPropertyValueChangedEvent += (visual) => { //流向属性发生改变 //判断流向是否加载,如果加载则更新流向,最好是更新单个流向 //UpdateFlowEffect(visual); }; } return _propertyCtrl; } //属性控件是否可见 private bool IsPropertyCtrlVisible { get { if (this.docPnlRight.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible) { if (this.controlContainerRight.Controls.Count > 0) { if (this.controlContainerRight.Controls[0] is XhsProjectSimulationPropertyCtrl) { return true; } } } return false; } } //显示属性控件 private void ShowPropertyCtrl() { if (IsPropertyCtrlVisible) { return; } var propertyCtrl = GetPropertyCtrl(); this.controlContainerRight.Controls.Clear(); this.controlContainerRight.Controls.Add(propertyCtrl); this.docPnlRight.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlRight.Text = "属性"; this.docPnlRight.Width = 300; } //显示选择属性 private void ShowSelectedProperty() { ShowSelectedProperty(_selectedVisual); } //显示选择属性 private void ShowSelectedProperty(Yw.Model.HydroVisualInfo visual) { if (_hydroInfo == null) { return; } ShowPropertyCtrl(); _selectedVisual = visual; if (_selectedVisual == null) { _propertyCtrl.SelectedObject = null; return; } _propertyCtrl.SelectedObject = GetVisualViewModel(_selectedVisual); } //更新选择属性 private void UpdateSelectedProperty() { if (!IsPropertyCtrlVisible) { return; } if (_selectedVisual == null) { return; } _propertyCtrl?.UpdateRows(); } //设置属性控件 private void SetPropertyCtrl(Yw.Model.HydroVisualInfo visual) { if (visual == null) { } } //更新属性控件 private void UpdatePropertyCtrl() { _propertyCtrl?.UpdateRows(); } #endregion #region 自动匹配 //获取匹配列表控件 private XhsProjectSimulationMatchingListCtrl GetMatchingListCtrl() { if (_matchingListCtrl == null) { _matchingListCtrl = new XhsProjectSimulationMatchingListCtrl(); _matchingListCtrl.Dock = DockStyle.Fill; _matchingListCtrl.HydroClickEvent += async (code) => { if (_hydroInfo == null) { return; } var allParterList = _hydroInfo.GetAllVisuals(); _selectedVisual = allParterList?.Find(x => x.Code == code); var elementIds = new List(); if (_selectedVisual != null) { elementIds.Add(_selectedVisual.Code); } await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds); ShowSelectedProperty(); }; _matchingListCtrl.ApplyMatchingEvent += (output) => { if (_hydroInfo == null) { return false; } return AssetsMatchingParasHelper.Apply(_hydroInfo, output); }; } return _matchingListCtrl; } //匹配列表控件 private XhsProjectSimulationMatchingListCtrl _matchingListCtrl = null; //自动匹配 private void barBtnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.controlContainerBottom.Controls.Clear(); var matchingListCtrl = GetMatchingListCtrl(); var input = AssetsMatchingParasHelper.Create(_hydroInfo, GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false)); matchingListCtrl.SetBindingData(input); this.controlContainerBottom.Controls.Add(matchingListCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "匹配列表"; this.docPnlBottom.Height = 350; } #endregion #region 未匹列表 //获取未匹配列表控件 private XhsProjectSimulationUnMatchingListCtrl GetUnMatchingListCtrl() { if (_unMatchingListCtrl == null) { _unMatchingListCtrl = new XhsProjectSimulationUnMatchingListCtrl(); _unMatchingListCtrl.Dock = DockStyle.Fill; _unMatchingListCtrl.HydroClickEvent += async (parter) =>//行点击 { if (parter == null) { return; } if (_hydroInfo == null) { return; } var allParterList = _hydroInfo.GetAllVisuals(); _selectedVisual = allParterList?.Find(x => x.Code == parter.Code); var elementIds = new List() { parter.Code }; await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds); ShowSelectedProperty(); }; _unMatchingListCtrl.ViewModelEvent += async (parters) =>//查看模型 { var codes = parters?.Select(x => x.Code).Distinct().ToList(); await _bimfaceCtrl?.ZoomAndSelectComponents(codes); _selectedVisual = null; ShowSelectedProperty(); }; } return _unMatchingListCtrl; } private XhsProjectSimulationUnMatchingListCtrl _unMatchingListCtrl = null;//未匹配列表 //未匹配列表 private void barBtnUnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.controlContainerBottom.Controls.Clear(); var unMatchingListCtrl = GetUnMatchingListCtrl(); unMatchingListCtrl.SetBindingData(_hydroInfo); this.controlContainerBottom.Controls.Add(unMatchingListCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "未匹配列表"; this.docPnlBottom.Height = 350; } #endregion #region 一键显隐 //显隐编码列表 private List _fastShowHiddenCodeList = null; //一键显隐 private async void FastShowHidden() { if (_hydroInfo == null) { return; } if (_hydroInfo.Decorators == null || _hydroInfo.Decorators.Count < 1) { return; } if (_fastShowHiddenCodeList == null) { _fastShowHiddenCodeList = _hydroInfo.Decorators.Select(x => x.Code).ToList(); await _bimfaceCtrl?.HideComponents(_fastShowHiddenCodeList); } else { await _bimfaceCtrl?.ShowComponents(_fastShowHiddenCodeList); _fastShowHiddenCodeList = null; } } //触发一键显隐 private void barBtnFastShowHidden_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { FastShowHidden(); } #endregion #region 保存信息 //保存 private async void barBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } Stopwatch sw = new Stopwatch(); sw.Start(); var id = await BLLFactory.Instance.Save(_hydroInfo); //耗时巨大的代码 sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds); if (id < 1) { TipFormHelper.ShowError("保存失败!"); return; } _hydroInfo = await BLLFactory.Instance.GetByID(id); TipFormHelper.ShowSucceed("保存成功!"); } #endregion #region 批量配置 //注册批量配置事件 private void RegistBulkSetEvents() { //水库 this.barBtnSetReservoirList.ItemClick += delegate { //var dlg = new HydroReservoirBulkSetListDlg(); //dlg.ShowDialog(); }; //水池 this.barBtnSetTankList.ItemClick += delegate { //var dlg = new HydroTankBulkSetListDlg(); //dlg.ShowDialog(); }; //水箱 this.barBtnSetWaterboxList.ItemClick += delegate { //if (_hydroInfo == null) //{ // return; //} //var dlg = new SetHydroWaterboxListDlg(); //dlg.SetBindingData(_hydroInfo); //dlg.HydroClickEvent += async (obj) => //{ // if (obj == null) // { // return; // } // _selectedParter = obj; // await _bimfaceCtrl?.ZoomAndSelectComponent(obj.Code); // ShowProperty(); //}; //dlg.HydroChangedEvent += (obj) => //{ //}; //dlg.ShowDialog(); }; //连接节点 this.barBtnSetJunctionList.ItemClick += delegate { //var dlg = new HydroJunctionBulkSetListDlg(); //dlg.ShowDialog(); }; //闷头 this.barBtnSetBluntheadList.ItemClick += delegate { //if (_hydroInfo == null) //{ // return; //} //var dlg = new SetHydroBluntheadListDlg(); //dlg.SetBindingData(_hydroInfo); //dlg.HydroClickEvent += async (obj) => //{ // if (obj == null) // { // return; // } // _selectedParter = obj; // await _bimfaceCtrl?.ZoomAndSelectComponent(obj.Code); // ShowProperty(); //}; //dlg.HydroChangedEvent += (obj) => //{ //}; //dlg.ShowDialog(); }; //弯头 this.barBtnSetElbowsList.ItemClick += delegate { //if (_hydroInfo == null) //{ // return; //} //var dlg = new SetHydroElbowListDlg(); //dlg.SetBindingData(_hydroInfo); //dlg.HydroClickEvent += async (obj) => //{ // if (obj == null) // { // return; // } // _selectedParter = obj; // await _bimfaceCtrl?.ZoomAndSelectComponent(obj.Code); // ShowProperty(); //}; //dlg.HydroChangedEvent += (obj) => //{ //}; //dlg.ShowDialog(); }; //三通 this.barBtnSetThreelinkList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroThreelinkListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //四通 this.barBtnSetFourlinkList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroFourlinkListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //水表 this.barBtnSetMeterList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroMeterListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //流量计 this.barBtnSetFlowmeterList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroFlowmeterListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //压力表 this.barBtnSetPressmeterList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroPressmeterListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //管道 this.barBtnSetPipeList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroPipeListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //水泵 this.barBtnSetPumpList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroPumpListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; //阀门 this.barBtnSetValveList.ItemClick += delegate { if (_hydroInfo == null) { return; } var dlg = new SetHydroValveListDlg(); dlg.SetBindingData(_hydroInfo); dlg.ShowDialog(); }; } //显示RadialMenu private void barBtnSetList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.rmSet.ShowPopup(MousePosition, true); } //弹出前 private void rmSet_BeforePopup(object sender, CancelEventArgs e) { if (_hydroInfo == null) { e.Cancel = true; return; } //水库 if (_hydroInfo.Reservoirs == null || _hydroInfo.Reservoirs.Count < 1) { this.barBtnSetReservoirList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetReservoirList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //水池 if (_hydroInfo.Tanks == null || _hydroInfo.Tanks.Count < 1) { this.barBtnSetTankList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetTankList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //水箱 if (_hydroInfo.Waterboxs == null || _hydroInfo.Waterboxs.Count < 1) { this.barBtnSetWaterboxList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetWaterboxList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //连接节点 if (_hydroInfo.Junctions == null || _hydroInfo.Junctions.Count < 1) { this.barBtnSetJunctionList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetJunctionList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //喷嘴 if (_hydroInfo.Nozzles == null || _hydroInfo.Nozzles.Count < 1) { this.barBtnSetNozzleList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetNozzleList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //消火栓 if (_hydroInfo.Hydrants == null || _hydroInfo.Hydrants.Count < 1) { this.barBtnSetHydrantList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetHydrantList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //闷头 if (_hydroInfo.Bluntheads == null || _hydroInfo.Bluntheads.Count < 1) { this.barBtnSetBluntheadList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetBluntheadList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //弯头 if (_hydroInfo.Elbows == null || _hydroInfo.Elbows.Count < 1) { this.barBtnSetElbowsList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetElbowsList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //三通 if (_hydroInfo.Threelinks == null || _hydroInfo.Threelinks.Count < 1) { this.barBtnSetThreelinkList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetThreelinkList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //四通 if (_hydroInfo.Fourlinks == null || _hydroInfo.Fourlinks.Count < 1) { this.barBtnSetFourlinkList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetFourlinkList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //水表 if (_hydroInfo.Meters == null || _hydroInfo.Meters.Count < 1) { this.barBtnSetMeterList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetMeterList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //流量计 if (_hydroInfo.Flowmeters == null || _hydroInfo.Flowmeters.Count < 1) { this.barBtnSetFlowmeterList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetFlowmeterList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //压力表 if (_hydroInfo.Pressmeters == null || _hydroInfo.Pressmeters.Count < 1) { this.barBtnSetPressmeterList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetPressmeterList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //管道 if (_hydroInfo.Pipes == null || _hydroInfo.Pipes.Count < 1) { this.barBtnSetPipeList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetPipeList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //过渡件 if (_hydroInfo.Translations == null || _hydroInfo.Translations.Count < 1) { this.barBtnSetTranslationList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetTranslationList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //换热器 if (_hydroInfo.Exchangers == null || _hydroInfo.Exchangers.Count < 1) { this.barBtnSetExchangerList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetExchangerList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //空压机 if (_hydroInfo.Compressors == null || _hydroInfo.Compressors.Count < 1) { this.barBtnSetCompressorList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetCompressorList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //水泵 if (_hydroInfo.Pumps == null || _hydroInfo.Pumps.Count < 1) { this.barBtnSetPumpList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetPumpList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } //阀门 if (_hydroInfo.Valves == null || _hydroInfo.Valves.Count < 1) { this.barBtnSetValveList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } else { this.barBtnSetValveList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } } #endregion #region 构件查询 //查询组件 private HydroVisualSearchListCtrl _searchCtrl = null; //获取查询组件 private HydroVisualSearchListCtrl GetSearchCtrl() { if (_searchCtrl == null) { _searchCtrl = new HydroVisualSearchListCtrl(); _searchCtrl.Dock = DockStyle.Fill; var allVisualViewModelList = GetVisualViewModelList(); _searchCtrl.InitialData(allVisualViewModelList); _searchCtrl.HydroClickInfoEvent += async (visual) => { ShowSelectedProperty(visual); await _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code); }; _searchCtrl.HydroSearchInfoEvent += async (list) => { var elementIds = new List(); if (list != null && list.Count > 0) { _selectedVisual = list.First(); list.ForEach(x => elementIds.Add(x.Code)); } else { _selectedVisual = null; } ShowSelectedProperty(); await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds); }; } return _searchCtrl; } //查询控件是否可见 private bool IsSearchCtrlVisible { get { if (this.docPnlBottom.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible) { if (this.controlContainerBottom.Controls.Count > 0) { if (this.controlContainerBottom.Controls[0] is HydroVisualSearchListCtrl) { return true; } } } return false; } } //显示查询控件 private void ShowSearchCtrl(string content) { if (IsSearchCtrlVisible) { return; } var searchCtrl = GetSearchCtrl(); searchCtrl.SetBindingData(content); this.controlContainerBottom.Controls.Clear(); this.controlContainerBottom.Controls.Add(searchCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "构件查询"; this.docPnlBottom.Height = 350; } //显示查询窗体 private void ShowSearchDlg() { if (IsSearchCtrlVisible) { return; } var dlg = new InputHydroVisualSearchListDlg(); dlg.SearchEvent += (content) => { if (string.IsNullOrEmpty(content)) { return; } ShowSearchCtrl(content); }; dlg.SetBindingData(); dlg.ShowDialog(); } //查询 private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowSearchDlg(); } #endregion #region 模型标注 #region 标注设置 //所有标注设置列表 private List _allMarkSetList = null; //获取标注设置列表 private List GetMarkSetList() { if (_hydroInfo == null) { return default; } if (_allMarkSetList == null) { _allMarkSetList = HydroMarkHelper.GetSetList(_hydroInfo); } return _allMarkSetList; } #endregion #region 标注结果 //所有标注结果列表 private List _allMarkResultList = null; //获取标注结果列表 //UseCache 是否使用缓存 private List GetMarkResultList(bool useCache = true) { if (_hydroInfo == null) { return default; } if (!useCache) { var allSetList = GetMarkSetList(); _allMarkResultList = HydroMarkHelper.GetResultList(_hydroInfo, allSetList); } if (_allMarkResultList == null) { var allSetList = GetMarkSetList(); _allMarkResultList = HydroMarkHelper.GetResultList(_hydroInfo, allSetList); } return _allMarkResultList; } #endregion #region 标注显示 //标注是否显示 private bool _isMarkVisible = false; //更新标注 private async void UpdateMark(Yw.Model.HydroVisualInfo visual) { var allSetList = GetMarkSetList(); var result = HydroMarkHelper.GetResult(visual, allSetList); if (result == null) { return; } var allResultList = GetMarkResultList(true); allResultList.Remove(x => x.Code == visual.Code); allResultList.Add(result); if (_isMarkVisible) { var leadLabel = new LogicMarkLeadLabel() { Id = result.Code, Text = result.Text, Distance = null }; await _bimfaceCtrl?.UpdateLogicMarkLeadLabel(leadLabel); } } //更新标注列表 private void UpdateMarkList(List visuals) { if (visuals == null || visuals.Count < 1) { visuals.ForEach(x => UpdateMark(x)); } } //应用标注列表 //UseCache 是否使用缓存 private async void ApplyMarkList(bool useCache = true) { if (_isMarkVisible) { var allResultList = GetMarkResultList(useCache); var leadLabels = allResultList?.Select(x => new LogicMarkLeadLabel(x.Code, x.Text, null)).ToList(); await _bimfaceCtrl?.SetLogicMarkLeadLabels(leadLabels); } else { await _bimfaceCtrl?.ClearLogicMarkLeadLabels(); } } //显示标注设置窗体 private void ShowSetMarkDlg() { if (_hydroInfo == null) { return; } var allMarkSetList = GetMarkSetList(); var dlg = new SetHydroMarkDlg(); dlg.SetBindingData(allMarkSetList); dlg.ReloadDataEvent += (list) => { _allMarkSetList = list; ApplyMarkList(false); }; dlg.ShowDialog(); } //设置标注 private void barBtnSetMark_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowSetMarkDlg(); } //是否显示 private void barCkMark_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { _isMarkVisible = this.barCkMark.Checked; ApplyMarkList(true); } #endregion #endregion #region 颜色分级 #region 颜色配置 //所有颜色分级配置列表 private List _allGradingList = null; //获取颜色分级配置列表 private async Task> GetGradingList() { if (_hydroInfo == null) { return default; } if (_allGradingList == null) { _allGradingList = await HydroGradingHelper.GetGradingList(_hydroInfo); } return _allGradingList; } //显示颜色分级窗体 private async void ShowGradingDlg() { if (_hydroInfo == null) { return; } var allGradingList = await GetGradingList(); var dlg = new SetHydroGradingTreeDlg(); dlg.SetBindingData(_hydroInfo, allGradingList); dlg.ReloadDataEvent += (list) => { _allGradingList = list; ApplyGradingResultList(false); }; dlg.ApplyDataEvent += (catalog, propName) => { UpdateGradingApplyList(catalog, propName); ApplyGradingResultList(false); }; dlg.ShowDialog(); } //配置颜色分级 private void barBtnGradingSet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowGradingDlg(); } #endregion #region 应用分级 //颜色分级应用列表 private List _allGradingApplyList = null; //获取颜色分级应用列表 private List GetGradingApplyList() { if (_hydroInfo == null) { return default; } if (_allGradingApplyList == null) { _allGradingApplyList = HydroGradingHelper.GetApplyList(_hydroInfo); } return _allGradingApplyList; } //更新颜色分级应用列表 private void UpdateGradingApplyList(string catalog, string propName) { var allGradingApplyList = GetGradingApplyList(); if (allGradingApplyList == null || allGradingApplyList.Count < 1) { return; } var apply = allGradingApplyList.Find(x => x.Catalog == catalog); if (apply == null) { return; } apply.PropName = propName; } //显示颜色分级应用窗体 private void ShowGradingApplyDlg() { if (_hydroInfo == null) { return; } var allGradingApplyList = GetGradingApplyList(); if (allGradingApplyList == null || allGradingApplyList.Count < 1) { return; } var dlg = new ApplyHydroGradingDlg(); dlg.SetBindingData(allGradingApplyList); dlg.ReloadDataEvent += (obj) => { _allGradingApplyList = obj; ApplyGradingResultList(false); }; dlg.ShowDialog(); } //应用颜色分级 private void barBtnGradingApply_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowGradingApplyDlg(); } #endregion #region 应用结果 //所有颜色分级结果列表 private List _allGradingResultList = null; //获取颜色分级结果列表 //UseCache是否使用缓存 private async Task> GetGradingResultList(bool useCache = true) { if (_hydroInfo == null) { return default; } var allGradingList = await GetGradingList(); var allGradingApplyList = GetGradingApplyList(); var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); if (!useCache) { _allGradingResultList = HydroGradingHelper.GetResultList(_hydroInfo, allGradingList, allGradingApplyList, allCalcuResultList); } if (_allGradingResultList == null) { _allGradingResultList = HydroGradingHelper.GetResultList(_hydroInfo, allGradingList, allGradingApplyList, allCalcuResultList); } return _allGradingResultList; } #endregion #region 结果展示 //颜色分级是否显示 private bool _isGradingVisible = false; //应用颜色分级结果列表 //UseCache是否使用缓存 private async void ApplyGradingResultList(bool useCache = true) { if (_hydroInfo == null) { return; } var allGradingResultList = await GetGradingResultList(useCache); if (allGradingResultList == null || allGradingResultList.Count < 1) { return; } if (_isGradingVisible) { var groupList = allGradingResultList.GroupBy(x => x.Color).ToList(); groupList.ForEach(async x => await _bimfaceCtrl?.OverrideComponentsColor(x.Select(t => t.Code).Distinct().ToList(), x.Key, 1)); } else { var codes = allGradingResultList.Select(x => x.Code).Distinct().ToList(); await _bimfaceCtrl?.RestoreComponentsColor(codes); } } //应用颜色分级结果列表 private async void ApplyGradingResultList(Yw.Model.HydroVisualInfo visual) { if (visual == null) { return; } var allGradingList = await GetGradingList(); var allGradingApplyList = GetGradingApplyList(); var allGradingResultList = await GetGradingResultList(true); var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); var oldResult = allGradingResultList?.Find(x => x.Code == visual.Code); if (oldResult != null) { allGradingResultList.Remove(oldResult); } var newResult = HydroGradingHelper.GetResult(visual, allGradingList, allGradingApplyList, allCalcuResultList); if (newResult != null) { allGradingResultList.Add(newResult); } if (_isGradingVisible) { if (newResult == null) { if (oldResult != null) { await _bimfaceCtrl?.RestoreComponentsColor(oldResult.Code); } } else { await _bimfaceCtrl?.OverrideComponentsColor(newResult.Code, newResult.Color, 1); } } } //应用颜色分级结果列表 private void ApplyGradingResultList(List visualList) { if (visualList == null || visualList.Count < 1) { return; } visualList.ForEach(x => ApplyGradingResultList(x)); } //颜色分级展示 private void barCkGrading_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { _isGradingVisible = this.barCkGrading.Checked; ApplyGradingResultList(true); } #endregion #endregion #region 人工刷新 //刷新 private async void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (XtraMessageBox.Show("刷新后将丢失当前水力信息更改,是否继续刷新?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes) { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroRelation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); Stopwatch sw = new Stopwatch(); sw.Start(); _hydroInfo = await BLLFactory.Instance.GetByID(hydroRelation.ModelID); sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds); _selectedVisual = null; await _bimfaceCtrl?.ZoomAndSelectComponents(null); ShowSelectedProperty(); TipFormHelper.ShowSucceed("数据已刷新"); } } #endregion #region 水流动画 //水流动画是否可见 private bool _isFlowEffectVisible = false; //所有水流动画列表 private List _allFlowEffectList = null; //获取流向列表 private List GetFlowEffectList() { if (_hydroInfo == null) { return default; } if (_allFlowEffectList == null) { _allFlowEffectList = new List(); var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); if (_hydroInfo.Pipes != null && _hydroInfo.Pipes.Count > 0) { foreach (var parter in _hydroInfo.Pipes) { var flowEffect = new LogicFlowEffect(); _allFlowEffectList.Add(flowEffect); flowEffect.Id = parter.Code; flowEffect.Rotation = 90; flowEffect.SpeedX = 0.1; if (parter.FlowDirectionX == Yw.Hydro.FlowDirection.None) { flowEffect.SpeedX = 0; } else if (parter.FlowDirectionX == Yw.Hydro.FlowDirection.Positive) { flowEffect.SpeedX = 0.1; } else { flowEffect.SpeedX = -0.1; } if (parter.FlowDirectionY == Yw.Hydro.FlowDirection.None) { flowEffect.SpeedY = 0; } else if (parter.FlowDirectionY == Yw.Hydro.FlowDirection.Positive) { flowEffect.SpeedY = 0.1; } else { flowEffect.SpeedY = -0.1; } var calcuResult = allCalcuResultList?.Find(x => x.Code == parter.Code) as HydroCalcuLinkResult; if (calcuResult != null) { if (calcuResult.CalcuVelocity < 0) { flowEffect.SpeedX = -flowEffect.SpeedX; } } } } } return _allFlowEffectList; } //加载水流动画 private async void LoadFlowEffect() { if (_hydroInfo == null) { return; } var allFlowEffectList = GetFlowEffectList(); await _bimfaceCtrl?.LoadFlowEffect(allFlowEffectList); } //卸载水流动画 private async void UnloadFlowEffect() { if (_hydroInfo == null) { return; } await _bimfaceCtrl?.UnloadFlowEffect(); } //设置水力动画 private void SetFlowEffect() { if (_isFlowEffectVisible) { LoadFlowEffect(); } else { UnloadFlowEffect(); } } //更新水流动画 private async void UpdateFlowEffect(Yw.Model.HydroVisualInfo visual) { if (_hydroInfo == null) { return; } var allFlowEffectList = GetFlowEffectList(); var flowEffect = _allFlowEffectList?.Find(x => x.Id == visual.Code); if (flowEffect == null) { return; } if (visual.FlowDirectionX == Yw.Hydro.FlowDirection.None) { flowEffect.SpeedX = 0; } else if (visual.FlowDirectionX == Yw.Hydro.FlowDirection.Positive) { flowEffect.SpeedX = 0.1; } else { flowEffect.SpeedX = -0.1; } if (visual.FlowDirectionY == Yw.Hydro.FlowDirection.None) { flowEffect.SpeedY = 0; } else if (visual.FlowDirectionY == Yw.Hydro.FlowDirection.Positive) { flowEffect.SpeedY = 0.1; } else { flowEffect.SpeedY = -0.1; } var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); var calcuResult = allCalcuResultList?.Find(x => x.Code == visual.Code) as HydroCalcuLinkResult; if (calcuResult != null) { if (calcuResult.CalcuVelocity < 0) { flowEffect.SpeedX = -flowEffect.SpeedX; } } if (_isFlowEffectVisible) { await _bimfaceCtrl?.UpdateFlowEffect(flowEffect); } } //水流动画是否可见 private void barCkFlowEffect_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { _isFlowEffectVisible = this.barCkFlowEffect.Checked; SetFlowEffect(); } #endregion #region 构件控件 //构件明细控件 private Yw.WinFrmUI.HydroVisualListCtrl _visualListCtrl = null; //获取构件明细控件 private Yw.WinFrmUI.HydroVisualListCtrl GetVisualListCtrl() { if (_visualListCtrl == null) { _visualListCtrl = new HydroVisualListCtrl(); _visualListCtrl.Dock = DockStyle.Fill; _visualListCtrl.HydroClickInfoEvent += async (visual) => { ShowSelectedProperty(visual); await _bimfaceCtrl?.ZoomAndSelectComponent(_selectedVisual?.Code); }; _visualListCtrl.HydroChangedInfoEvent += (visualList) => { UpdateMarkList(visualList); UpdateSelectedProperty(); ApplyGradingResultList(); }; } return _visualListCtrl; } //构件明细控件是否可见 private bool IsVisualListCtrlVisible { get { if (this.docPnlBottom.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible) { if (this.controlContainerBottom.Controls.Count > 0) { if (this.controlContainerBottom.Controls[0] is HydroVisualListCtrl) { return true; } } } return false; } } //显示构件明细控件 private void ShowVisualListCtrl() { if (_hydroInfo == null) { return; } if (IsVisualListCtrlVisible) { return; } var visualListCtrl = GetVisualListCtrl(); var allVisualViewModelList = GetVisualViewModelList(); visualListCtrl.SetBindingData(allVisualViewModelList); var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); if (allCalcuResultList == null || allCalcuResultList.Count < 1) { visualListCtrl.SetNormalView(); } else { visualListCtrl.SetCalcuView(); } this.controlContainerBottom.Controls.Clear(); this.controlContainerBottom.Controls.Add(visualListCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "构件明细"; this.docPnlBottom.Height = 350; } //更新构件明细控件 private void UpdateVisualListCtrl() { if (!IsVisualListCtrlVisible) { return; } _visualListCtrl?.UpdateBindingData(); } //构件明细 private void barBtnHydroVisualList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowVisualListCtrl(); } #endregion #region 监测列表 //所有监测列表 private List _allMonitorList = null; //获取监测列表 private async Task> GetMonitorList() { if (_hydroInfo == null) { return default; } if (_allMonitorList == null) { _allMonitorList = await BLLFactory.Instance.GetByModelID(_hydroInfo.ID); if (_allMonitorList == null) { _allMonitorList = new List(); } } return _allMonitorList; } //更新监测列表 private async void UpdateMonitorList(string code) { if (_hydroInfo == null) { return; } var allMonitorList = await GetMonitorList(); allMonitorList.RemoveAll(x => x.Relation == code); var monitorList = await BLLFactory.Instance.GetByRelation(_hydroInfo.ID, code); if (monitorList != null && monitorList.Count > 0) { allMonitorList.AddRange(monitorList); } UpdateMonitorValueList(code, monitorList); SetLogicMonitorList(); } //设置选择构件监测点列表 private async void SetSelectVisualMonitorList() { if (_hydroInfo == null) { return; } if (_selectedVisual == null) { return; } var allMonitorList = await GetMonitorList(); var dlg = new SetHydroVisualMonitorDlg(); dlg.SetBindingData(_hydroInfo, _selectedVisual, allMonitorList); dlg.ReloadDataEvent += async (hydroInfo, visual, list) => { if (hydroInfo == null) { return; } if (visual == null) { return; } var bol = await BLLFactory.Instance.Save(hydroInfo.ID, visual.Code, list); if (!bol) { TipFormHelper.ShowError("设置失败"); return; } TipFormHelper.ShowSucceed("设置成功"); UpdateMonitorList(visual.Code); }; dlg.ShowDialog(); } //设置监测点 private void barBtnSetMonitor_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SetSelectVisualMonitorList(); } #endregion #region 监测列表 #region 监测值列表 //所有监测值列表 private List _allMonitorValueList = null; //获取监测值列表 private async Task> GetMonitorValueList() { if (_allMonitorValueList == null) { _allMonitorValueList = new List(); var allMonitorList = await GetMonitorList(); var allVisualViewModelList = GetVisualViewModelList(); allMonitorList.ForEach(x => { var visual = allVisualViewModelList.Find(t => t.Code == x.Relation); if (visual != null) { var vm = new HydroVisualMonitorValueViewModel(visual.Vmo, x); _allMonitorValueList.Add(vm); } }); } return _allMonitorValueList; } //更新监测值列表 private async void UpdateMonitorValueList(string code, List monitorList) { if (string.IsNullOrEmpty(code)) { return; } var visual = GetVisualViewModel(code)?.Vmo; if (visual == null) { return; } var allMonitorValueList = await GetMonitorValueList(); var monitorValueList = allMonitorValueList.Where(x => x.Vmo.Relation == code).ToList(); monitorValueList?.ForEach(x => { var result = monitorList?.Exists(t => t.Relation == x.Vmo.Relation && t.PropName == x.Vmo.PropName); if (!(result.HasValue && result.Value)) { allMonitorValueList.Remove(x); } }); monitorList?.ForEach(x => { var result = monitorValueList?.Exists(t => t.Vmo.Relation == x.Relation && t.Vmo.PropName == x.PropName); if (!(result.HasValue && result.Value)) { var vm = new HydroVisualMonitorValueViewModel(visual, x); allMonitorValueList.Add(vm); } }); } #endregion #region 监测值列表控件 //监测值列表控件 private HydroVisualMonitorValueListCtrl _monitorValueListCtrl = null; //获取监测值列表控件 private HydroVisualMonitorValueListCtrl GetMonitorValueListCtrl() { if (_monitorValueListCtrl == null) { _monitorValueListCtrl = new HydroVisualMonitorValueListCtrl(); _monitorValueListCtrl.Dock = DockStyle.Fill; _monitorValueListCtrl.HydroViewEvent += (code) => { _bimfaceCtrl?.ZoomToComponent(code); }; } return _monitorValueListCtrl; } //显示监测值列表控件 private async void ShowMonitorValueListCtrl() { var monitorValueListCtrl = GetMonitorValueListCtrl(); var allMonitorValueList = await GetMonitorValueList(); monitorValueListCtrl.SetBindingData(allMonitorValueList); this.controlContainerBottom.Controls.Clear(); this.controlContainerBottom.Controls.Add(monitorValueListCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "监测值"; this.docPnlBottom.Height = 350; } //设置监测值 private void barBtnSetMonitorValue_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowMonitorValueListCtrl(); } #endregion #region 监测列表显示 //监测是否显示 private bool _isMonitorVisible = false; //获取业务监测列表 private async Task> GetLogicMonitorList() { var allMonitorList = await GetMonitorList(); var allLogicMonitorList = allMonitorList.Select(x => { var logicMonitor = new LogicMonitor(); logicMonitor.Id = x.Relation; logicMonitor.PropName = x.PropName; logicMonitor.Description = x.Description; return logicMonitor; }).ToList(); return allLogicMonitorList; } //设置业务监测列表 private async void SetLogicMonitorList() { if (_isMonitorVisible) { var allLogicMonitorList = await GetLogicMonitorList(); await _bimfaceCtrl?.SetLogicMonitors(allLogicMonitorList); } else { await _bimfaceCtrl?.ClearLogicMonitors(); } } //显示状态改变 private void barCkMonitor_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { _isMonitorVisible = this.barCkMonitor.Checked; SetLogicMonitorList(); } #endregion #endregion #region 检查结果 //检查结果缓存 private HydroCheckResult _checkResult = null; //获取检查结果 //needCheckAgain 用于确定是否需要重新检查 private HydroCheckResult GetCheckResult(bool needCheckAgain = false) { if (_hydroInfo == null) { return default; } if (needCheckAgain) { _checkResult = _hydroInfo.Check(); } if (_checkResult == null) { _checkResult = _hydroInfo.Check(); } return _checkResult; } #endregion #region 检查控件 //检查控件 private HydroCheckResultCtrl _checkCtrl = null; //获取检查控件 private HydroCheckResultCtrl GetCheckCtrl() { if (_checkCtrl == null) { _checkCtrl = new HydroCheckResultCtrl(); _checkCtrl.Dock = DockStyle.Fill; _checkCtrl.HydroClickEvent += async (code) => { if (_hydroInfo == null) { return; } var elementIds = new List(); if (string.IsNullOrEmpty(code)) { this.SelectedVisual = null; } else { var allVisualViewModelList = GetVisualViewModelList(); this.SelectedVisual = allVisualViewModelList?.Find(x => x.Code == code)?.Vmo; if (this.SelectedVisual != null) { elementIds.Add(this.SelectedVisual.Code); } } await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds); ShowSelectedProperty(); }; } return _checkCtrl; } //显示检查控件 //needCheckAgain 用于确定是否需要重新检查 private void ShowCheckCtrl(bool needCheckAgain = false) { var checkResult = GetCheckResult(needCheckAgain); if (checkResult == null) { return; } var checkCtrl = GetCheckCtrl(); checkCtrl.SetBindingData(checkResult); this.controlContainerBottom.Controls.Clear(); this.controlContainerBottom.Controls.Add(checkCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "检查结果"; this.docPnlBottom.Height = 350; } //检查 private void barBtnCheck_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowCheckCtrl(true); } #endregion #region 计算失败 //计算失败控件 private HydroCalcuFailedCtrl _calcuFailedCtrl = null; //获取计算失败控件 private HydroCalcuFailedCtrl GetCalcuFailedCtrl() { if (_calcuFailedCtrl == null) { _calcuFailedCtrl = new HydroCalcuFailedCtrl(); _calcuFailedCtrl.Dock = DockStyle.Fill; } return _calcuFailedCtrl; } //显示计算失败控件 private void ShowCalcuFailedCtrl(HydroCalcuResult calcuResult) { if (_hydroInfo == null) { return; } if (calcuResult == null) { return; } if (calcuResult.Succeed) { return; } var calcuFailedCtrl = GetCalcuFailedCtrl(); calcuFailedCtrl.SetBindingData(calcuResult.FailedList); this.controlContainerBottom.Controls.Clear(); this.controlContainerBottom.Controls.Add(calcuFailedCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlBottom.Text = "计算失败原因"; this.docPnlBottom.Height = 350; } //显示计算失败控件 private void ShowCalcuFailedCtrl() { ShowCalcuFailedCtrl(_calcuResult); } #endregion #region 管网修复 //修复管网 private void Repair() { if (_hydroInfo == null) { return; } var checkResult = GetCheckResult(true); if (checkResult == null) { return; } if (!checkResult.Succeed) { ShowCheckCtrl(false); TipFormHelper.ShowWarn("检查失败导致无法进行试算,停止管网修复!"); return; } var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.Simple); if (calcuResult == null) { return; } if (!calcuResult.Succeed) { ShowCalcuFailedCtrl(calcuResult); TipFormHelper.ShowWarn("试算失败,停止管网修复!"); return; } var allLinks = _hydroInfo.GetAllLinks(); if (allLinks != null && allLinks.Count < 1) { TipFormHelper.ShowError("模型中未包含管段信息,停止管网修复!"); return; } int count = 0; foreach (var link in allLinks) { var calcuLink = calcuResult.LinkList?.Find(x => x.Code == link.Code); if (calcuLink == null) { continue; } if (!calcuLink.CalcuFlow.HasValue) { continue; } if (calcuLink.CalcuFlow.Value < 0) { var tempCode = link.StartCode; link.StartCode = link.EndCode; link.EndCode = tempCode; count++; } } UpdateVisualViewModelProperty(); UpdateVisualListCtrl(); UpdateSelectedProperty(); TipFormHelper.ShowSucceed($"修复完成,共修复管段({count})个!"); } //管网修复 private void barBtnRepair_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Repair(); } #endregion #region 导出INP //导出INP文件 private void barBtnExportInp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } var fileName = 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("导出成功"); } #endregion #region 并联分析 //并联分析 private void ParallelAnalysis() { if (_hydroInfo == null) { return; } var pumps = _hydroInfo.Pumps; if (pumps == null || pumps.Count < 1) { XtraMessageBox.Show("无水泵信息"); return; } var vmList = new List(); foreach (var pump in pumps) { if (!pump.RatedN.HasValue) { 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(); } //并联分析 private void barBtnParallel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ParallelAnalysis(); } #endregion #region 工况计算 //所有工况列表 private List _allWorkingList = null; //获取工况列表 private async Task> GetWorkingList() { if (_allWorkingList == null) { _allWorkingList = await BLLFactory.Instance.GetByModelID(_hydroInfo.ID); if (_allWorkingList == null) { _allWorkingList = new List(); } } return _allWorkingList; } //所有工况元组列表 private List> _allWorkingTupleList = null; //获取工况元组列表 private async Task>> GetWorkingTupleList() { if (_hydroInfo == null) { return default; } if (_allWorkingTupleList == null) { _allWorkingTupleList = new List>(); var allWorkingList = await GetWorkingList(); if (allWorkingList.Count > 0) { allWorkingList.ForEach(x => { var checkResult = _hydroInfo.Check(); HydroCalcuResult calcuResult = null; if (checkResult != null && checkResult.Succeed) { calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss); } _allWorkingTupleList.Add(new Tuple(x, checkResult, calcuResult)); }); } } return _allWorkingTupleList; } //添加工况元组 private async void AppendWorkingTuple(HydroWorkingVmo working, HydroCheckResult check, HydroCalcuResult calcu) { var allWorkingTupleList = await GetWorkingTupleList(); allWorkingTupleList.Add(new Tuple(working, check, calcu)); } //移除工况元组 private async void RemoveWorkingTuple(HydroWorkingVmo working) { var allWorkingTupleList = await GetWorkingTupleList(); if (allWorkingTupleList.Count > 0) { allWorkingTupleList.RemoveAll(x => x.Item1.ID == working.ID); } } //显示工况计算窗体 private void ShowWorkingCalcuDlg() { var dlg = new SetHydroWorkingDlg(); dlg.HydroViewEvent += async (visual) => { _selectedVisual = visual; if (_selectedVisual != null) { await _bimfaceCtrl?.ZoomAndSelectComponents(new List() { _selectedVisual.Code }); } ShowSelectedProperty(); }; dlg.HydroCalcuEvent += async (working) => { if (_hydroInfo == null) { return; } var allWorkingList = await GetWorkingList(); var vmo = new HydroWorkingVmo(); vmo.ModelID = _hydroInfo.ID; vmo.Name = working.Name; vmo.WorkingInfo = JsonHelper.Object2Json(working.WorkingInfo); vmo.MonitorInfo = JsonHelper.Object2Json(working.MonitorInfo); vmo.SortCode = allWorkingList.Count < 1 ? 1 : allWorkingList.Max(x => x.SortCode) + 1; vmo.Description = working.Description; vmo.ID = await BLLFactory.Instance.Insert(vmo); if (vmo.ID < 1) { TipFormHelper.ShowError("创建工况失败,计算取消!"); return; } allWorkingList.Add(vmo); _hydroInfo.UpdateWorkingInfo(working.WorkingInfo); //校验 _checkResult = _hydroInfo.Check(); if (!_checkResult.Succeed) { _allWorkingTupleList.Add(new Tuple(vmo, _checkResult, null)); ShowCheckCtrl(); TipFormHelper.ShowWarn("校验失败,请检查后重试"); return; } WaitFormHelper.ShowWaitForm(this, "正在计算分析中,请稍候..."); //await Task.Delay(5000); _calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss); WaitFormHelper.HideWaitForm(); if (_calcuResult.Succeed) { _allWorkingTupleList.Add(new Tuple(vmo, _checkResult, _calcuResult)); UpdateVisualViewModelProperty(); UpdateVisualViewModelCalcuProperty(); UpdateVisualListCtrl(); UpdateSelectedProperty(); //await _bimfaceCtrl?.SetLogicCalcuCustomLabelsCalcuResult(_calcuResult); TipFormHelper.ShowSucceed("计算成功!"); var codes = _hydroInfo.Pumps.Select(x => x.Code).ToList(); await _bimfaceCtrl?.ZoomAndSelectComponents(codes); } else { ShowCalcuFailedCtrl(); TipFormHelper.ShowError("计算失败!"); } ApplyGradingResultList(false); UpdateVisualListCtrl(); ShowSelectedProperty(); }; dlg.SetBindingData(_hydroInfo, _allWorkingList, _allMonitorValueList); dlg.ShowDialog(); } //水力计算 private void barBtnHydroCalcu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowWorkingCalcuDlg(); } #endregion #region 计算标签 //计算标签是否显示 private bool _isCalcuLabelsVisible = false; //所有计算标签 private List _allCalcuLabels = null; //获取计算标签 private List GetCalcuLabels() { if (_hydroInfo == null) { return default; } var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); if (allCalcuResultList == null || allCalcuResultList.Count < 1) { return default; } var list = new List(); _hydroInfo.Pumps?.ForEach(x => { var hz = Math.Round(x.RatedHz * x.SpeedRatio); var calcuPumpResult = GetCalcuVisualResult(x.Code) as HydroCalcuLinkResult; if (calcuPumpResult != null) { var calcuPumpStartResult = GetCalcuVisualResult(x.StartCode) as HydroCalcuNodeResult; var calcuPumpEndResult = GetCalcuVisualResult(x.EndCode) as HydroCalcuNodeResult; var pumpCustomLabel = new LogicCalcuCustomLabel(); pumpCustomLabel.Id = x.Code; pumpCustomLabel.Distance = 20000; pumpCustomLabel.Data = new List() { new LogicCalcuCustomLabelItem(){ Name="状态",Value=HydroLinkStatusHelper.GetStatusName(x.LinkStatus),Unit=string.Empty}, new LogicCalcuCustomLabelItem(){ Name="频率",Value=hz.ToString(),Unit=string.Empty}, new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuPumpResult.CalcuFlow.Value,1).ToString(),Unit="m³/h"}, new LogicCalcuCustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuPumpStartResult.CalcuHead.Value,4).ToString(),Unit="m"}, new LogicCalcuCustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuPumpEndResult.CalcuHead.Value,4).ToString(),Unit="m"}, }; list.Add(pumpCustomLabel); } }); _hydroInfo.GetAllEmitters()?.ForEach(x => { var calcuEmitter = GetCalcuVisualResult(x.Code) as HydroCalcuNodeResult; var emitterCustomLabel = new LogicCalcuCustomLabel(); emitterCustomLabel.Id = x.Code; emitterCustomLabel.Distance = 30000; emitterCustomLabel.Data = new List() { new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuEmitter.CalcuDemand.Value,1).ToString(),Unit="m³/h"}, new LogicCalcuCustomLabelItem(){ Name="压力",Value=Math.Round(calcuEmitter.CalcuDemand.Value,4).ToString(),Unit="m"} }; list.Add(emitterCustomLabel); }); return list; } //设置计算标签 private void SetCalcuLabels() { if (_isCalcuLabelsVisible) { var allCalcuLabels = GetCalcuLabels(); _bimfaceCtrl?.SetLogicCalcuCustomLabels(allCalcuLabels); } else { _bimfaceCtrl?.ClearLogicCalcuCustomLabels(); } } //设置计算标签是否显示 private void barCkCalcuLabels_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { _isCalcuLabelsVisible = this.barCkCalcuLabels.Checked; } #endregion #region 当前工况 //当前工况 private Yw.Vmo.HydroWorkingVmo _currentWorking = null; //初始化当前工况 private async void InitialCurrentWorking() { var allWorkingList = await GetWorkingList(); this.repositoryItemImageComboBox1.Items.BeginUpdate(); this.repositoryItemImageComboBox1.Items.Clear(); if (allWorkingList != null && allWorkingList.Count > 0) { allWorkingList.ForEach(x => this.repositoryItemImageComboBox1.Items.Add(x.Name, x, -1)); this.barEditCurrentWorking.EditValue = allWorkingList.Last(); } this.repositoryItemImageComboBox1.Items.EndUpdate(); } //增加当前工况 private void AppendCurrentWorking(HydroWorkingVmo working) { this.repositoryItemImageComboBox1.Items.BeginUpdate(); this.repositoryItemImageComboBox1.Items.Add(working.Name, working, -1); this.repositoryItemImageComboBox1.Items.EndUpdate(); this.barEditCurrentWorking.EditValue = working; } //设置当前工况 private async void SetCurrentWorking(HydroWorkingVmo working) { if (working == null) { return; } this.barEditCurrentWorking.EditValue = working; _currentWorking = working; var allWorkingTupleList = await GetWorkingTupleList(); var tuple = allWorkingTupleList?.Find(x => x.Item1.ID == working.ID); if (tuple == null) { return; } _checkResult = tuple.Item2; _calcuResult = tuple.Item3; } //当前工况发生改变 private void barEditCurrentWorking_EditValueChanged(object sender, EventArgs e) { var working = this.barEditCurrentWorking.EditValue as HydroWorkingVmo; SetCurrentWorking(working); } #endregion #region 工况控件 //工况控件 private HydroWorkingTreeCtrl _workingCtrl = null; //获取工况控件 private async Task GetWorkingCtrl() { if (_workingCtrl == null) { _workingCtrl = new HydroWorkingTreeCtrl(); _workingCtrl.Dock = DockStyle.Fill; var allWorkingList = await GetWorkingList(); _workingCtrl.SetBindingData(allWorkingList); _workingCtrl.FocusedChangedEvent += (vmo) => { }; } return _workingCtrl; } //工况控件是否可见 private bool IsWorkingCtrlVisible { get { if (this.docPnlRight.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible) { if (this.controlContainerRight.Controls.Count > 0) { if (this.controlContainerRight.Controls[0] is HydroWorkingTreeCtrl) { return true; } } } return false; } } //显示工况控件 private async void ShowWorkingCtrl() { if (IsWorkingCtrlVisible) { return; } var workingCtrl = await GetWorkingCtrl(); this.controlContainerRight.Controls.Clear(); this.controlContainerRight.Controls.Add(workingCtrl); this.docPnlRight.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlRight.Text = "工况"; this.docPnlRight.Width = 300; } //隐藏工况控件 private void HideWorkingCtrl() { if (IsWorkingCtrlVisible) { this.docPnlRight.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; } } //更新工况控件 private async void UpdateWorkingCtrl() { var workingCtrl = await GetWorkingCtrl(); var allWorkingList = await GetWorkingList(); workingCtrl.SetBindingData(allWorkingList); } //工况列表点击 private void barBtnWorkingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowWorkingCtrl(); } #endregion #region 工况评估 private void barBtnWorkingEvaluation_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMessageBox.Show("正在开发中,敬请期待!"); } #endregion #region 工况并联 //并联分析 private void barBtnAnaly_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } if (_hydroInfo.Pumps == null || _hydroInfo.Pumps.Count < 1) { return; } var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false); var vmList = new List(); foreach (var pump in _hydroInfo.Pumps) { if (!pump.RatedN.HasValue) { 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); vm.CurveQH = qhPtList; vm.CurveQE = qePtList; vm.CurveQP = qpPtList; if (allCalcuResultList != null && allCalcuResultList.Count > 0) { var calcuResult = allCalcuResultList.Find(x => x.Code == pump.Code) as HydroCalcuLinkResult; if (calcuResult != null) { if (calcuResult.CalcuFlow.HasValue) { vm.CalcuQ = Math.Abs(calcuResult.CalcuFlow.Value); } var calcuResultStart = allCalcuResultList.Find(x => x.Code == pump.StartCode) as HydroCalcuNodeResult; var calcuResultEnd = allCalcuResultList.Find(x => x.Code == pump.EndCode) as HydroCalcuNodeResult; if (calcuResultStart != null && calcuResultEnd != null) { if (calcuResultStart.CalcuHead.HasValue && calcuResultEnd.CalcuHead.HasValue) { vm.CalcuH = Math.Round(Math.Abs(calcuResultStart.CalcuHead.Value - calcuResultEnd.CalcuHead.Value), 4); } } } } } var dlg = new PumpParallelAnalyDlg(); dlg.SetBindingData(vmList); dlg.ReloadDataEvent += (list) => { list?.ForEach(x => { var pump = _hydroInfo.Pumps?.Find(t => t.Code == x.Code); if (pump != null) { pump.LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed; pump.SpeedRatio = Math.Round(x.CurrentHz / pump.RatedHz, 1); } }); ShowSelectedProperty(); return true; }; dlg.ShowDialog(); } #endregion #region 工况能效 private void barBtnWorkingPower_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMessageBox.Show("正在开发中,敬请期待!"); } #endregion #region 损失曲线 private void barBtnWorkingLossCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMessageBox.Show("正在开发中,敬请期待!"); } #endregion #region 损失比例 private void barBtnWorkingLossScale_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMessageBox.Show("正在开发中,敬请期待!"); } #endregion #region 综合分析 private void barBtnWorkingAnaly_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMessageBox.Show("正在开发中,敬请期待!"); } #endregion } }