lixiaojun
2025-04-09 9aa8106d88fc3070498493e2819922f7ac31746e
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";//水流材质图片
let _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;