using DevExpress.Office.Utils; using DevExpress.Xpo.Helpers; using Yw.WinFrmUI.Bimface; namespace HStation.WinFrmUI { public partial class XhsProjectSimulationBimfaceCtrl : DevExpress.XtraEditors.XtraUserControl { public XhsProjectSimulationBimfaceCtrl() { InitializeComponent(); this.bimfaceInterop3dContainer1.LoadCompletedEvent += BimfaceInterop3dContainer1_LoadCompletedEvent; this.bimfaceInterop3dContainer1.LoadViewCompletedEvent += BimfaceInterop3dContainer1_LoadViewCompletedEvent; this.bimfaceInterop3dContainer1.ClickInEvent += BimfaceInterop3dContainer1_ClickInEvent; this.bimfaceInterop3dContainer1.ClickOutEvent += BimfaceInterop3dContainer1_ClickOutEvent; } /// /// 水力点击事件 /// public event Action HydroClickEvent; /// /// 加载完成事件 /// public event Action LoadCompletedEvent; private HStation.Vmo.XhsProjectVmo _project = null; private HStation.Vmo.XhsProjectSiteVmo _projectSite = null; private Func _hydroInfoFunc = null; /// /// 绑定数据 /// public async Task SetBindingData ( HStation.Vmo.XhsProjectVmo project, HStation.Vmo.XhsProjectSiteVmo projectSite, Func hydroInfoFunc ) { if (project == null) { return; } _project = project; _projectSite = projectSite; _hydroInfoFunc = hydroInfoFunc; if (_projectSite == null) { _projectSite = await BLLFactory.Instance.GetDefaultByProjectID(_project.ID); } await this.bimfaceInterop3dContainer1.InitialContainer(); } //页面加载完成后触发 private async void BimfaceInterop3dContainer1_LoadCompletedEvent() { if (_projectSite == null) { return; } var relation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose (HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); if (relation == null) { return; } var bimfaceFile = await BLLFactory.Instance.GetByID(relation.BimfaceFileID); if (bimfaceFile == null) { return; } var viewToken = await BimfaceHelper.GetViewToken(bimfaceFile.BimfaceId); if (string.IsNullOrEmpty(viewToken)) { return; } await this.bimfaceInterop3dContainer1.LoadView(viewToken); } //页面视图加载完成后触发 private void BimfaceInterop3dContainer1_LoadViewCompletedEvent() { this.LoadCompletedEvent?.Invoke(); } //内部点击 private void BimfaceInterop3dContainer1_ClickInEvent(Yw.WinFrmUI.Bimface.ClickIn3dInfo obj) { if (obj == null) { return; } if (HydroClickEvent != null) { var hydroInfo = _hydroInfoFunc?.Invoke(); if (hydroInfo == null) { return; } var allParterList = hydroInfo.GetAllParters(); var parter = allParterList?.Find(x => x.Code == obj.ObjectId); this.HydroClickEvent.Invoke(parter); } } //外部点击 private void BimfaceInterop3dContainer1_ClickOutEvent(ClickOut3dInfo obj) { this.HydroClickEvent?.Invoke(null); } #region 构件的显示与隐藏 /// /// 显示构件 /// /// 构件id列表 /// public async Task ShowComponents(List elementIds) { await this.bimfaceInterop3dContainer1.ShowComponents(elementIds); } /// /// 隐藏构件 /// /// 构件id列表 /// public async Task HideComponents(List elementIds) { await this.bimfaceInterop3dContainer1.HideComponents(elementIds); } /// /// 显示所有构件 /// /// public async Task ShowAllComponents() { await this.bimfaceInterop3dContainer1.ShowAllComponents(); } #endregion #region 构件的半透明与取消 /// /// 半透明构件 /// /// 构件id列表 /// public async Task TranslucentComponents(List elementIds) { await this.bimfaceInterop3dContainer1.TranslucentComponents(elementIds); } /// /// 取消构件半透明 /// /// 构件id列表 /// public async Task OpaqueComponents(List elementIds) { await this.bimfaceInterop3dContainer1.OpaqueComponents(elementIds); } #endregion #region 构件的选中与取消 /// /// 设置选择的构件 /// /// public async Task SetSelectedComponents(List elements) { await this.bimfaceInterop3dContainer1.SetSelectedComponents(elements); } /// /// 增加选择的构件 /// /// /// public async Task AddSelectedComponents(List elements) { await this.bimfaceInterop3dContainer1.AddSelectedComponents(elements); } /// /// 移除选择的构件 /// /// /// public async Task RemoveSelectedComponents(List elements) { await this.bimfaceInterop3dContainer1.RemoveSelectedComponents(elements); } /// /// 清除选择的构件 /// /// /// public async Task ClearSelectedComponents() { await this.bimfaceInterop3dContainer1.ClearSelectedComponents(); } #endregion #region 缩放 /// /// 缩放至构件 /// public async Task ZoomToComponent(string elementId) { await this.bimfaceInterop3dContainer1.ZoomToComponent(elementId); } /// /// 缩放至选择构件 /// public async Task ZoomToSelectedComponents() { await this.bimfaceInterop3dContainer1.ZoomToSelectedComponents(); } /// /// 缩放至选择构件 /// public async Task ZoomAndSelectComponents(List elementIds) { await this.bimfaceInterop3dContainer1.ZoomAndSelectComponents(elementIds); } #endregion #region 强调构件 /// /// 设置强调构件 /// public async Task SetBlinkComponents(List elementIds, string color, double transparency) { await this.bimfaceInterop3dContainer1.SetBlinkComponents(elementIds, color, transparency); } /// /// 清除强调构件 /// public async Task SetBlinkComponents() { await this.bimfaceInterop3dContainer1.ClearBlinkComponents(); } #endregion #region 构件着色 /// /// 设置强调构件 /// public async Task OverrideComponentsColor(List elementIds, string color, double transparency) { await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, color, transparency); } /// /// 恢复构件颜色 /// public async Task SetBlinkComponents(List elementIds) { await this.bimfaceInterop3dContainer1.RestoreComponentsColor(elementIds); } #endregion #region 自定义标签 /// /// 设置自定义标签 /// public async Task SetCustomLabels(List obj) { await this.bimfaceInterop3dContainer1.SetCustomLabels(obj); } /// /// 清除自定义标签 /// public async Task ClearCustomLabels() { await this.bimfaceInterop3dContainer1.ClearCustomLabels(); } #endregion #region 业务 #region 连接构件颜色 private const string _linkComponentColor = "#008B00"; private const double _linkComponentTransparency = 0.8; private List _linkComponentIds = null;//连接构件id列表 /// /// 设置连接构件颜色 /// public async Task SetLinkComponentsColor(List elementIds) { if (_linkComponentIds != null && _linkComponentIds.Count > 0) { await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_linkComponentIds); } _linkComponentIds = elementIds; if (elementIds == null || elementIds.Count < 1) { return; } await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _linkComponentColor, _linkComponentTransparency); } #endregion #region 设置Open构件颜色 private const string _openComponentColor = "#2E8B57"; private const double _openComponentTransparency = 0.8; private List _openComponentIds = null;//Open构件id列表 /// /// 设置Open构件颜色 /// public async Task SetOpenComponentsColor(List elementIds) { if (_openComponentIds != null && _openComponentIds.Count > 0) { await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_openComponentIds); } _openComponentIds = elementIds; if (elementIds == null || elementIds.Count < 1) { return; } await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _openComponentColor, _openComponentTransparency); } #endregion #region 自定义标签 /// /// 显示计算自定义标签 /// public async Task ShowCalcuCustomLabels(CalcuResult calcuResult) { var hydroInfo = _hydroInfoFunc?.Invoke(); if (hydroInfo == null) { return; } if (calcuResult == null) { return; } if (!calcuResult.Succeed) { await this.bimfaceInterop3dContainer1.ClearCustomLabels(); return; } var obj = new List(); var allParterList = hydroInfo.GetAllParters(); allParterList?.ForEach(x => { if (x is Yw.Model.HydroPumpInfo pump) { var calcuPump = calcuResult.LinkList.Find(x => x.Id == pump.Code); var calcuPumpStart = calcuResult.NodeList.Find(x => x.Id == pump.StartCode); var calcuPumpEnd = calcuResult.NodeList.Find(x => x.Id == pump.EndCode); var pumpCustomLabel = new CustomLabel(); pumpCustomLabel.Id = pump.Code; pumpCustomLabel.Data = new List() { new CustomLabelItem(){ Name="流量",Value=Math.Round(calcuPump.Flow,1).ToString(),Unit="m³/h"}, new CustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuPumpStart.Head,4).ToString(),Unit="Mpa"}, new CustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuPumpEnd.Head,4).ToString(),Unit="Mpa"}, }; obj.Add(pumpCustomLabel); } else if (x is Yw.Model.HydroEmitterInfo emitter) { } }); await this.bimfaceInterop3dContainer1.SetCustomLabels(obj); } #endregion #endregion } }