From 34d47fbe6f79897f79b381eb1f1b4cae89b6fe05 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 14 十月 2024 00:07:42 +0800
Subject: [PATCH] 优化bimface 鼠标左键点击,尝试解决不能选中的问题,不一定解决,待测试

---
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dCallBackObj.cs                 |   24 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs          |  320 ++++++++++++++++++--------
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dEvents.cs                     |   12 +
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/MouseClick.cs                                                  |   18 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs          |   78 +++--
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs                  |   12 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs |   33 --
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.Designer.cs |   19 -
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs                   |  167 +++++++------
 9 files changed, 419 insertions(+), 264 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.Designer.cs
index c12d8b1..700eb5c 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.Designer.cs
@@ -28,30 +28,17 @@
         /// </summary>
         private void InitializeComponent()
         {
-            bimfaceInterop3dContainer1 = new BimfaceInterop3dContainer();
             SuspendLayout();
             // 
-            // bimfaceInterop3dContainer1
-            // 
-            bimfaceInterop3dContainer1.Dock = DockStyle.Fill;
-            bimfaceInterop3dContainer1.Location = new Point(0, 0);
-            bimfaceInterop3dContainer1.Margin = new Padding(4, 3, 4, 3);
-            bimfaceInterop3dContainer1.Name = "bimfaceInterop3dContainer1";
-            bimfaceInterop3dContainer1.Size = new Size(971, 610);
-            bimfaceInterop3dContainer1.TabIndex = 0;
-            // 
-            // XhsProjectAssetsBimfaceCtrl
+            // XhsProjectSimulationBimfaceCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(bimfaceInterop3dContainer1);
-            Name = "XhsProjectAssetsBimfaceCtrl";
-            Size = new Size(971, 610);
+            Name = "XhsProjectSimulationBimfaceCtrl";
+            Size = new Size(230, 126);
             ResumeLayout(false);
         }
 
         #endregion
-
-        private BimfaceInterop3dContainer bimfaceInterop3dContainer1;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
index 5f28e74..7e28757 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
@@ -1,6 +1,4 @@
-锘縰sing DevExpress.Office.Utils;
-using DevExpress.Xpo.Helpers;
-using Yw.WinFrmUI.Bimface;
+锘縰sing Yw.WinFrmUI.Bimface;
 
 namespace HStation.WinFrmUI
 {
@@ -9,31 +7,130 @@
         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,
@@ -51,69 +148,10 @@
             {
                 _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();
         }
 
 
@@ -126,7 +164,11 @@
         /// <returns></returns>
         public async Task ShowComponents(List<string> elementIds)
         {
-            await this.bimfaceInterop3dContainer1.ShowComponents(elementIds);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ShowComponents(elementIds);
         }
 
         /// <summary>
@@ -136,7 +178,11 @@
         /// <returns></returns>
         public async Task HideComponents(List<string> elementIds)
         {
-            await this.bimfaceInterop3dContainer1.HideComponents(elementIds);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.HideComponents(elementIds);
         }
 
         /// <summary>
@@ -145,7 +191,11 @@
         /// <returns></returns>
         public async Task ShowAllComponents()
         {
-            await this.bimfaceInterop3dContainer1.ShowAllComponents();
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ShowAllComponents();
         }
 
         #endregion
@@ -159,7 +209,11 @@
         /// <returns></returns>
         public async Task TranslucentComponents(List<string> elementIds)
         {
-            await this.bimfaceInterop3dContainer1.TranslucentComponents(elementIds);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.TranslucentComponents(elementIds);
         }
 
         /// <summary>
@@ -169,7 +223,11 @@
         /// <returns></returns>
         public async Task OpaqueComponents(List<string> elementIds)
         {
-            await this.bimfaceInterop3dContainer1.OpaqueComponents(elementIds);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.OpaqueComponents(elementIds);
         }
 
         #endregion
@@ -182,7 +240,11 @@
         /// <returns></returns>
         public async Task SetSelectedComponents(List<string> elements)
         {
-            await this.bimfaceInterop3dContainer1.SetSelectedComponents(elements);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.SetSelectedComponents(elements);
         }
 
         /// <summary>
@@ -192,7 +254,11 @@
         /// <returns></returns>
         public async Task AddSelectedComponents(List<string> elements)
         {
-            await this.bimfaceInterop3dContainer1.AddSelectedComponents(elements);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.AddSelectedComponents(elements);
         }
 
         /// <summary>
@@ -202,7 +268,11 @@
         /// <returns></returns>
         public async Task RemoveSelectedComponents(List<string> elements)
         {
-            await this.bimfaceInterop3dContainer1.RemoveSelectedComponents(elements);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.RemoveSelectedComponents(elements);
         }
 
         /// <summary>
@@ -212,7 +282,11 @@
         /// <returns></returns>
         public async Task ClearSelectedComponents()
         {
-            await this.bimfaceInterop3dContainer1.ClearSelectedComponents();
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ClearSelectedComponents();
         }
 
         #endregion
@@ -224,7 +298,11 @@
         /// </summary>
         public async Task ZoomToComponent(string elementId)
         {
-            await this.bimfaceInterop3dContainer1.ZoomToComponent(elementId);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ZoomToComponent(elementId);
         }
 
         /// <summary>
@@ -232,7 +310,11 @@
         /// </summary>
         public async Task ZoomToSelectedComponents()
         {
-            await this.bimfaceInterop3dContainer1.ZoomToSelectedComponents();
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ZoomToSelectedComponents();
         }
 
         /// <summary>
@@ -240,7 +322,11 @@
         /// </summary>
         public async Task ZoomAndSelectComponents(List<string> elementIds)
         {
-            await this.bimfaceInterop3dContainer1.ZoomAndSelectComponents(elementIds);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ZoomAndSelectComponents(elementIds);
         }
 
         #endregion
@@ -252,7 +338,11 @@
         /// </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>
@@ -260,7 +350,11 @@
         /// </summary>
         public async Task SetBlinkComponents()
         {
-            await this.bimfaceInterop3dContainer1.ClearBlinkComponents();
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ClearBlinkComponents();
         }
 
         #endregion
@@ -272,7 +366,11 @@
         /// </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>
@@ -280,7 +378,11 @@
         /// </summary>
         public async Task SetBlinkComponents(List<string> elementIds)
         {
-            await this.bimfaceInterop3dContainer1.RestoreComponentsColor(elementIds);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.RestoreComponentsColor(elementIds);
         }
 
         #endregion
@@ -292,7 +394,11 @@
         /// </summary>
         public async Task SetCustomLabels(List<CustomLabel> obj)
         {
-            await this.bimfaceInterop3dContainer1.SetCustomLabels(obj);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.SetCustomLabels(obj);
         }
 
         /// <summary>
@@ -300,9 +406,12 @@
         /// </summary>
         public async Task ClearCustomLabels()
         {
-            await this.bimfaceInterop3dContainer1.ClearCustomLabels();
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.ClearCustomLabels();
         }
-
 
         #endregion
 
@@ -321,14 +430,18 @@
         {
             if (_linkComponentIds != null && _linkComponentIds.Count > 0)
             {
-                await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_linkComponentIds);
+                await _bimfaceInteropContainer.RestoreComponentsColor(_linkComponentIds);
             }
             _linkComponentIds = elementIds;
             if (elementIds == null || elementIds.Count < 1)
             {
                 return;
             }
-            await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _linkComponentColor, _linkComponentTransparency);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.OverrideComponentsColor(elementIds, _linkComponentColor, _linkComponentTransparency);
         }
 
         #endregion
@@ -346,14 +459,18 @@
         {
             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
@@ -376,7 +493,7 @@
             }
             if (!calcuResult.Succeed)
             {
-                await this.bimfaceInterop3dContainer1.ClearCustomLabels();
+                await _bimfaceInteropContainer.ClearCustomLabels();
                 return;
             }
             var obj = new List<CustomLabel>();
@@ -421,8 +538,11 @@
                     obj.Add(emitterCustomLabel);
                 }
             });
-
-            await this.bimfaceInterop3dContainer1.SetCustomLabels(obj);
+            if (_bimfaceInteropContainer == null)
+            {
+                return;
+            }
+            await _bimfaceInteropContainer.SetCustomLabels(obj);
         }
 
         #endregion
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
index 2267ad8..8410f9f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
@@ -60,8 +60,7 @@
             ribbonPageGroup3 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup4 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             tabPane1 = new DevExpress.XtraBars.Navigation.TabPane();
-            pageBimface = new DevExpress.XtraBars.Navigation.TabNavigationPage();
-            xhsProjectSimulationBimfaceCtrl1 = new XhsProjectSimulationBimfaceCtrl();
+            tabPageBimface = new DevExpress.XtraBars.Navigation.TabNavigationPage();
             pageQ3d = new DevExpress.XtraBars.Navigation.TabNavigationPage();
             xhsProjectSimulationQ3dCtrl1 = new XhsProjectSimulationQ3dCtrl();
             dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components);
@@ -75,7 +74,6 @@
             ((ISupportInitialize)ribbonControl1).BeginInit();
             ((ISupportInitialize)tabPane1).BeginInit();
             tabPane1.SuspendLayout();
-            pageBimface.SuspendLayout();
             pageQ3d.SuspendLayout();
             ((ISupportInitialize)dockManager1).BeginInit();
             docPnlProperty.SuspendLayout();
@@ -297,34 +295,23 @@
             // 
             // tabPane1
             // 
-            tabPane1.Controls.Add(pageBimface);
+            tabPane1.Controls.Add(tabPageBimface);
             tabPane1.Controls.Add(pageQ3d);
             tabPane1.Dock = DockStyle.Fill;
             tabPane1.Location = new Point(0, 128);
             tabPane1.Name = "tabPane1";
-            tabPane1.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] { pageBimface, pageQ3d });
+            tabPane1.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] { tabPageBimface, pageQ3d });
             tabPane1.RegularSize = new Size(692, 340);
-            tabPane1.SelectedPage = pageBimface;
+            tabPane1.SelectedPage = tabPageBimface;
             tabPane1.Size = new Size(692, 340);
             tabPane1.TabIndex = 1;
             tabPane1.Text = "tabPane1";
             // 
-            // pageBimface
+            // tabPageBimface
             // 
-            pageBimface.Caption = "涓夌淮妯″瀷";
-            pageBimface.Controls.Add(xhsProjectSimulationBimfaceCtrl1);
-            pageBimface.Name = "pageBimface";
-            pageBimface.Size = new Size(692, 307);
-            // 
-            // xhsProjectSimulationBimfaceCtrl1
-            // 
-            xhsProjectSimulationBimfaceCtrl1.Dock = DockStyle.Fill;
-            xhsProjectSimulationBimfaceCtrl1.Location = new Point(0, 0);
-            xhsProjectSimulationBimfaceCtrl1.Name = "xhsProjectSimulationBimfaceCtrl1";
-            xhsProjectSimulationBimfaceCtrl1.Size = new Size(692, 307);
-            xhsProjectSimulationBimfaceCtrl1.TabIndex = 0;
-            xhsProjectSimulationBimfaceCtrl1.HydroClickEvent += xhsProjectSimulationBimfaceCtrl1_HydroClickEvent;
-            xhsProjectSimulationBimfaceCtrl1.LoadCompletedEvent += xhsProjectSimulationBimfaceCtrl1_LoadCompletedEvent;
+            tabPageBimface.Caption = "涓夌淮妯″瀷";
+            tabPageBimface.Name = "tabPageBimface";
+            tabPageBimface.Size = new Size(692, 307);
             // 
             // pageQ3d
             // 
@@ -430,7 +417,6 @@
             ((ISupportInitialize)ribbonControl1).EndInit();
             ((ISupportInitialize)tabPane1).EndInit();
             tabPane1.ResumeLayout(false);
-            pageBimface.ResumeLayout(false);
             pageQ3d.ResumeLayout(false);
             ((ISupportInitialize)dockManager1).EndInit();
             docPnlProperty.ResumeLayout(false);
@@ -458,12 +444,11 @@
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup3;
         private DevExpress.XtraBars.BarButtonItem barBtnMatchingList;
         private DevExpress.XtraBars.Navigation.TabPane tabPane1;
-        private DevExpress.XtraBars.Navigation.TabNavigationPage pageBimface;
+        private DevExpress.XtraBars.Navigation.TabNavigationPage tabPageBimface;
         private DevExpress.XtraBars.Navigation.TabNavigationPage pageQ3d;
         private DevExpress.XtraBars.Docking.DockManager dockManager1;
         private DevExpress.XtraBars.Docking.DockPanel docPnlProperty;
         private DevExpress.XtraBars.Docking.ControlContainer dockPanel1_Container;
-        private XhsProjectSimulationBimfaceCtrl xhsProjectSimulationBimfaceCtrl1;
         private XhsProjectSimulationQ3dCtrl xhsProjectSimulationQ3dCtrl1;
         private XhsProjectSimulationPropertyCtrl xhsProjectSimulationPropertyCtrl1;
         private DevExpress.Utils.SvgImageCollection svgImg32;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
index 92fe0c2..865c0e5 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -62,39 +62,53 @@
                 return;
             }
             this.PageTitle.Caption = $"{_project.Name}\r\n姘村姏妯℃嫙";
-            await this.xhsProjectSimulationBimfaceCtrl1.SetBindingData(_project, _projectSite, () => _hydroInfo);
+            var bimfaceCtrl = GetBimfaceCtrl();
+            this.tabPageBimface.Controls.Clear();
+            this.tabPageBimface.Controls.Add(bimfaceCtrl);
+            await bimfaceCtrl.InitialData(_project, _projectSite, () => _hydroInfo);
             this.xhsProjectSimulationQ3dCtrl1.SetBindingData(_hydroInfo);
             this.xhsProjectSimulationPropertyCtrl1.InitialData(() => _hydroInfo);
         }
 
         #region Bimface
 
-        //bimface 鍔犺浇瀹屾垚浜嬩欢
-        private async void xhsProjectSimulationBimfaceCtrl1_LoadCompletedEvent()
+        //鑾峰彇 bimface 鎺т欢
+        private XhsProjectSimulationBimfaceCtrl GetBimfaceCtrl()
         {
-            if (_hydroInfo == null)
+            if (_bimfaceCtrl == null)
             {
-                return;
+                _bimfaceCtrl = new XhsProjectSimulationBimfaceCtrl();
+                _bimfaceCtrl.Dock = DockStyle.Fill;
+                _bimfaceCtrl.LoadCompletedEvent += async () =>
+                {//view鍔犺浇瀹屾垚浜嬩欢
+                    if (_hydroInfo == null)
+                    {
+                        return;
+                    }
+                    var elementIds = new List<string>();
+                    var pumps = _hydroInfo.Pumps?.Where(x => x.LinkStatus == Yw.Hydro.PumpStatus.Open).ToList();
+                    pumps?.ForEach(x => elementIds.Add(x.Code));
+                    var valves = _hydroInfo.Valves?.Where(x => x.LinkStatus == Yw.Hydro.ValveStatus.Open).ToList();
+                    valves?.ForEach(x => elementIds.Add(x.Code));
+                    await _bimfaceCtrl?.SetOpenComponentsColor(elementIds);
+                };
+                _bimfaceCtrl.HydroMouseLeftClickEvent += (obj) =>
+                {//榧犳爣宸﹂敭鐐瑰嚮浜嬩欢
+                    if (_hydroInfo == null)
+                    {
+                        return;
+                    }
+                    _parter = obj;
+                    ShowProperty();
+                    SetBimfaceLinkColor();
+                };
             }
-            var elementIds = new List<string>();
-            var pumps = _hydroInfo.Pumps?.Where(x => x.LinkStatus == Yw.Hydro.PumpStatus.Open).ToList();
-            pumps?.ForEach(x => elementIds.Add(x.Code));
-            var valves = _hydroInfo.Valves?.Where(x => x.LinkStatus == Yw.Hydro.ValveStatus.Open).ToList();
-            valves?.ForEach(x => elementIds.Add(x.Code));
-            await this.xhsProjectSimulationBimfaceCtrl1.SetOpenComponentsColor(elementIds);
+            return _bimfaceCtrl;
         }
+        //bimface鎺т欢
+        private XhsProjectSimulationBimfaceCtrl _bimfaceCtrl = null;
 
-        //bimface 姘村姏鐐瑰嚮浜嬩欢
-        private void xhsProjectSimulationBimfaceCtrl1_HydroClickEvent(Yw.Model.HydroParterInfo obj)
-        {
-            if (_hydroInfo == null)
-            {
-                return;
-            }
-            _parter = obj;
-            ShowProperty();
-            SetBimfaceLinkColor();
-        }
+
 
         //璁剧疆Bimface杩炴帴棰滆壊
         private async void SetBimfaceLinkColor()
@@ -144,7 +158,7 @@
                     }
                 }
             }
-            await this.xhsProjectSimulationBimfaceCtrl1.SetLinkComponentsColor(elementIds);
+            await _bimfaceCtrl?.SetLinkComponentsColor(elementIds);
         }
 
         #endregion
@@ -193,7 +207,7 @@
                     {
                         elementIds.Add(_parter.Code);
                     }
-                    await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds);
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds);
                     ShowProperty();
                     SetBimfaceLinkColor();
                 };
@@ -253,14 +267,14 @@
                     var allParterList = _hydroInfo.GetAllParters();
                     _parter = allParterList?.Find(x => x.Code == parter.Code);
                     var elementIds = new List<string>() { parter.Code };
-                    await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds);
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds);
                     ShowProperty();
                     SetBimfaceLinkColor();
                 };
                 _unMatchingListCtrl.ViewModelEvent += async (parters) =>//鏌ョ湅妯″瀷
                 {
                     var codes = parters?.Select(x => x.Code).Distinct().ToList();
-                    await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(codes);
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
                     _parter = null;
                     ShowProperty();
                 };
@@ -308,11 +322,11 @@
             if (_fastShowHideCodeList == null)
             {
                 _fastShowHideCodeList = _hydroInfo.Decorators.Select(x => x.Code).ToList();
-                await this.xhsProjectSimulationBimfaceCtrl1.HideComponents(_fastShowHideCodeList);
+                await _bimfaceCtrl?.HideComponents(_fastShowHideCodeList);
             }
             else
             {
-                await this.xhsProjectSimulationBimfaceCtrl1.ShowComponents(_fastShowHideCodeList);
+                await _bimfaceCtrl?.ShowComponents(_fastShowHideCodeList);
                 _fastShowHideCodeList = null;
             }
         }
@@ -348,7 +362,7 @@
                             elementIds.Add(_parter.Code);
                         }
                     }
-                    await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds);
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds);
                     ShowProperty();
                     SetBimfaceLinkColor();
                 };
@@ -415,7 +429,7 @@
                     }
                     var allParterList = _hydroInfo.GetAllParters();
                     _parter = allParterList?.Find(x => x.Code == parter.Code);
-                    await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(new List<string>() { _parter.Code });
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(new List<string>() { _parter.Code });
                     ShowProperty();
                     SetBimfaceLinkColor();
                 };
@@ -637,7 +651,7 @@
                             this.controlContainerBottom.Controls.Add(parterListCtrl);
                             this.docPnlBottom.Text = "璁$畻缁撴灉";
                             ShowProperty();
-                            await this.xhsProjectSimulationBimfaceCtrl1.ShowCalcuCustomLabels(_calcuResult);
+                            await _bimfaceCtrl?.ShowCalcuCustomLabels(_calcuResult);
                             TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�");
                         }
                         else
@@ -704,7 +718,7 @@
                     {
                         _parter = null;
                     }
-                    await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds);
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds);
                     ShowProperty();
                     SetBimfaceLinkColor();
                 };
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/MouseClick.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/MouseClick.cs
new file mode 100644
index 0000000..44300ac
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/MouseClick.cs
@@ -0,0 +1,18 @@
+锘縩amespace Yw.WinFrmUI.Bimface
+{
+    /// <summary>
+    /// 榧犳爣鐐瑰嚮
+    /// </summary>
+    public class MouseClick
+    {
+        /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮
+        /// </summary>
+        public const string Click = "Click";
+
+        /// <summary>
+        /// 榧犳爣鍙抽敭鐐瑰嚮
+        /// </summary>
+        public const string RightClick = "RightClick";
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dCallBackObj.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dCallBackObj.cs
index 0562b5f..75f1649 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dCallBackObj.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dCallBackObj.cs
@@ -11,9 +11,19 @@
         public event Action<ClickIn3dInfo> ClickInEvent;
 
         /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮鏋勪欢浜嬩欢
+        /// </summary>
+        public event Action<ClickIn3dInfo> MouseLeftClickInEvent;
+
+        /// <summary>
         /// 鐐瑰嚮澶栭儴浜嬩欢
         /// </summary>
         public event Action<ClickOut3dInfo> ClickOutEvent;
+
+        /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮澶栭儴浜嬩欢
+        /// </summary>
+        public event Action<ClickOut3dInfo> MouseLeftClickOutEvent;
 
         /// <summary>
         /// 鐐瑰嚮鏋勪欢
@@ -22,6 +32,13 @@
         {
             var json = JsonHelper.Json2Object<ClickIn3dInfo>(info);
             this.ClickInEvent?.Invoke(json);
+            if (json != null)
+            {
+                if (json.EventType == MouseClick.Click)
+                {
+                    this.MouseLeftClickInEvent?.Invoke(json);
+                }
+            }
         }
 
         /// <summary>
@@ -31,6 +48,13 @@
         {
             var json = JsonHelper.Json2Object<ClickOut3dInfo>(info);
             this.ClickOutEvent?.Invoke(json);
+            if (json != null)
+            {
+                if (json.EventType == MouseClick.Click)
+                {
+                    this.MouseLeftClickOutEvent?.Invoke(json);
+                }
+            }
         }
 
     }
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
index fb31f19..686afa9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
@@ -1,8 +1,4 @@
-锘縰sing DevExpress.Xpo.DB.Helpers;
-using DevExpress.XtraDiagram.Base;
-using NetTaste;
-
-namespace Yw.WinFrmUI
+锘縩amespace Yw.WinFrmUI
 {
     public partial class BimfaceInterop3dContainer : UserControl, IBimfaceInterop3dContainer
     {
@@ -11,29 +7,43 @@
             InitializeComponent();
         }
 
-        public event Action LoadCompletedEvent;
-        public event Action LoadFailedEvent;
-        public event Action<HandingError> HandingErrorEvent;
-        public event Action LoadViewCompletedEvent;
-        public event Action<string> LoadViewFailedEvent;
-        public event Action<ClickIn3dInfo> ClickInEvent;
-        public event Action<ClickOut3dInfo> ClickOutEvent;
-
         /// <summary>
-        /// 浜や簰瀵硅薄
+        /// Html鍔犺浇瀹屾垚浜嬩欢
         /// </summary>
-        public BimfaceInterop3dCallBackObj CallBackObj
-        {
-            get
-            {
-                if (_callBackObj == null)
-                {
-                    _callBackObj = new BimfaceInterop3dCallBackObj();
-                }
-                return _callBackObj;
-            }
-        }
-        private BimfaceInterop3dCallBackObj _callBackObj;
+        public event Action LoadCompletedEvent;
+        /// <summary>
+        /// Html鍔犺浇澶辫触浜嬩欢
+        /// </summary>
+        public event Action LoadFailedEvent;
+        /// <summary>
+        /// 澶勭悊閿欒浜嬩欢
+        /// </summary>
+        public event Action<HandingError> HandingErrorEvent;
+        /// <summary>
+        /// View鍔犺浇瀹屾垚浜嬩欢
+        /// </summary>
+        public event Action LoadViewCompletedEvent;
+        /// <summary>
+        /// View鍔犺浇澶辫触浜嬩欢
+        /// </summary>
+        public event Action<string> LoadViewFailedEvent;
+        /// <summary>
+        /// 鐐瑰嚮鏋勪欢浜嬩欢
+        /// </summary>
+        public event Action<ClickIn3dInfo> ClickInEvent;
+        /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮鏋勪欢浜嬩欢
+        /// </summary>
+        public event Action<ClickIn3dInfo> MouseLeftClickInEvent;
+        /// <summary>
+        /// 鐐瑰嚮澶栭儴浜嬩欢
+        /// </summary>
+        public event Action<ClickOut3dInfo> ClickOutEvent;
+        /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮澶栭儴浜嬩欢
+        /// </summary>
+        public event Action<ClickOut3dInfo> MouseLeftClickOutEvent;
+
 
         /// <summary>
         /// 鏄惁鍒濆鍖�
@@ -59,67 +69,63 @@
         }
         private bool _isViewInitialized;
 
+        //鑾峰彇浜や簰瀵硅薄
+        private BimfaceInterop3dCallBackObj GetCallBackObj()
+        {
+            if (_callBackObj == null)
+            {
+                _callBackObj = new BimfaceInterop3dCallBackObj();
+                _callBackObj.LoadCompletedEvent += () =>
+                    {
+                        _isInitialized = true;
+                        this.LoadCompletedEvent?.Invoke();
+                    };
+                _callBackObj.LoadFailedEvent += () =>
+                    {
+                        this.LoadFailedEvent?.Invoke();
+                    };
+                _callBackObj.HandingErrorEvent += (obj) =>
+                    {
+                        this.HandingErrorEvent?.Invoke(obj);
+                    };
+                _callBackObj.LoadViewCompletedEvent += () =>
+                    {
+                        _isViewInitialized = true;
+                        this.LoadViewCompletedEvent?.Invoke();
+                    };
+                _callBackObj.LoadViewFailedEvent += (obj) =>
+                    {
+                        this.LoadViewFailedEvent?.Invoke(obj);
+                    };
+                _callBackObj.ClickInEvent += (obj) =>
+                    {
+                        this.ClickInEvent?.Invoke(obj);
+                    };
+                _callBackObj.MouseLeftClickInEvent += (obj) =>
+                    {
+                        this.MouseLeftClickInEvent?.Invoke(obj);
+                    };
+                _callBackObj.ClickOutEvent += (obj) =>
+                    {
+                        this.ClickOutEvent?.Invoke(obj);
+                    };
+                _callBackObj.MouseLeftClickOutEvent += (obj) =>
+                    {
+                        this.MouseLeftClickOutEvent?.Invoke(obj);
+                    };
+            }
+            return _callBackObj;
+        }
+        private BimfaceInterop3dCallBackObj _callBackObj;
+
         /// <summary>
         /// 鍒濆璇濆鍣�
         /// </summary>
         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;
+            var callBackObj = GetCallBackObj();
             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);
-        }
-
 
         /// <summary>
         /// 鍔犺浇瑙嗗浘
@@ -132,7 +138,6 @@
             }
             return await this.webViewControl1.EvaluateScriptAsync<bool>("loadView", viewToken);
         }
-
 
 
         #region 鏋勪欢鏄鹃殣
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
index 6d49595..1d58c2b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
@@ -1,20 +1,10 @@
-锘縰sing DevExpress.CodeParser;
-using DevExpress.Xpo.Helpers;
-using DevExpress.XtraDiagram.Base;
-using Yw.WinFrmUI.Bimface;
-
-namespace Yw.WinFrmUI
+锘縩amespace Yw.WinFrmUI
 {
     /// <summary>
     /// 
     /// </summary>
     public interface IBimfaceInterop3dContainer : IBimfaceContainer, IBimfaceInterop3dEvents
     {
-        /// <summary>
-        /// 浜や簰瀵硅薄
-        /// </summary>
-        BimfaceInterop3dCallBackObj CallBackObj { get; }
-
 
         #region 鏋勪欢鐨勬樉绀轰笌闅愯棌
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dEvents.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dEvents.cs
index 6c5fc5d..931da92 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dEvents.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dEvents.cs
@@ -11,8 +11,20 @@
         event Action<ClickIn3dInfo> ClickInEvent;
 
         /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮鏋勪欢浜嬩欢
+        /// </summary>
+        public event Action<ClickIn3dInfo> MouseLeftClickInEvent;
+
+        /// <summary>
         /// 鐐瑰嚮
         /// </summary>
         event Action<ClickOut3dInfo> ClickOutEvent;
+
+        /// <summary>
+        /// 榧犳爣宸﹂敭鐐瑰嚮澶栭儴浜嬩欢
+        /// </summary>
+        public event Action<ClickOut3dInfo> MouseLeftClickOutEvent;
+
+
     }
 }

--
Gitblit v1.9.3