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