lixiaojun
2024-11-01 3fed96c58275f09fc2599c494207dff08425ef40
水流动画测试
已修改7个文件
已添加1个文件
252 ■■■■■ 文件已修改
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/05-logic-flow/LogicFlowEffect.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/img/flowEffect.png 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
@@ -485,11 +485,19 @@
        #region 业务水流动画
        /// <summary>
        ///
        /// 加载水流动画
        /// </summary>
        public async Task LoadAllFlowMaterialList(List<LogicFlowEffect> obj)
        public async Task LoadFlowEffect(LogicFlowEffect obj)
        {
            await _bimfaceInteropContainer?.LoadAllFlowMaterialList(obj);
            await _bimfaceInteropContainer?.LoadFlowEffect(obj);
        }
        /// <summary>
        /// 加载水流动画列表
        /// </summary>
        public async Task LoadFlowEffectList(List<LogicFlowEffect> obj)
        {
            await _bimfaceInteropContainer?.LoadFlowEffectList(obj);
        }
        #endregion
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -1999,18 +1999,25 @@
        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var pipes = _hydroInfo.GetAllPipes();
            var pipes = _hydroInfo.Pipes;
            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);
            _bimfaceCtrl?.LoadFlowEffectList(list);
            //var obj = new LogicFlowEffect()
            //{
            //    Id = "757125",
            //    Rotation = 90,
            //    Speed = 0.1d
            //};
            //_bimfaceCtrl?.LoadFlowEffect(obj);
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/05-logic-flow/LogicFlowEffect.cs
@@ -18,12 +18,6 @@
        public int Rotation { get; set; }
        /// <summary>
        /// 方向
        /// </summary>
        [JsonProperty("direction", NullValueHandling = NullValueHandling.Ignore)]
        public bool Direction { get; set; }
        /// <summary>
        /// 速度
        /// </summary>
        [JsonProperty("speed", NullValueHandling = NullValueHandling.Ignore)]
WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
@@ -471,15 +471,27 @@
        #region 业务水流动画
        /// <summary>
        /// 设置业务标注引线标签
        /// 加载水流动画
        /// </summary>
        public async Task LoadAllFlowMaterialList(List<LogicFlowEffect> obj)
        public async Task LoadFlowEffect(LogicFlowEffect obj)
        {
            if (!_isViewInitialized)
            {
                return;
            }
            await this.webViewControl1.EvaluateScriptAsync("loadAllFlowMaterialList", obj);
            await this.webViewControl1.EvaluateScriptAsync("loadFlowEffect", obj);
        }
        /// <summary>
        /// 加载水流动画列表
        /// </summary>
        public async Task LoadFlowEffectList(List<LogicFlowEffect> obj)
        {
            if (!_isViewInitialized)
            {
                return;
            }
            await this.webViewControl1.EvaluateScriptAsync("loadFlowEffectList", obj);
        }
WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
@@ -181,9 +181,14 @@
        #region 自定义水流动画
        /// <summary>
        /// 加载所有水流动画列表
        /// 加载水流动画
        /// </summary>
        Task LoadAllFlowMaterialList(List<LogicFlowEffect> obj);
        Task LoadFlowEffect(LogicFlowEffect obj);
        /// <summary>
        /// 加载水流动画列表
        /// </summary>
        Task LoadFlowEffectList(List<LogicFlowEffect> obj);
        #endregion
WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -28,6 +28,7 @@
    <None Remove="bimface\css\Panel.css" />
    <None Remove="bimface\css\Tailwind.css" />
    <None Remove="bimface\html\Interop3d.html" />
    <None Remove="bimface\img\flowEffect.png" />
    <None Remove="bimface\js\Background.js" />
    <None Remove="bimface\js\CameraStatus.js" />
    <None Remove="bimface\js\ComponentsBlink.js" />
@@ -58,6 +59,9 @@
    <Content Include="bimface\html\Interop3d.html">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="bimface\img\flowEffect.png">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="bimface\js\Background.js">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/img/flowEffect.png
WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LogicFlowEffect.js
@@ -1,94 +1,38 @@

let _flowAnimationContainer;//水流动画容器
let _flowImgSrc = "https://static.bimface.com/attach/34d0d3aeb2e348aea5f3203b760ca667_flow5.png";//水流材质图片
let _flowImgLocal = "../img/flowEffect.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);
//加载水流动画
function loadFlowEffect(item) {
    unloadFlowMaterial();
    let flowMaterial = createFlowMaterial(item);
    let flowEffect = createFlowEffect(flowMaterial, item);
    flowEffect.play();
    renderFlowEffect();
}
//加载所有水流材质
function loadAllFlowMaterialList(data) {
    unloadAllFlowMaterialList();
//加载水流动画列表
function loadFlowEffectList(data) {
    unloadFlowMaterial();
    if (data != null && data.length > 0) {
        data.foreach(x => {
        data.forEach((x, index) => {
            let flowMaterial = createFlowMaterial(x);
            let flowEffect = createFlowEffect(flowMaterial, x);
            createFlowEffect(flowMaterial, x);
        });
        playAllFlowEffectList();
        playFlowEffect();
        renderFlowEffect();
    }
}
//通过id卸载水流材质
function uploadFlowMaterialById(id) {
function unloadFlowMaterialById(id) {
    if (_flowEffectList.size > 0) {
        let flowEffectId = "flow-effect-" + id;
        let flowEffectId = getFlowEffectId(id);
        let flowEffect = null;
        _flowEffectList.forEach(x => {
            if (x.getId() == flowEffectId) {
@@ -96,9 +40,9 @@
            }
        });
        if (flowEffect != null) {
            flowEffect.stop();
            //flowEffect.stop();
            _flowEffectList.delete(flowEffect);
            let flowMaterialId = "flow-material-" + id;
            let flowMaterialId = getFlowMaterialId(id);
            initialFlowAnimationContainer();
            let flowMaterial = _flowAnimationContainer.getMaterialById(flowMaterialId)
            if (flowMaterial != null) {
@@ -110,34 +54,94 @@
}
//卸载水流材质
function unloadAllFlowMaterialList() {
function unloadFlowMaterial() {
    if (_flowEffectList.size > 0) {
        _flowEffectList.forEach(x => {
            x.stop();
        });
        //_flowEffectList.forEach(x => {
        //    x.stop();
        //});
        _flowEffectList.clear();
        clearFlowMaterial();
    }
    initialFlowAnimationContainer();
    let flowMaterial = _flowAnimationContainer.getMaterialById(id)
    if (flowMaterial != null) {
        flowMaterial.clearOverrideComponentsMaterial();
        _flowAnimationContainer.removeMaterialById(id)
        initialFlowAnimationContainer();
        let allMaterialList = _flowAnimationContainer.getAllMaterials();
        if (allMaterialList != null && allMaterialList.length > 0) {
            allMaterialList.foreach(x => {
                x.clearOverrideComponentsMaterial();
            });
        }
        _flowAnimationContainer.clear();
    }
}
//清除流量水质
function clearFlowMaterial() {
    initialFlowAnimationContainer();
    var allMaterialList = _flowAnimationContainer.getAllMaterials();
    if (allMaterialList != null && allMaterialList.length > 0) {
        allMaterialList.foreach(x => {
            x.clearOverrideComponentsMaterial();
        });
//初始化水流动画容器
function initialFlowAnimationContainer() {
    if (_flowAnimationContainer == null) {
        // 构造水流材质容器
        _flowAnimationContainer = new Glodon.Bimface.Plugins.Material.MaterialContainer();
    }
    _flowAnimationContainer.clear();
}
//创建水流材质
function createFlowMaterial(item) {
    initialFlowAnimationContainer();
    // 构造材质配置
    let flowMaterialConfig = new Glodon.Bimface.Plugins.Material.MaterialConfig();
    flowMaterialConfig.viewer = _viewer;
    flowMaterialConfig.src = _flowImgSrc;
    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;
}
//创建水流动画
function createFlowEffect(material, item) {
    // 构造水流动画配置
    let flowEffectConfig = new Glodon.Bimface.Plugins.Animation.FlowEffectConfig();
    flowEffectConfig.material = material;
    flowEffectConfig.speed = [item.speed, 0];
    flowEffectConfig.viewer = _viewer;
    flowEffectConfig.id = getFlowEffectId(item.id);
    //构造水流动画
    let flowEffect = new Glodon.Bimface.Plugins.Animation.FlowEffect(flowEffectConfig);
    _flowEffectList.add(flowEffect);
    return flowEffect;
}
//获取水流动画id
function getFlowEffectId(id) {
    return "flow-effect-" + id;
}
//获取水流材质id
function getFlowMaterialId(id) {
    return "flow-material-" + id;
}
//开始水流动画
function playFlowEffect() {
    if (_flowEffectList.size > 0) {
        _flowEffectList.forEach(x => x.play());
    }
}
//停止水流动画
function stopFlowEffect() {
    if (_flowEffectList.size > 0) {
        _flowEffectList.forEach(x => x.stop());
    }
}
//重绘水流动画
function renderFlowEffect() {
    // 渲染三维模型,加载图片资源需要时间,此处设定了500ms的延迟
    setTimeout("_viewer.render()", 500);
}