using Yw.WinFrmUI.Bimface; namespace HStation.WinFrmUI { public partial class XhsProjectSimulationBimfaceCtrl : DevExpress.XtraEditors.XtraUserControl, ISimulationFlowEffectView, ISimulationVisualVisibleView, ISimulationMonitorMarkerView, ISimulationCalcuResultLabelView, ISimulationMarkView, ISimulationGradingView { public XhsProjectSimulationBimfaceCtrl() { InitializeComponent(); } #region 事件集 /// /// 水力点击事件 /// 包含左键和右键 /// public event Action HydroClickEvent; /// /// 水力点击事件 /// 仅左键 /// public event Action HydroMouseLeftClickEvent; /// /// 加载完成事件 /// public event Action LoadCompletedEvent; #endregion //项目 private XhsProjectVmo _project = null; //项目站 private XhsProjectSiteVmo _projectSite = null; /// /// 初始化数据 /// 仅支持调用一次 /// public async Task InitialData(XhsProjectVmo project, XhsProjectSiteVmo projectSite) { if (project == null) { return; } _project = project; _projectSite = projectSite; if (_projectSite == null) { _projectSite = await BLLFactory.Instance.GetDefaultByProjectID(_project.ID); } var bimfaceInteropContainer = GetBimfaceInteropContainer(); this.Controls.Clear(); this.Controls.Add(bimfaceInteropContainer); await bimfaceInteropContainer.InitialContainer(); } #region 交互容器 //bimface 交互容器 private BimfaceInterop3dContainer _bimfaceInteropContainer = 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.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 _bimfaceInteropContainer.LoadView(viewToken); }; _bimfaceInteropContainer.LoadFailedEvent += () => { TipFormHelper.ShowError("三维模型容器加载失败"); }; _bimfaceInteropContainer.LoadViewCompletedEvent += () => { this.LoadCompletedEvent?.Invoke(); }; _bimfaceInteropContainer.LoadViewFailedEvent += (obj) => { TipFormHelper.ShowError($"三维模型加载失败"); }; _bimfaceInteropContainer.ClickInEvent += (obj) => { if (obj == null) { return; } this.HydroClickEvent?.Invoke(obj.ObjectId); }; _bimfaceInteropContainer.ClickOutEvent += (obj) => { this.HydroClickEvent?.Invoke(null); }; _bimfaceInteropContainer.MouseLeftClickInEvent += (obj) => { if (obj == null) { return; } this.HydroMouseLeftClickEvent?.Invoke(obj.ObjectId); }; _bimfaceInteropContainer.MouseLeftClickOutEvent += (obj) => { this.HydroMouseLeftClickEvent?.Invoke(null); }; } return _bimfaceInteropContainer; } #endregion #region 显示与隐藏 /// /// 显示构件 /// public async Task ShowComponents(List elementIds) { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.ShowComponents(elementIds); } /// /// 隐藏构件 /// public async Task HideComponents(List elementIds) { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.HideComponents(elementIds); } /// /// 显示所有构件 /// public async Task ShowAllComponents() { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.ShowAllComponents(); } #endregion #region 半透明 /// /// 半透明 /// public async Task TranslucentComponents(List codes) { await _bimfaceInteropContainer?.TranslucentComponents(codes); } /// /// 取消半透明 /// public async Task OpaqueComponents(List codes) { await _bimfaceInteropContainer?.OpaqueComponents(codes); } #endregion #region 构件的选中与取消 /// /// 设置选择的构件 /// /// public async Task SetSelectedComponents(List elements) { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.SetSelectedComponents(elements); } /// /// 增加选择的构件 /// /// /// public async Task AddSelectedComponents(List elements) { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.AddSelectedComponents(elements); } /// /// 移除选择的构件 /// /// /// public async Task RemoveSelectedComponents(List elements) { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.RemoveSelectedComponents(elements); } /// /// 清除选择的构件 /// /// /// public async Task ClearSelectedComponents() { if (_bimfaceInteropContainer == null) { return; } await _bimfaceInteropContainer.ClearSelectedComponents(); } #endregion #region 缩放与选择 /// /// 缩放至构件 /// public async Task ZoomToComponent(string code) { await _bimfaceInteropContainer?.ZoomToComponent(code); } /// /// 缩放至选择构件 /// public async Task ZoomToSelectedComponents() { await _bimfaceInteropContainer?.ZoomToSelectedComponents(); } /// /// 缩放至选择构件 /// public async Task ZoomAndSelectComponent(string code) { if (string.IsNullOrEmpty(code)) { return; } await _bimfaceInteropContainer?.ZoomAndSelectComponents(new List() { code }); } /// /// 缩放至选择构件 /// public async Task ZoomAndSelectComponents(List codes) { await _bimfaceInteropContainer?.ZoomAndSelectComponents(codes); } #endregion #region 强调构件 private const string _blinkColor = "#32D3A6";//强调构件颜色 private const double _blinkTransparency = 0.8d; //强调构件透明度 /// /// 设置强调构件 /// public async Task SetBlinkComponents(string elementId, string color = _blinkColor, double transparency = _blinkTransparency) { if (string.IsNullOrEmpty(elementId)) { return; } await _bimfaceInteropContainer?.SetBlinkComponents(new List() { elementId }, color, transparency); } /// /// 设置强调构件 /// public async Task SetBlinkComponents(List elementIds, string color = _blinkColor, double transparency = _blinkTransparency) { if (elementIds == null || elementIds.Count < 1) { return; } await _bimfaceInteropContainer?.SetBlinkComponents(elementIds, color, transparency); } /// /// 清除强调构件 /// public async Task ClearBlinkComponents() { await _bimfaceInteropContainer?.ClearBlinkComponents(); } #endregion #region 构件着色 /// /// 设置强调构件 /// public async Task OverrideComponentsColor(List elementIds, string color, double transparency) { await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, color, transparency); } /// /// 设置强调构件 /// public async Task OverrideComponentsColor(string elementId, string color, double transparency) { if (string.IsNullOrEmpty(elementId)) { return; } await _bimfaceInteropContainer.OverrideComponentsColor(new List() { elementId }, color, transparency); } /// /// 恢复构件颜色 /// public async Task RestoreComponentsColor(List elementIds) { await _bimfaceInteropContainer?.RestoreComponentsColor(elementIds); } /// /// 恢复构件颜色 /// public async Task RestoreComponentsColor(string elementId) { if (string.IsNullOrEmpty(elementId)) { return; } await _bimfaceInteropContainer?.RestoreComponentsColor(new List() { elementId }); } #endregion #region 业务计算自定义标签 /// /// 设置业务计算自定义标签 /// public async Task SetLogicCalcuCustomLabels(List obj) { await _bimfaceInteropContainer?.SetLogicCalcuCustomLabels(obj); } /// /// 清除业务计算自定义标签 /// public async Task ClearLogicCalcuCustomLabels() { await _bimfaceInteropContainer?.ClearLogicCalcuCustomLabels(); } #endregion #region 模型标注 /// /// 设置业务标注引线标签 /// public async Task SetLogicMarkLeadLabels(List obj) { await _bimfaceInteropContainer?.SetLogicMarkLeadLabels(obj); } /// /// 更新业务标注引线标签 /// public async Task UpdateLogicMarkLeadLabel(LogicMarkLeadLabel obj) { await _bimfaceInteropContainer?.UpdateLogicMarkLeadLabel(obj); } /// /// 更新业务标注引线标签 /// public async Task UpdateLogicMarkLeadLabels(List obj) { await _bimfaceInteropContainer?.UpdateLogicMarkLeadLabels(obj); } /// /// 清除业务标注引线标签 /// public async Task ClearLogicMarkLeadLabels() { await _bimfaceInteropContainer?.ClearLogicMarkLeadLabels(); } #endregion #region 水流动画 /// /// 加载水流动画 /// public async Task LoadFlowEffect(LogicFlowEffect obj) { await _bimfaceInteropContainer?.LoadFlowEffect(obj); } /// /// 加载水流动画 /// public async Task LoadFlowEffect(List obj) { await _bimfaceInteropContainer?.LoadFlowEffectList(obj); } /// /// 更新水流动画 /// public async Task UpdateFlowEffect(LogicFlowEffect obj) { await _bimfaceInteropContainer?.UpdateFlowEffect(obj); } /// /// 更新水流动画 /// public async Task UpdateFlowEffectList(List obj) { await _bimfaceInteropContainer?.UpdateFlowEffectList(obj); } /// /// 卸载水流动画 /// public async Task UnloadFlowEffect() { await _bimfaceInteropContainer?.UnloadFlowEffect(); } /// /// 通过Id卸载水流动画 /// public async Task UnloadFlowEffectById(string Id) { await _bimfaceInteropContainer?.UnloadFlowEffectById(Id); } #endregion #region 连接构件颜色 private const string _linkComponentColor = "#008B00";//连接构件颜色 private const string _linkStartComponentColor = "#094EF7";//连接开始构件颜色 private const string _linkEndComponentColor = "#ECBF08";//连接结束构件颜色 private const double _linkComponentTransparency = 0.8; private List _linkComponentIds = null;//连接构件id列表 /// /// 设置连接构件颜色 /// public async Task SetLinkComponentsColor(List elementIds) { await RestoreLinkComponentsColor(); _linkComponentIds = elementIds; if (_linkComponentIds == null || _linkComponentIds.Count < 1) { return; } await _bimfaceInteropContainer?.OverrideComponentsColor(_linkComponentIds, _linkComponentColor, _linkComponentTransparency); } /// /// 恢复连接构件颜色 /// public async Task RestoreLinkComponentsColor() { if (_linkComponentIds == null || _linkComponentIds.Count < 1) { return; } await _bimfaceInteropContainer?.RestoreComponentsColor(_linkComponentIds); } /// /// 设置连接开始构件颜色 /// public async Task SetLinkStartComponentsColor(List elementIds) { if (elementIds == null || elementIds.Count < 1) { return; } if (_linkComponentIds == null) { _linkComponentIds = new List(); } _linkComponentIds.AddRange(elementIds); await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, _linkStartComponentColor, _linkComponentTransparency); } /// /// 设置连接结束构件颜色 /// public async Task SetLinkEndComponentsColor(List elementIds) { if (elementIds == null || elementIds.Count < 1) { return; } if (_linkComponentIds == null) { _linkComponentIds = new List(); } _linkComponentIds.AddRange(elementIds); await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, _linkEndComponentColor, _linkComponentTransparency); } #endregion #region 监测点标记 /// /// 设置业务监测点 /// public async Task SetLogicMonitors(List obj) { await _bimfaceInteropContainer?.SetLogicMonitors(obj); } /// /// 清除业务监测点 /// public async Task ClearLogicMonitors() { await _bimfaceInteropContainer?.ClearLogicMonitors(); } #endregion } }