From abf1e3b3334ab47c38aa92405a11a6ec92b7847a Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期四, 31 十月 2024 17:18:37 +0800
Subject: [PATCH] bimface 水流

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs          |   12 ++
 /dev/null                                                                                                |   13 --
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js                                          |  143 ++++++++++++++++++++++++++++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj                                        |    4 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html                                            |    4 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs          |   16 +++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/05-logic-flow/LogicFlowEffect.cs                               |   34 ++++++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs                  |    9 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs |   14 ++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs                   |   19 +++
 10 files changed, 250 insertions(+), 18 deletions(-)

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 bfaf03e..6725615 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
@@ -482,6 +482,18 @@
 
         #endregion
 
+        #region 涓氬姟姘存祦鍔ㄧ敾
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task LoadAllFlowMaterialList(List<LogicFlowEffect> obj)
+        {
+            await _bimfaceInteropContainer?.LoadAllFlowMaterialList(obj);
+        }
+
+        #endregion
+
         #region 杩炴帴鏋勪欢棰滆壊
 
         private const string _linkComponentColor = "#008B00";//杩炴帴鏋勪欢棰滆壊
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 b6e087c..d8a32ef 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
@@ -84,6 +84,7 @@
             controlContainerBottom = new DevExpress.XtraBars.Docking.ControlContainer();
             svgImg32 = new DevExpress.Utils.SvgImageCollection(components);
             rmSet = new DevExpress.XtraBars.Ribbon.RadialMenu(components);
+            barButtonItem1 = new DevExpress.XtraBars.BarButtonItem();
             ((ISupportInitialize)ribbonControl1).BeginInit();
             ((ISupportInitialize)tabPane1).BeginInit();
             tabPane1.SuspendLayout();
@@ -98,9 +99,9 @@
             // 
             ribbonControl1.ExpandCollapseItem.Id = 0;
             ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
-            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnHydroCheck, barBtnHydroCalcu, barBtnHydroExportInp, barBtnSave, barBtnHydroParterList, barBtnFastShowHidden, barBtnMatchingList, barBtnUnMatchingList, barBtnSetList, barBtnSetPumpList, barBtnSetValveList, barBtnSetPipeList, barBtnSetElbowsList, barBtnSetThreelinkList, barBtnSetFourlinkList, barBtnSetTranslationList, barBtnSetExchangerList, barBtnSetJunctionList, barBtnParallelAnaly, barBtnSearch, barBtnGradingSet, barBtnGradingApply, barBtnRefresh, barBtnSetMark, barBtnSetReservoirList, barBtnSetTankList, barBtnSetWaterboxList, barBtnSetBluntheadList, barBtnSetNozzleList, barBtnSetHydrantList, barBtnSetMeterList, barBtnSetCompressorList, barBtnSetFlowmeterList, barBtnSetPressmeterList });
+            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnHydroCheck, barBtnHydroCalcu, barBtnHydroExportInp, barBtnSave, barBtnHydroParterList, barBtnFastShowHidden, barBtnMatchingList, barBtnUnMatchingList, barBtnSetList, barBtnSetPumpList, barBtnSetValveList, barBtnSetPipeList, barBtnSetElbowsList, barBtnSetThreelinkList, barBtnSetFourlinkList, barBtnSetTranslationList, barBtnSetExchangerList, barBtnSetJunctionList, barBtnParallelAnaly, barBtnSearch, barBtnGradingSet, barBtnGradingApply, barBtnRefresh, barBtnSetMark, barBtnSetReservoirList, barBtnSetTankList, barBtnSetWaterboxList, barBtnSetBluntheadList, barBtnSetNozzleList, barBtnSetHydrantList, barBtnSetMeterList, barBtnSetCompressorList, barBtnSetFlowmeterList, barBtnSetPressmeterList, barButtonItem1 });
             ribbonControl1.Location = new Point(0, 0);
-            ribbonControl1.MaxItemId = 51;
+            ribbonControl1.MaxItemId = 52;
             ribbonControl1.Name = "ribbonControl1";
             ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
             ribbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.False;
@@ -382,6 +383,7 @@
             pageGroupModel.ItemLinks.Add(barBtnHydroParterList);
             pageGroupModel.ItemLinks.Add(barBtnSetList);
             pageGroupModel.ItemLinks.Add(barBtnSetMark);
+            pageGroupModel.ItemLinks.Add(barButtonItem1);
             pageGroupModel.Name = "pageGroupModel";
             pageGroupModel.Text = "妯″瀷";
             // 
@@ -513,6 +515,13 @@
             rmSet.Ribbon = ribbonControl1;
             rmSet.BeforePopup += rmSet_BeforePopup;
             // 
+            // barButtonItem1
+            // 
+            barButtonItem1.Caption = "barButtonItem1";
+            barButtonItem1.Id = 51;
+            barButtonItem1.Name = "barButtonItem1";
+            barButtonItem1.ItemClick += barButtonItem1_ItemClick;
+            // 
             // XhsProjectSimulationCorePage
             // 
             Appearance.BackColor = SystemColors.Control;
@@ -592,5 +601,6 @@
         private DevExpress.XtraBars.BarButtonItem barBtnSetCompressorList;
         private DevExpress.XtraBars.BarButtonItem barBtnSetFlowmeterList;
         private DevExpress.XtraBars.BarButtonItem barBtnSetPressmeterList;
+        private DevExpress.XtraBars.BarButtonItem barButtonItem1;
     }
 }
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 c262764..4279474 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
@@ -1996,5 +1996,21 @@
         }
 
         #endregion
+
+        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            var pipes = _hydroInfo.GetAllPipes();
+            var list = pipes.Select(x =>
+            {
+                return new Yw.WinFrmUI.Bimface.LogicFlowEffect()
+                {
+                    Id = x.Code,
+                    Rotation = 90,
+                    Direction = true,
+                    Speed = 0.1d
+                };
+            }).ToList();
+            _bimfaceCtrl?.LoadAllFlowMaterialList(list);
+        }
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/05-logic-flow/LogicFlowEffect.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/05-logic-flow/LogicFlowEffect.cs
new file mode 100644
index 0000000..7603fe4
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/05-logic-flow/LogicFlowEffect.cs
@@ -0,0 +1,34 @@
+锘縩amespace Yw.WinFrmUI.Bimface
+{
+    /// <summary>
+    /// 涓氬姟娴佸悜鍔ㄧ敾
+    /// </summary>
+    public class LogicFlowEffect
+    {
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 鏃嬭浆瑙掑害
+        /// </summary>
+        [JsonProperty("rotation", NullValueHandling = NullValueHandling.Ignore)]
+        public int Rotation { get; set; }
+
+        /// <summary>
+        /// 鏂瑰悜
+        /// </summary>
+        [JsonProperty("direction", NullValueHandling = NullValueHandling.Ignore)]
+        public bool Direction { get; set; }
+
+        /// <summary>
+        /// 閫熷害
+        /// </summary>
+        [JsonProperty("speed", NullValueHandling = NullValueHandling.Ignore)]
+        public double Speed { get; set; }
+
+
+    }
+}
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 13e8576..d66a2cd 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
@@ -468,5 +468,24 @@
 
         #endregion
 
+        #region 涓氬姟姘存祦鍔ㄧ敾
+
+        /// <summary>
+        /// 璁剧疆涓氬姟鏍囨敞寮曠嚎鏍囩
+        /// </summary>
+        public async Task LoadAllFlowMaterialList(List<LogicFlowEffect> obj)
+        {
+            if (!_isViewInitialized)
+            {
+                return;
+            }
+            await this.webViewControl1.EvaluateScriptAsync("loadAllFlowMaterialList", obj);
+        }
+
+
+        #endregion
+
+
+
     }
 }
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 f5582cf..d88d92c 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
@@ -178,5 +178,14 @@
 
         #endregion
 
+        #region 鑷畾涔夋按娴佸姩鐢�
+
+        /// <summary>
+        /// 鍔犺浇鎵�鏈夋按娴佸姩鐢诲垪琛�
+        /// </summary>
+        Task LoadAllFlowMaterialList(List<LogicFlowEffect> obj);
+
+        #endregion
+
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
index dc5ec24..aed20cb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -40,9 +40,9 @@
     <None Remove="bimface\js\GetComponents.js" />
     <None Remove="bimface\js\Layer.js" />
     <None Remove="bimface\js\LogicCalcuCustomLabel.js" />
+    <None Remove="bimface\js\LogicFlowEffect.js" />
     <None Remove="bimface\js\LogicMarkLeadLabel.js" />
     <None Remove="bimface\js\Panel.js" />
-    <None Remove="bimface\js\PipeFlow.js" />
     <None Remove="bimface\js\SelectedComponents.js" />
     <None Remove="bimface\js\WalkThrough.js" />
     <None Remove="bimface\js\Zoom.js" />
@@ -100,7 +100,7 @@
     <Content Include="bimface\js\Panel.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="bimface\js\PipeFlow.js">
+    <Content Include="bimface\js\LogicFlowEffect.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="bimface\js\WalkThrough.js">
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html
index 4706c86..14eb2a2 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html
@@ -67,9 +67,10 @@
                 webAppConfig.domElement = dom4Show;
                 // 璁剧疆鍏ㄥ眬鍗曚綅
                 webAppConfig.globalUnit = Glodon.Bimface.Common.Units.LengthUnits.Millimeter;
-
                 //鍙栨秷宸ュ叿鏉�
                 webAppConfig.Toolbars = [];
+                // 寮�鍚潗璐ㄦ浛鎹�
+                webAppConfig.enableReplaceMaterial = true;
                 // 鍒涘缓WebApplication
                 var app = new Glodon.Bimface.Application.WebApplication3D(webAppConfig);
                 // 娣诲姞寰呮樉绀虹殑妯″瀷
@@ -131,6 +132,7 @@
 <script src="../js/ComponentsColor.js"></script>
 <script src="../js/LogicMarkLeadLabel.js"></script>
 <script src="../js/LogicCalcuCustomLabel.js"></script>
+<script src="../js/LogicFlowEffect.js"></script>
 
 <script src="js/CameraStatus.js"></script>
 <script src="js/GetComponents.js"></script>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js
new file mode 100644
index 0000000..bb4f219
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js
@@ -0,0 +1,143 @@
+锘�
+let _flowAnimationContainer;//姘存祦鍔ㄧ敾瀹瑰櫒
+let _flowImgSrc = "https://static.bimface.com/attach/34d0d3aeb2e348aea5f3203b760ca667_flow5.png";//姘存祦鏉愯川鍥剧墖
+let _flowEffectList = new Set();//姘存祦鍔ㄧ敾鍒楄〃
+
+//鍒濆鍖栨按娴佸姩鐢诲鍣�
+function initialFlowAnimationContainer() {
+    if (_flowAnimationContainer == null) {
+        // 鏋勯�犳按娴佹潗璐ㄥ鍣�
+        _flowAnimationContainer = new Glodon.Bimface.Plugins.Material.MaterialContainer();
+    }
+}
+
+//鍒涘缓姘存祦鏉愯川
+function createFlowMaterial(data) {
+    initialFlowAnimationContainer();
+    // 鏋勯�犳潗璐ㄩ厤缃� 
+    let flowMaterialConfig = new Glodon.Bimface.Plugins.Material.MaterialConfig();
+    flowMaterialConfig.viewer = _viewer;
+    flowMaterialConfig.src = _flowImgSrc;
+    flowMaterialConfig.rotation = data.rotation;
+    flowMaterialConfig.offset = [0, 0];
+    flowMaterialConfig.scale = [0.1524, 0.1524];
+    flowMaterialConfig.id = "flow-material-" + data.id;
+    // 鏋勯�犳潗璐ㄥ璞� 
+    let flowMaterial = new Glodon.Bimface.Plugins.Material.Material(flowMaterialConfig);
+    _flowAnimationContainer.addMaterial(flowMaterial);
+    flowMaterial.overrideComponentsMaterialById([data.id]);//鏁扮粍
+    return flowMaterial;
+}
+
+//鍒涘缓姘存祦鍔ㄧ敾
+function createFlowEffect(material, data) {
+    // 鏋勯�犳按娴佸姩鐢婚厤缃�
+    let flowEffectConfig = new Glodon.Bimface.Plugins.Animation.FlowEffectConfig();
+    flowEffectConfig.material = material;
+    flowEffectConfig.speed = [data.speed, 0];
+    flowEffectConfig.viewer = _viewer;
+    flowEffectConfig.id = "flow-effect-" + data.id;
+    //鏋勯�犳按娴佸姩鐢�
+    let flowEffect = new Glodon.Bimface.Plugins.Animation.FlowEffect(flowEffectConfig);
+    _flowEffectList.add(flowEffect);
+    return flowEffect;
+}
+
+//閲嶇粯姘存祦鍔ㄧ敾
+function renderFlowEffect() {
+    // 娓叉煋涓夌淮妯″瀷锛屽姞杞藉浘鐗囪祫婧愰渶瑕佹椂闂达紝姝ゅ璁惧畾浜�500ms鐨勫欢杩�
+    setTimeout("_viewer.render()", 500);
+}
+
+//寮�濮嬫墍鏈夋按娴佸姩鐢�
+function playAllFlowEffectList() {
+    if (_flowEffectList.size > 0) {
+        _flowEffectList.forEach(x => x.play());
+    }
+}
+
+//鍋滄鎵�鏈夋按娴佸姩鐢�
+function stopAllFlowEffectList() {
+    if (_flowEffectList.size > 0) {
+        _flowEffectList.forEach(x => x.stop());
+    }
+}
+
+//鍔犺浇姘存祦鏉愯川
+function loadFlowMaterial(data) {
+    unloadAllFlowMaterialList();
+    let flowMaterial = createFlowMaterial(data);
+    let flowEffect = createFlowEffect(flowMaterial, data);
+    flowEffect.play();
+    renderFlowEffect();
+}
+
+//鍔犺浇鎵�鏈夋按娴佹潗璐�
+function loadAllFlowMaterialList(data) {
+    unloadAllFlowMaterialList();
+    if (data != null && data.length > 0) {
+        data.foreach(x => {
+            let flowMaterial = createFlowMaterial(x);
+            let flowEffect = createFlowEffect(flowMaterial, x);
+        });
+        playAllFlowEffectList();
+        renderFlowEffect();
+    }
+}
+
+//閫氳繃id鍗歌浇姘存祦鏉愯川
+function uploadFlowMaterialById(id) {
+    if (_flowEffectList.size > 0) {
+        let flowEffectId = "flow-effect-" + id;
+        let flowEffect = null;
+        _flowEffectList.forEach(x => {
+            if (x.getId() == flowEffectId) {
+                flowEffect = x;
+            }
+        });
+        if (flowEffect != null) {
+            flowEffect.stop();
+            _flowEffectList.delete(flowEffect);
+            let flowMaterialId = "flow-material-" + id;
+            initialFlowAnimationContainer();
+            let flowMaterial = _flowAnimationContainer.getMaterialById(flowMaterialId)
+            if (flowMaterial != null) {
+                flowMaterial.clearOverrideComponentsMaterial();
+                _flowAnimationContainer.removeMaterialById(flowMaterialId)
+            }
+        }
+    }
+}
+
+//鍗歌浇姘存祦鏉愯川
+function unloadAllFlowMaterialList() {
+    if (_flowEffectList.size > 0) {
+        _flowEffectList.forEach(x => {
+            x.stop();
+        });
+        _flowEffectList.clear();
+        clearFlowMaterial();
+    }
+    initialFlowAnimationContainer();
+    let flowMaterial = _flowAnimationContainer.getMaterialById(id)
+    if (flowMaterial != null) {
+        flowMaterial.clearOverrideComponentsMaterial();
+        _flowAnimationContainer.removeMaterialById(id)
+    }
+}
+
+//娓呴櫎娴侀噺姘磋川
+function clearFlowMaterial() {
+    initialFlowAnimationContainer();
+    var allMaterialList = _flowAnimationContainer.getAllMaterials();
+    if (allMaterialList != null && allMaterialList.length > 0) {
+        allMaterialList.foreach(x => {
+            x.clearOverrideComponentsMaterial();
+        });
+    }
+    _flowAnimationContainer.clear();
+}
+
+
+
+
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/PipeFlow.js b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/PipeFlow.js
deleted file mode 100644
index 96186c9..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/PipeFlow.js
+++ /dev/null
@@ -1,13 +0,0 @@
-锘�// 娴佸悜鍔ㄧ敾璁剧疆
-function setFlowAnimation(data) {
-    // viewer.getModel().isolateComponentsById(components, Glodon.Bimface.Viewer.IsolateOption.MakeOthersTranslucent);
-    // 鍔ㄧ敾
-    flowEffectConfig1 = new Glodon.Bimface.Plugins.Animation.FlowEffectConfig();
-    // 鏋勯�犳按娴佸姩鐢诲璞� flowEffect1
-    flowEffectConfig1.material = data;
-    flowEffectConfig1.speed = [0.01, 0];
-    flowEffectConfig1.viewer = _viewer;
-    flowEffect1 = new Glodon.Bimface.Plugins.Animation.FlowEffect(flowEffectConfig1);
-    flowEffect1.play();
-}
-

--
Gitblit v1.9.3