using DevExpress.Xpo.DB.Helpers; using DevExpress.XtraDiagram.Base; using NetTaste; namespace Yw.WinFrmUI { public partial class BimfaceInterop3dContainer : UserControl, IBimfaceInterop3dContainer { public BimfaceInterop3dContainer() { InitializeComponent(); } public event Action LoadCompletedEvent; public event Action LoadFailedEvent; public event Action HandingErrorEvent; public event Action LoadViewCompletedEvent; public event Action LoadViewFailedEvent; public event Action ClickInEvent; public event Action ClickOutEvent; /// /// 交互对象 /// public BimfaceInterop3dCallBackObj CallBackObj { get { if (_callBackObj == null) { _callBackObj = new BimfaceInterop3dCallBackObj(); } return _callBackObj; } } private BimfaceInterop3dCallBackObj _callBackObj; /// /// 是否初始化 /// public bool IsInitialized { get { return _isInitialized; } } private bool _isInitialized; /// /// 视图是否初始化 /// public bool IsViewInitialized { get { return _isViewInitialized; } } private bool _isViewInitialized; /// /// 初始话容器 /// public async Task InitialContainer() { var callBackObj = this.CallBackObj; callBackObj.LoadCompletedEvent += CallBackObj_LoadCompletedEvent; callBackObj.LoadFailedEvent += CallBackObj_LoadFailedEvent; callBackObj.HandingErrorEvent += CallBackObj_HandingErrorEvent; callBackObj.LoadViewCompletedEvent += CallBackObj_LoadViewCompletedEvent; callBackObj.LoadViewFailedEvent += CallBackObj_LoadViewFailedEvent; callBackObj.ClickInEvent += CallBackObj_ClickInEvent; callBackObj.ClickOutEvent += CallBackObj_ClickOutEvent; await this.webViewControl1.InitialWebBrower(BimfaceUrlHelper.Interop3dUrl, callBackObj, true); } //加载完成 private void CallBackObj_LoadCompletedEvent() { _isInitialized = true; this.LoadCompletedEvent?.Invoke(); } //加载失败 private void CallBackObj_LoadFailedEvent() { this.LoadFailedEvent?.Invoke(); } //处理错误 private void CallBackObj_HandingErrorEvent(HandingError obj) { this.HandingErrorEvent?.Invoke(obj); } //加载视图完成 private void CallBackObj_LoadViewCompletedEvent() { _isViewInitialized = true; this.LoadViewCompletedEvent?.Invoke(); } //加载视图失败 private void CallBackObj_LoadViewFailedEvent(string obj) { this.LoadViewFailedEvent?.Invoke(obj); } //点击构件 private void CallBackObj_ClickInEvent(ClickIn3dInfo obj) { this.ClickInEvent?.Invoke(obj); } //点击外部 private void CallBackObj_ClickOutEvent(ClickOut3dInfo obj) { this.ClickOutEvent?.Invoke(obj); } /// /// 加载视图 /// public async Task LoadView(string viewToken) { if (!_isInitialized) { return false; } return await this.webViewControl1.EvaluateScriptAsync("loadView", viewToken); } #region 构件显隐 /// /// 显示构件 /// /// 构件id列表 public async Task ShowComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("showComponents", ids); } /// /// 隐藏构件 /// /// 构件id列表 public async Task HideComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("hideComponents", ids); } /// /// 显示所有构件 /// public async Task ShowAllComponents() { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("showAllComponents()"); } #endregion #region 构件半透明与取消 /// /// 半透明组件(鼠标不可选) /// /// 构件id列表 /// public async Task TranslucentComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("translucentComponents", ids); } /// /// 取消构件半透明 /// /// 构件id列表 /// public async Task OpaqueComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("opaqueComponents", ids); } #endregion #region 构件的选择与取消 /// /// 设置选择的构件列表 /// /// 构件id列表 public async Task SetSelectedComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("setSelectedComponents", ids); } /// /// 增加选择的构件列表 /// /// 构件id列表 public async Task AddSelectedComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("addSelectedComponents", ids); } /// /// 移除选择的构件列表 /// /// 构件id列表 public async Task RemoveSelectedComponents(List ids) { if (ids == null || ids.Count < 1) { return; } if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("removeSelectedComponents", ids); } /// /// 清除选择的构件列表 /// public async Task ClearSelectedComponents() { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("clearSelectedComponents()"); } #endregion #region 缩放 /// /// 缩放至包围盒 /// public async Task ZoomToBoundingBox(BoundingBox boundingbox) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("zoomToBoundingBox", boundingbox); } /// /// 缩放至构件 /// public async Task ZoomToComponent(string id) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("zoomToComponent", id); } /// /// 缩放至选择的构件 /// public async Task ZoomToSelectedComponents() { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("zoomToSelectedComponents()"); } /// /// 缩放并选择构件 /// public async Task ZoomAndSelectComponents(List ids) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("zoomAndSelectComponents", ids); } #endregion #region 强调构件 /// /// 设置强调构件 /// /// 构件id列表 /// #32D3A6 /// 0.8 /// public async Task SetBlinkComponents(List ids, string color, double transparency) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("setBlinkComponents", ids, color, transparency); } /// /// 清除强调构件 /// /// public async Task ClearBlinkComponents() { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("clearBlinkComponents()"); } #endregion #region 构件着色 /// /// 改变构件颜色 /// /// 构件id列表 /// #32D3A6 /// 0.8 /// public async Task OverrideComponentsColor(List ids, string color, double transparency) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("overrideComponentsColor", new ComponentsColor() { Ids = ids, Color = color, Transparency = transparency }); } /// /// /// /// 构件id列表 /// /// public async Task RestoreComponentsColor(List ids) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("restoreComponentsColor", ids); } #endregion #region 自定义标签 /// /// 设置自定义标签 /// public async Task SetCustomLabels(List obj) { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("setCustomLabels", obj); } /// /// 清除自定义标签 /// public async Task ClearCustomLabels() { if (!_isViewInitialized) { return; } await this.webViewControl1.EvaluateScriptAsync("clearCustomLabels()"); } #endregion } }