From 9aa8106d88fc3070498493e2819922f7ac31746e Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期三, 09 四月 2025 15:09:05 +0800
Subject: [PATCH] 增加BIMFACE水流动画效果

---
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js |  141 +++++++++++++++++++++++++----------------------
 1 files changed, 75 insertions(+), 66 deletions(-)

diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js
index fd4021f..2150699 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js
@@ -1,18 +1,8 @@
-锘�
-let _flowAnimationContainer;//姘存祦鍔ㄧ敾瀹瑰櫒
-let _flowImgSrc = "https://static.bimface.com/attach/34d0d3aeb2e348aea5f3203b760ca667_flow5.png";//姘存祦鏉愯川鍥剧墖
+锘縧et _flowImgSrc = "https://static.bimface.com/attach/34d0d3aeb2e348aea5f3203b760ca667_flow5.png";//姘存祦鏉愯川鍥剧墖
 let _flowImgLocal = _base64_flow_effect.FlowEffect;//鏈湴姘存祦鏉愯川鍥剧墖,娴嬭瘯娌℃湁閫氳繃
 let _flowEffectList = new Set();//姘存祦鍔ㄧ敾鍒楄〃
+let _flowMaterialContainer;//姘存祦鏉愯川瀹瑰櫒
 
-
-//鍔犺浇姘存祦鍔ㄧ敾
-function loadFlowEffect(item) {
-    unloadFlowEffect();
-    let flowMaterial = createFlowMaterial(item);
-    let flowEffect = createFlowEffect(flowMaterial, item);
-    flowEffect.play();
-    renderFlowEffect();
-}
 
 //鍔犺浇姘存祦鍔ㄧ敾鍒楄〃
 function loadFlowEffectList(data) {
@@ -23,7 +13,28 @@
             createFlowEffect(flowMaterial, x);
         });
         playFlowEffect();
-        renderFlowEffect();
+    }
+}
+
+//鍔犺浇姘存祦鍔ㄧ敾
+function loadFlowEffect(item) {
+    unloadFlowEffect();
+    let flowMaterial = createFlowMaterial(item);
+    var flowEffect = createFlowEffect(flowMaterial, x);
+    flowEffect.play();
+}
+
+//鏇存柊姘存祦鍔ㄧ敾鍒楄〃
+function updateFlowEffectList(data) {
+    if (data != null && data.length > 0) {
+        if (_flowEffectList.size > 0) {
+            let flowEffectId = getFlowEffectId(item.id);
+            _flowEffectList.forEach(x => {
+                if (x.getId() == flowEffectId) {
+                    x.setSpeed([item.speedx, item.speedy]);
+                }
+            });
+        }
     }
 }
 
@@ -39,12 +50,19 @@
     }
 }
 
-//鏇存柊姘存祦鍔ㄧ敾鍒楄〃
-function updateFlowEffectList(data) {
-    if (data != null && data.length > 0) {
-        data.forEach(x => {
-            updateFlowEffect(x);
-        });
+//鍗歌浇姘存祦鍔ㄧ敾
+function unloadFlowEffect() {
+    if (_flowEffectList.size > 0) {
+        _flowEffectList.forEach(x => x.stop());
+        _flowEffectList.clear();
+        if (_flowMaterialContainer != null) {
+            let allMaterialList = _flowMaterialContainer.getAllMaterials();
+            if (allMaterialList != null && allMaterialList.length > 0) {
+                allMaterialList.forEach(x => {
+                    x.clearOverrideComponentsMaterial();
+                });
+            }
+        }
     }
 }
 
@@ -59,57 +77,17 @@
             }
         });
         if (flowEffect != null) {
+            flowEffect.stop();
             _flowEffectList.delete(flowEffect);
-            let flowMaterialId = getFlowMaterialId(id);
-            initialFlowAnimationContainer();
-            let flowMaterial = _flowAnimationContainer.getMaterialById(flowMaterialId)
-            if (flowMaterial != null) {
-                flowMaterial.clearOverrideComponentsMaterial();
-                _flowAnimationContainer.removeMaterialById(flowMaterialId)
+            if (_flowMaterialContainer != null) {
+                let flowMaterialId = getFlowMaterialId(id);
+                let flowMaterial = _flowMaterialContainer.getMaterialById(flowMaterialId)
+                if (flowMaterial != null) {
+                    flowMaterial.clearOverrideComponentsMaterial();
+                }
             }
         }
     }
-}
-
-//鍗歌浇姘存祦鍔ㄧ敾
-function unloadFlowEffect() {
-    if (_flowEffectList.size > 0) {
-        _flowEffectList.clear();
-        initialFlowAnimationContainer();
-        let allMaterialList = _flowAnimationContainer.getAllMaterials();
-        if (allMaterialList != null && allMaterialList.length > 0) {
-            allMaterialList.forEach(x => {
-                x.clearOverrideComponentsMaterial();
-            });
-        }
-        _flowAnimationContainer.clear();
-    }
-}
-
-//鍒濆鍖栨按娴佸姩鐢诲鍣�
-function initialFlowAnimationContainer() {
-    if (_flowAnimationContainer == null) {
-        // 鏋勯�犳按娴佹潗璐ㄥ鍣�
-        _flowAnimationContainer = new Glodon.Bimface.Plugins.Material.MaterialContainer();
-    }
-}
-
-//鍒涘缓姘存祦鏉愯川
-function createFlowMaterial(item) {
-    initialFlowAnimationContainer();
-    // 鏋勯�犳潗璐ㄩ厤缃� 
-    let flowMaterialConfig = new Glodon.Bimface.Plugins.Material.MaterialConfig();
-    flowMaterialConfig.viewer = _viewer;
-    flowMaterialConfig.src = _flowImgLocal;
-    flowMaterialConfig.rotation = item.rotation;
-    flowMaterialConfig.offset = [0, 0];
-    flowMaterialConfig.scale = [0.1524, 0.1524];
-    flowMaterialConfig.id = getFlowMaterialId(item.id);
-    // 鏋勯�犳潗璐ㄥ璞� 
-    let flowMaterial = new Glodon.Bimface.Plugins.Material.Material(flowMaterialConfig);
-    _flowAnimationContainer.addMaterial(flowMaterial);
-    flowMaterial.overrideComponentsMaterialById([item.id]);//鏁扮粍
-    return flowMaterial;
 }
 
 //鍒涘缓姘存祦鍔ㄧ敾
@@ -126,6 +104,37 @@
     return flowEffect;
 }
 
+//鍒涘缓姘存祦鏉愯川
+function createFlowMaterial(item) {
+    //鍒濆鍖栨按娴佹潗璐ㄥ鍣�
+    initialFlowMaterialContainer();
+    var flowMaterialId = getFlowMaterialId(item.id);
+    let flowMaterial = _flowMaterialContainer.getMaterialById(flowMaterialId);
+    if (flowMaterial == null) {
+        // 鏋勯�犳潗璐ㄩ厤缃� 
+        let flowMaterialConfig = new Glodon.Bimface.Plugins.Material.MaterialConfig();
+        flowMaterialConfig.viewer = _viewer;
+        flowMaterialConfig.src = _flowImgLocal;
+        flowMaterialConfig.rotation = item.rotation;
+        flowMaterialConfig.offset = [0, 0];
+        flowMaterialConfig.scale = [0.1524, 0.1524];
+        flowMaterialConfig.id = flowMaterialId;
+        // 鏋勯�犳潗璐ㄥ璞� 
+        flowMaterial = new Glodon.Bimface.Plugins.Material.Material(flowMaterialConfig);
+        _flowMaterialContainer.addMaterial(flowMaterial);
+    }
+    flowMaterial.overrideComponentsMaterialById([item.id]);//鏁扮粍
+    return flowMaterial;
+}
+
+//鍒濆鍖栨按娴佹潗璐ㄥ鍣�
+function initialFlowMaterialContainer() {
+    if (_flowMaterialContainer == null) {
+        // 鏋勯�犳按娴佹潗璐ㄥ鍣�
+        _flowMaterialContainer = new Glodon.Bimface.Plugins.Material.MaterialContainer();
+    }
+}
+
 //鑾峰彇姘存祦鍔ㄧ敾id
 function getFlowEffectId(id) {
     return "flow-effect-" + id;

--
Gitblit v1.9.3