| | |
| | | global using Yw.EPAnet; |
| | | using DevExpress.Mvvm.Native; |
| | | using DevExpress.Xpo.Helpers; |
| | | using DevExpress.XtraRichEdit.Layout; |
| | | using DevExpress.XtraSpreadsheet.Commands; |
| | | using HStation.WinFrmUI.PhartRelation; |
| | | using System.Diagnostics; |
| | | using System.Windows.Media.Media3D; |
| | | using Yw.Pump; |
| | | using Yw.Vmo; |
| | |
| | | { |
| | | return; |
| | | } |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | |
| | | |
| | | var id = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.Save(_hydroInfo); |
| | | |
| | | //耗时巨大的代码 |
| | | |
| | | sw.Stop(); |
| | | TimeSpan ts2 = sw.Elapsed; |
| | | Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds); |
| | | if (id < 1) |
| | | { |
| | | TipFormHelper.ShowError("保存失败!"); |
| | |
| | | |
| | | #region 模型标注 |
| | | |
| | | //所有标注列表 |
| | | private List<HydroMarkSetViewModel> _allMarkList = null; |
| | | //所有标注设置列表 |
| | | private List<HydroMarkSetViewModel> _allMarkSetList = null; |
| | | |
| | | //显示标注窗体 |
| | | private void ShowMarkDlg() |
| | | //获取标注设置列表 |
| | | private List<HydroMarkSetViewModel> GetMarkSetList() |
| | | { |
| | | if (_hydroInfo == null) |
| | | if (_allMarkSetList == null) |
| | | { |
| | | return; |
| | | } |
| | | if (_allMarkList == null) |
| | | { |
| | | _allMarkList = new List<HydroMarkSetViewModel>(); |
| | | _allMarkSetList = new List<HydroMarkSetViewModel>(); |
| | | if (_hydroInfo.Waterboxs != null && _hydroInfo.Waterboxs.Count > 0) |
| | | { |
| | | _allMarkList.Add(new HydroMarkSetViewModel() |
| | | _allMarkSetList.Add(new HydroMarkSetViewModel() |
| | | { |
| | | Code = Yw.Hydro.ParterCatalog.Waterbox, |
| | | Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Waterbox), |
| | |
| | | } |
| | | if (_hydroInfo.Pumps != null && _hydroInfo.Pumps.Count > 0) |
| | | { |
| | | _allMarkList.Add(new HydroMarkSetViewModel() |
| | | _allMarkSetList.Add(new HydroMarkSetViewModel() |
| | | { |
| | | Code = Yw.Hydro.ParterCatalog.Pump, |
| | | Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Pump), |
| | |
| | | } |
| | | if (_hydroInfo.Valves != null && _hydroInfo.Valves.Count > 0) |
| | | { |
| | | _allMarkList.Add(new HydroMarkSetViewModel() |
| | | _allMarkSetList.Add(new HydroMarkSetViewModel() |
| | | { |
| | | Code = Yw.Hydro.ParterCatalog.Valve, |
| | | Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Valve), |
| | |
| | | } |
| | | if (_hydroInfo.Pipes != null && _hydroInfo.Pipes.Count > 0) |
| | | { |
| | | _allMarkList.Add(new HydroMarkSetViewModel() |
| | | _allMarkSetList.Add(new HydroMarkSetViewModel() |
| | | { |
| | | Code = Yw.Hydro.ParterCatalog.Pipe, |
| | | Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Pipe), |
| | |
| | | } |
| | | if (_hydroInfo.Nozzles != null && _hydroInfo.Nozzles.Count > 0) |
| | | { |
| | | _allMarkList.Add(new HydroMarkSetViewModel() |
| | | _allMarkSetList.Add(new HydroMarkSetViewModel() |
| | | { |
| | | Code = Yw.Hydro.ParterCatalog.Nozzle, |
| | | Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Nozzle), |
| | |
| | | }); |
| | | } |
| | | } |
| | | var dlg = new SetHydroMarkDlg(); |
| | | dlg.SetBindingData(_hydroInfo, _allMarkList); |
| | | dlg.ReloadDataEvent += async (allResultList) => |
| | | return _allMarkSetList; |
| | | } |
| | | |
| | | //所有标注结果列表 |
| | | private List<HydroMarkResultViewModel> _allMarkResultList = null; |
| | | |
| | | //获取标注结果列表 |
| | | private List<HydroMarkResultViewModel> GetMarkResultList() |
| | | { |
| | | if (_hydroInfo == null) |
| | | { |
| | | var leadLabels = allResultList?.Select(x => new LogicMarkLeadLabel(x.Code, x.Text, 100000)).ToList(); |
| | | await _bimfaceCtrl?.SetLogicMarkLeadLabels(leadLabels); |
| | | return default; |
| | | } |
| | | _allMarkResultList = new List<HydroMarkResultViewModel>(); |
| | | var allMarkSetList = GetMarkSetList(); |
| | | foreach (var markSet in allMarkSetList) |
| | | { |
| | | switch (markSet.Code) |
| | | { |
| | | case Yw.Hydro.ParterCatalog.Waterbox: |
| | | { |
| | | if (_hydroInfo.Waterboxs != null && _hydroInfo.Waterboxs.Count > 0) |
| | | { |
| | | switch ((eWaterboxMarkType)markSet.MarkType) |
| | | { |
| | | case eWaterboxMarkType.None: |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case eWaterboxMarkType.PoolElev: |
| | | { |
| | | _hydroInfo.Waterboxs.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"池底标高:{Math.Round(t.PoolElev, 4)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eWaterboxMarkType.InitLevel: |
| | | { |
| | | _hydroInfo.Waterboxs.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"初始水位:{Math.Round(t.InitLevel, 4)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eWaterboxMarkType.MinLevel: |
| | | { |
| | | _hydroInfo.Waterboxs.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"最小水位:{Math.Round(t.MinLevel, 4)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eWaterboxMarkType.MaxLevel: |
| | | { |
| | | _hydroInfo.Waterboxs.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"最高水位:{Math.Round(t.MaxLevel, 4)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eWaterboxMarkType.DN: |
| | | { |
| | | _hydroInfo.Waterboxs.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"直径:{Math.Round(t.DN, 4)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eWaterboxMarkType.MinVol: |
| | | { |
| | | _hydroInfo.Waterboxs.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"最小容积:{Math.Round(t.MinVol, 1)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case Yw.Hydro.ParterCatalog.Pump: |
| | | { |
| | | if (_hydroInfo.Pumps != null && _hydroInfo.Pumps.Count > 0) |
| | | { |
| | | switch ((ePumpMarkType)markSet.MarkType) |
| | | { |
| | | case ePumpMarkType.None: |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case ePumpMarkType.PumpStatus: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"开机状态:{Yw.WinFrmUI.HydroLinkStatusHelper.GetStatusName(t.LinkStatus)}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.RatedP: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"额定功率:{t.RatedP}kW" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.RatedQ: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"额定流量:{t.RatedQ}m³/h" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.RatedH: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"额定扬程:{t.RatedH}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.RatedN: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"额定转速:{t.RatedN}r/min" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.RatedHz: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"额定频率:{t.RatedHz}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.CurrentN: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | if (t.RatedN.HasValue) |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"设定转速:{Math.Round(t.RatedN.Value * t.SpeedRatio, 1)}r/min" |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | break; |
| | | case ePumpMarkType.CurrentHz: |
| | | { |
| | | _hydroInfo.Pumps.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"设定频率:{Math.Round(t.RatedHz * t.SpeedRatio, 1)}hz" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case Yw.Hydro.ParterCatalog.Valve: |
| | | { |
| | | if (_hydroInfo.Valves != null && _hydroInfo.Valves.Count > 0) |
| | | { |
| | | switch ((eValveMarkType)markSet.MarkType) |
| | | { |
| | | case eValveMarkType.None: |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case eValveMarkType.ValveStatus: |
| | | { |
| | | _hydroInfo.Valves.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"阀门状态:{HydroLinkStatusHelper.GetStatusName(t.LinkStatus)}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eValveMarkType.ValveType: |
| | | { |
| | | _hydroInfo.Valves.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"阀门类型:{HydroValveTypeHelper.GetTypeName(t.ValveType)}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eValveMarkType.Diameter: |
| | | { |
| | | _hydroInfo.Valves.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"直径:{t.Diameter}mm" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eValveMarkType.MinorLoss: |
| | | { |
| | | _hydroInfo.Valves.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"局阻系数:{t.MinorLoss}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case Yw.Hydro.ParterCatalog.Pipe: |
| | | { |
| | | if (_hydroInfo.Pipes != null && _hydroInfo.Pipes.Count > 0) |
| | | { |
| | | switch ((ePipeMarkType)markSet.MarkType) |
| | | { |
| | | case ePipeMarkType.None: |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case ePipeMarkType.PipeStatus: |
| | | { |
| | | _hydroInfo.Pipes.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"状态:{Yw.WinFrmUI.HydroLinkStatusHelper.GetStatusName(t.LinkStatus)}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePipeMarkType.Diameter: |
| | | { |
| | | _hydroInfo.Pipes.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"直径:{t.Diameter}mm" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePipeMarkType.Length: |
| | | { |
| | | _hydroInfo.Pipes.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"长度:{t.Length}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePipeMarkType.Roughness: |
| | | { |
| | | _hydroInfo.Pipes.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"粗糙系数:{t.Roughness}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case ePipeMarkType.MinorLoss: |
| | | { |
| | | _hydroInfo.Pipes.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"局阻系数:{t.MinorLoss}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case Yw.Hydro.ParterCatalog.Nozzle: |
| | | { |
| | | if (_hydroInfo.Nozzles != null && _hydroInfo.Nozzles.Count > 0) |
| | | { |
| | | switch ((eNozzleMarkType)markSet.MarkType) |
| | | { |
| | | case eNozzleMarkType.None: |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case eNozzleMarkType.Elev: |
| | | { |
| | | _hydroInfo.Nozzles.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"标高:{Math.Round(t.Elev, 4)}m" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eNozzleMarkType.Demand: |
| | | { |
| | | _hydroInfo.Nozzles.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"需水量:{t.Demand}m³/h" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | case eNozzleMarkType.Coefficient: |
| | | { |
| | | _hydroInfo.Nozzles.ForEach(t => |
| | | { |
| | | _allMarkResultList.Add(new HydroMarkResultViewModel() |
| | | { |
| | | Code = t.Code, |
| | | Text = $"喷射系数:{t.Coefficient}" |
| | | }); |
| | | }); |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | } |
| | | return _allMarkResultList; |
| | | } |
| | | |
| | | //应用标注结果列表 |
| | | private async Task ApplyMarkResultList() |
| | | { |
| | | var allMarkResultList = GetMarkResultList(); |
| | | var leadLabels = allMarkResultList?.Select(x => new LogicMarkLeadLabel(x.Code, x.Text, 100000)).ToList(); |
| | | await _bimfaceCtrl?.SetLogicMarkLeadLabels(leadLabels); |
| | | TipFormHelper.ShowSucceed("标注信息已设置"); |
| | | } |
| | | |
| | | //清除标注结果列表 |
| | | private async Task ClearMarkResultList() |
| | | { |
| | | if (_allMarkResultList == null || _allMarkResultList.Count < 1) |
| | | { |
| | | TipFormHelper.ShowWarn("尚未设置标注信息"); |
| | | return; |
| | | } |
| | | _allMarkResultList = null; |
| | | await _bimfaceCtrl?.ClearLogicMarkLeadLabels(); |
| | | TipFormHelper.ShowSucceed("标注信息已清除"); |
| | | } |
| | | |
| | | //显示标注设置窗体 |
| | | private void ShowMarkSetDlg() |
| | | { |
| | | if (_hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | var allMarkSetList = GetMarkSetList(); |
| | | var dlg = new SetHydroMarkDlg(); |
| | | dlg.SetBindingData(allMarkSetList); |
| | | dlg.ReloadDataEvent += async (list) => |
| | | { |
| | | _allMarkSetList = list; |
| | | await ApplyMarkResultList(); |
| | | }; |
| | | dlg.ShowDialog(); |
| | | } |
| | |
| | | //设置标注 |
| | | private void barBtnSetMark_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | ShowMarkDlg(); |
| | | ShowMarkSetDlg(); |
| | | } |
| | | |
| | | //清除标注 |
| | | private async void barBtnClearMark_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | await ClearMarkResultList(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | } |
| | | var hydroRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance |
| | | .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | _hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(hydroRelation.ModelID); |
| | | sw.Stop(); |
| | | TimeSpan ts2 = sw.Elapsed; |
| | | Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds); |
| | | _parter = null; |
| | | await _bimfaceCtrl?.ZoomAndSelectComponents(null); |
| | | ShowProperty(); |
| | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 水流动画 |
| | | |
| | | //加载流向 |
| | | private async void barBtnLoadFlowDirection_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | var pipes = _hydroInfo.Pipes; |
| | | var list = pipes.Select(x => |
| | | { |
| | | return new Yw.WinFrmUI.Bimface.LogicFlowEffect() |
| | | { |
| | | Id = x.Code, |
| | | Rotation = 90, |
| | | Speed = 0.1d |
| | | }; |
| | | }).ToList(); |
| | | await _bimfaceCtrl?.LoadFlowEffect(list); |
| | | } |
| | | |
| | | //卸载流向 |
| | | private async void barBtnUnloadFlowDirection_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | await _bimfaceCtrl?.UnloadFlowEffect(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | } |
| | | } |