| | |
| | | using DevExpress.Office.Utils; |
| | | using DevExpress.Xpo.Helpers; |
| | | using DevExpress.Xpo.Helpers; |
| | | using Yw.WinFrmUI.Bimface; |
| | | |
| | | namespace HStation.WinFrmUI |
| | |
| | | public XhsProjectSimulationBimfaceCtrl() |
| | | { |
| | | InitializeComponent(); |
| | | this.bimfaceInterop3dContainer1.LoadCompletedEvent += BimfaceInterop3dContainer1_LoadCompletedEvent; |
| | | this.bimfaceInterop3dContainer1.LoadViewCompletedEvent += BimfaceInterop3dContainer1_LoadViewCompletedEvent; |
| | | this.bimfaceInterop3dContainer1.ClickInEvent += BimfaceInterop3dContainer1_ClickInEvent; |
| | | this.bimfaceInterop3dContainer1.ClickOutEvent += BimfaceInterop3dContainer1_ClickOutEvent; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 水力点击事件 |
| | | /// 水力点击事件(包含左键和右键) |
| | | /// </summary> |
| | | public event Action<Yw.Model.HydroParterInfo> HydroClickEvent; |
| | | /// <summary> |
| | | /// 水力点击事件(仅左键) |
| | | /// </summary> |
| | | public event Action<Yw.Model.HydroParterInfo> HydroMouseLeftClickEvent; |
| | | /// <summary> |
| | | /// 加载完成事件 |
| | | /// </summary> |
| | | public event Action LoadCompletedEvent; |
| | | |
| | | |
| | | //项目 |
| | | private HStation.Vmo.XhsProjectVmo _project = null; |
| | | //项目站 |
| | | private HStation.Vmo.XhsProjectSiteVmo _projectSite = null; |
| | | //获取水力信息方法 |
| | | private Func<Yw.Model.HydroModelInfo> _hydroInfoFunc = null; |
| | | |
| | | //获取Bimface 交互容器 |
| | | private BimfaceInterop3dContainer GetBimfaceInteropContainer() |
| | | { |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | _bimfaceInteropContainer = new BimfaceInterop3dContainer(); |
| | | _bimfaceInteropContainer.Dock = DockStyle.Fill; |
| | | _bimfaceInteropContainer.LoadCompletedEvent += async () => |
| | | { |
| | | if (_projectSite == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance |
| | | .GetDefaultByObjectTypeAndObjectIDOfPurpose |
| | | (HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); |
| | | if (relation == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID); |
| | | if (bimfaceFile == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var viewToken = await BimfaceHelper.GetViewToken(bimfaceFile.BimfaceId); |
| | | if (string.IsNullOrEmpty(viewToken)) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.LoadView(viewToken); |
| | | }; |
| | | _bimfaceInteropContainer.LoadFailedEvent += () => |
| | | { |
| | | TipFormHelper.ShowError("三维模型容器加载失败"); |
| | | }; |
| | | _bimfaceInteropContainer.LoadViewCompletedEvent += () => |
| | | { |
| | | this.LoadCompletedEvent?.Invoke(); |
| | | }; |
| | | _bimfaceInteropContainer.LoadViewFailedEvent += (obj) => |
| | | { |
| | | TipFormHelper.ShowError($"三维模型加载失败"); |
| | | }; |
| | | _bimfaceInteropContainer.ClickInEvent += (obj) => |
| | | { |
| | | if (obj == null) |
| | | { |
| | | return; |
| | | } |
| | | if (this.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); |
| | | } |
| | | }; |
| | | _bimfaceInteropContainer.ClickOutEvent += (obj) => |
| | | { |
| | | this.HydroClickEvent?.Invoke(null); |
| | | }; |
| | | _bimfaceInteropContainer.MouseLeftClickInEvent += (obj) => |
| | | { |
| | | if (obj == null) |
| | | { |
| | | return; |
| | | } |
| | | if (this.HydroMouseLeftClickEvent != null) |
| | | { |
| | | var hydroInfo = _hydroInfoFunc?.Invoke(); |
| | | if (hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | var allParterList = hydroInfo.GetAllParters(); |
| | | var parter = allParterList?.Find(x => x.Code == obj.ObjectId); |
| | | this.HydroMouseLeftClickEvent.Invoke(parter); |
| | | } |
| | | }; |
| | | _bimfaceInteropContainer.MouseLeftClickOutEvent += (obj) => |
| | | { |
| | | this.HydroMouseLeftClickEvent?.Invoke(null); |
| | | }; |
| | | } |
| | | return _bimfaceInteropContainer; |
| | | } |
| | | //bimface 交互容器 |
| | | private BimfaceInterop3dContainer _bimfaceInteropContainer = null; |
| | | |
| | | /// <summary> |
| | | /// 绑定数据 |
| | | /// 初始化数据 |
| | | /// 仅支持调用一次 |
| | | /// </summary> |
| | | public async Task SetBindingData |
| | | public async Task InitialData |
| | | ( |
| | | HStation.Vmo.XhsProjectVmo project, |
| | | HStation.Vmo.XhsProjectSiteVmo projectSite, |
| | |
| | | { |
| | | _projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID); |
| | | } |
| | | await this.bimfaceInterop3dContainer1.InitialContainer(); |
| | | } |
| | | |
| | | //页面加载完成后触发 |
| | | private async void BimfaceInterop3dContainer1_LoadCompletedEvent() |
| | | { |
| | | if (_projectSite == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance |
| | | .GetDefaultByObjectTypeAndObjectIDOfPurpose |
| | | (HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); |
| | | if (relation == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.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); |
| | | var bimfaceInteropContainer = GetBimfaceInteropContainer(); |
| | | this.Controls.Clear(); |
| | | this.Controls.Add(bimfaceInteropContainer); |
| | | await bimfaceInteropContainer.InitialContainer(); |
| | | } |
| | | |
| | | |
| | |
| | | /// <returns></returns> |
| | | public async Task ShowComponents(List<string> elementIds) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ShowComponents(elementIds); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ShowComponents(elementIds); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task HideComponents(List<string> elementIds) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.HideComponents(elementIds); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.HideComponents(elementIds); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task ShowAllComponents() |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ShowAllComponents(); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ShowAllComponents(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// <returns></returns> |
| | | public async Task TranslucentComponents(List<string> elementIds) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.TranslucentComponents(elementIds); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.TranslucentComponents(elementIds); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task OpaqueComponents(List<string> elementIds) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.OpaqueComponents(elementIds); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.OpaqueComponents(elementIds); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// <returns></returns> |
| | | public async Task SetSelectedComponents(List<string> elements) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.SetSelectedComponents(elements); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.SetSelectedComponents(elements); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task AddSelectedComponents(List<string> elements) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.AddSelectedComponents(elements); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.AddSelectedComponents(elements); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task RemoveSelectedComponents(List<string> elements) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.RemoveSelectedComponents(elements); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.RemoveSelectedComponents(elements); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task ClearSelectedComponents() |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ClearSelectedComponents(); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ClearSelectedComponents(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// </summary> |
| | | public async Task ZoomToComponent(string elementId) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ZoomToComponent(elementId); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ZoomToComponent(elementId); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public async Task ZoomToSelectedComponents() |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ZoomToSelectedComponents(); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ZoomToSelectedComponents(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public async Task ZoomAndSelectComponents(List<string> elementIds) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ZoomAndSelectComponents(elementIds); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ZoomAndSelectComponents(elementIds); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// </summary> |
| | | public async Task SetBlinkComponents(List<string> elementIds, string color, double transparency) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.SetBlinkComponents(elementIds, color, transparency); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.SetBlinkComponents(elementIds, color, transparency); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public async Task SetBlinkComponents() |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ClearBlinkComponents(); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ClearBlinkComponents(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// </summary> |
| | | public async Task OverrideComponentsColor(List<string> elementIds, string color, double transparency) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, color, transparency); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.OverrideComponentsColor(elementIds, color, transparency); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public async Task SetBlinkComponents(List<string> elementIds) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.RestoreComponentsColor(elementIds); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.RestoreComponentsColor(elementIds); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// </summary> |
| | | public async Task SetCustomLabels(List<CustomLabel> obj) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.SetCustomLabels(obj); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.SetCustomLabels(obj); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public async Task ClearCustomLabels() |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ClearCustomLabels(); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.ClearCustomLabels(); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region 业务 |
| | | |
| | | |
| | | #region 连接构件颜色 |
| | | |
| | | private const string _linkComponentColor = "#008B00"; |
| | | private const string _linkComponentColor = "#008B00";//连接构件颜色 |
| | | private const string _linkStartComponentColor = "#094EF7";//连接开始构件颜色 |
| | | private const string _linkEndComponentColor = "#ECBF08";//连接结束构件颜色 |
| | | private const double _linkComponentTransparency = 0.8; |
| | | private List<string> _linkComponentIds = null;//连接构件id列表 |
| | | |
| | |
| | | /// </summary> |
| | | public async Task SetLinkComponentsColor(List<string> elementIds) |
| | | { |
| | | if (_linkComponentIds != null && _linkComponentIds.Count > 0) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_linkComponentIds); |
| | | } |
| | | await RestoreLinkComponentsColor(); |
| | | _linkComponentIds = elementIds; |
| | | if (_linkComponentIds == null || _linkComponentIds.Count < 1) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer?.OverrideComponentsColor(_linkComponentIds, _linkComponentColor, _linkComponentTransparency); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 恢复连接构件颜色 |
| | | /// </summary> |
| | | public async Task RestoreLinkComponentsColor() |
| | | { |
| | | if (_linkComponentIds == null || _linkComponentIds.Count < 1) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer?.RestoreComponentsColor(_linkComponentIds); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置连接开始构件颜色 |
| | | /// </summary> |
| | | public async Task SetLinkStartComponentsColor(List<string> elementIds) |
| | | { |
| | | if (elementIds == null || elementIds.Count < 1) |
| | | { |
| | | return; |
| | | } |
| | | await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _linkComponentColor, _linkComponentTransparency); |
| | | if (_linkComponentIds == null) |
| | | { |
| | | _linkComponentIds = new List<string>(); |
| | | } |
| | | _linkComponentIds.AddRange(elementIds); |
| | | await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, _linkStartComponentColor, _linkComponentTransparency); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置连接结束构件颜色 |
| | | /// </summary> |
| | | public async Task SetLinkEndComponentsColor(List<string> elementIds) |
| | | { |
| | | if (elementIds == null || elementIds.Count < 1) |
| | | { |
| | | return; |
| | | } |
| | | if (_linkComponentIds == null) |
| | | { |
| | | _linkComponentIds = new List<string>(); |
| | | } |
| | | _linkComponentIds.AddRange(elementIds); |
| | | await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, _linkEndComponentColor, _linkComponentTransparency); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region 设置Open构件颜色 |
| | | |
| | |
| | | { |
| | | if (_openComponentIds != null && _openComponentIds.Count > 0) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_openComponentIds); |
| | | await _bimfaceInteropContainer.RestoreComponentsColor(_openComponentIds); |
| | | } |
| | | _openComponentIds = elementIds; |
| | | if (elementIds == null || elementIds.Count < 1) |
| | | { |
| | | return; |
| | | } |
| | | await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _openComponentColor, _openComponentTransparency); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.OverrideComponentsColor(elementIds, _openComponentColor, _openComponentTransparency); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | } |
| | | if (!calcuResult.Succeed) |
| | | { |
| | | await this.bimfaceInterop3dContainer1.ClearCustomLabels(); |
| | | await _bimfaceInteropContainer.ClearCustomLabels(); |
| | | return; |
| | | } |
| | | var obj = new List<CustomLabel>(); |
| | |
| | | pumpCustomLabel.Id = pump.Code; |
| | | pumpCustomLabel.Data = new List<CustomLabelItem>() |
| | | { |
| | | new CustomLabelItem(){ Name="运行状态",Value=HydroLinkStatusHelper.GetStatusName(pump.LinkStatus),Unit=string.Empty}, |
| | | new CustomLabelItem(){ Name="状态",Value=HydroLinkStatusHelper.GetStatusName(pump.LinkStatus),Unit=string.Empty}, |
| | | new CustomLabelItem(){ Name="转速",Value=speed?.ToString(),Unit="r/min"}, |
| | | new CustomLabelItem(){ Name="流量",Value=Math.Round(calcuPump.Flow,1).ToString(),Unit="m³/h"}, |
| | | new CustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuPumpStart.Head,4).ToString(),Unit="m"}, |
| | |
| | | obj.Add(emitterCustomLabel); |
| | | } |
| | | }); |
| | | |
| | | await this.bimfaceInterop3dContainer1.SetCustomLabels(obj); |
| | | if (_bimfaceInteropContainer == null) |
| | | { |
| | | return; |
| | | } |
| | | await _bimfaceInteropContainer.SetCustomLabels(obj); |
| | | } |
| | | |
| | | #endregion |