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;
|
this.assetsMainChoicePage1.FormRowClickEvent += xhsProjectSimulationHydroCheckFailedCtrl1_HydroClickEvent;
|
}
|
|
private HStation.Vmo.XhsProjectVmo _project = null;//项目
|
private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;//项目站
|
private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
|
private List<string> _fastShowHideCodeList = null;//显隐编码列表
|
|
private Yw.Model.HydroParterInfo _parter = null;
|
private Yw.EPAnet.CheckResult _checkResult = null;
|
private Yw.EPAnet.CalcuResult _calcuResult = null;
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
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<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
|
}
|
if (_hydroInfo == null)
|
{
|
var hydroRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
|
_hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(hydroRelation.ModelID);
|
}
|
this.xhsProjectSimulationQ3dCtrl1.SetBindingData(_hydroInfo);
|
this.xhsProjectSimulationL3dCtrl1.SetBindingData(_hydroInfo);
|
}
|
|
/// <summary>
|
/// 初始化数据
|
/// </summary>
|
public override async void InitialDataSource()
|
{
|
base.InitialDataSource();
|
if (_project == null)
|
{
|
return;
|
}
|
this.PageTitle.Caption = $"{_project.Name}\r\n水力模拟";
|
await this.xhsProjectSimulationBimfaceCtrl1.SetBindingData(_project, _projectSite);
|
}
|
|
//属性面板获取水力信息事件
|
private Yw.Model.HydroModelInfo xhsProjectSimulationPropertyCtrl1_GetHydroInfoEvent()
|
{
|
return _hydroInfo;
|
}
|
|
//一键显隐
|
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;
|
}
|
}
|
|
|
|
//水力计算
|
private 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("计算成功!");
|
return;
|
}
|
this.xhsProjectSimulationHydroCalcuFailedCtrl1.SetBindingData(_calcuResult.FailedList);
|
this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
|
this.docPnlHydroCalcu.Height = 350;
|
}
|
|
//水力构件列表
|
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 void barBtnAllAutoMatching_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (_hydroInfo == null)
|
{
|
return;
|
}
|
var input = new AssetsAutoMatchingViewModel();
|
input.PumpMatchingModels = _hydroInfo.Pumps?.Select(x => new PumpMatchingViewModel()
|
{
|
ID = x.ID,
|
Code = x.Code,
|
Name = x.Name,
|
DbID = x.DbId,
|
DbLocked = x.DbLocked,
|
ChartDbID = _hydroInfo.Curves?.Find(t => t.Code == x.CurveQH)?.DbId,
|
ModelType = x.ModelType,
|
RatedP = x.RatedP,
|
RatedH = x.RatedH,
|
RatedN = x.RatedN,
|
RatedQ = x.RatedQ,
|
}).ToList();
|
input.ElbowsMatchingModels = _hydroInfo.Elbows?.Select(x => new ElbowsMatchingViewModel()
|
{
|
ID = x.ID,
|
Name = x.Name,
|
Code = x.Code,
|
Dbid = x.DbId,
|
DbLocked = x.DbLocked,
|
ModelType = x.ModelType,
|
Caliber = x.Caliber,
|
Material = x.Material
|
}).ToList();
|
input.ThreeLinkMatchingModels = _hydroInfo.Threelinks?.Select(x => new ThreeLinkMatchingViewModel()
|
{
|
ID = x.ID,
|
Name = x.Name,
|
Code = x.Code,
|
DbId = x.DbId,
|
DbLocked = x.DbLocked,
|
ModelType = x.ModelType,
|
Caliber = x.Caliber,
|
Material = x.Material
|
}).ToList();
|
input.FourLinkMatchingModels = _hydroInfo.Fourlinks?.Select(x => new FourLinkMatchingViewModel()
|
{
|
ID = x.ID,
|
Name = x.Name,
|
Code = x.Code,
|
Dbid = x.DbId,
|
DbLocked = x.DbLocked,
|
ModelType = x.ModelType,
|
Caliber = x.Caliber,
|
Material = x.Material
|
}).ToList();
|
input.PipeLineMatchingModels = _hydroInfo.Pipes?.Select(x => new PipeLineMatchingViewModel()
|
{
|
ID = x.ID,
|
Name = x.Name,
|
Code = x.Code,
|
DbId = x.DbId,
|
DbLocked = x.DbLocked,
|
ModelType = x.ModelType,
|
Caliber = x.Diameter,//这里是数值
|
Material = x.Material
|
}).ToList();
|
|
input.ValveMatchingModels = _hydroInfo.Pipes?.Select(x => new ValveMatchingViewModel()
|
{
|
ID = x.ID,
|
Name = x.Name,
|
Code = x.Code,
|
DbId = x.DbId,
|
DbLocked = x.DbLocked,
|
ModelType = x.ModelType,
|
Caliber = x.Diameter,//这里是数值
|
Material = x.Material//怎么没有阀门类型
|
}).ToList();
|
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.hydroParterListCtrl1.SetBindingData(_hydroInfo);
|
this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden;
|
this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
|
this.docPnlMatchingList.Height = 350;
|
this.assetsMainChoicePage1.SetBindingData(input);
|
this.assetsMainChoicePage1.RelaodEvent += (rhs) =>
|
{
|
return false;
|
};
|
}
|
|
|
|
//水力构件明细面板点击事件
|
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<string>() { _parter.Code });
|
ShowProperty();
|
}
|
|
#region Bimface
|
|
//bimface 构件点击
|
private void xhsProjectSimulationBimfaceCtrl1_ClickParterEvent(string objectId)
|
{
|
if (_hydroInfo == null)
|
{
|
return;
|
}
|
var allParterList = _hydroInfo.GetAllParters();
|
_parter = allParterList.Find(x => x.Code == objectId);
|
ShowProperty();
|
SetBimfaceLinkColor();
|
}
|
|
|
#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<string>() { _parter.Code };
|
await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds);
|
ShowProperty();
|
}
|
|
#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.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden;
|
this.docPnlMatchingList.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<string>() { _parter.Code };
|
await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds);
|
ShowProperty();
|
}
|
|
//未匹配列表查看模型
|
private async void xhsProjectSimulationUnMatchingListCtrl1_ViewModelEvent(List<Yw.Model.HydroParterInfo> parters)
|
{
|
var codes = parters?.Select(x => x.Code).Distinct().ToList();
|
await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(codes);
|
_parter = null;
|
ShowProperty();
|
}
|
|
|
#endregion
|
|
#region 保存水力信息
|
|
//保存
|
private async void barBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (_hydroInfo == null)
|
{
|
return;
|
}
|
var id = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.Save(_hydroInfo);
|
if (id < 1)
|
{
|
TipFormHelper.ShowError("保存失败!");
|
return;
|
}
|
_hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.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);
|
}
|
}
|
}
|
}
|
}
|
|
//设置Bimface连接颜色
|
private async void SetBimfaceLinkColor()
|
{
|
if (_hydroInfo == null)
|
{
|
return;
|
}
|
List<string> elementIds = null;
|
if (_parter != null)
|
{
|
if (_parter is Yw.Model.HydroLinkInfo linker)
|
{
|
elementIds = new List<string>() { linker.StartCode, linker.EndCode };
|
}
|
}
|
await this.xhsProjectSimulationBimfaceCtrl1.SetLinkComponentsColor(elementIds);
|
}
|
|
#endregion
|
|
}
|
}
|