From 809df425ee85fb1cbb262639b41165164b5fc051 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Tue, 30 Jun 2026 20:49:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=89=96=E9=9D=A2=E7=9B=92=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=97=B6=E6=81=A2=E5=A4=8D=20Planes=20=E5=89=96?= =?UTF-8?q?=E9=9D=A2=E4=B8=8D=E5=88=87=E6=8D=A2=E6=A8=A1=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20UI=20=E6=8C=87=E7=A4=BA=E5=99=A8=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:ClearClipBox() 发送的是 Box 模式 JSON + Enabled:false, 将 ClipPlaneSet 模式从 Planes 切到 Box。后续再应用 Planes JSON 时模式又切回来,Navisworks 在该切换过程中未刷新 Planes 指示器。 修复:清除时不调用 ClearClipBox()(Box JSON),改为: 1. 发 Planes 模式 + Enabled:false(保持模式,仅禁用) 2. 发 Planes 模式 + Enabled:true(保持模式,仅切换启用) 全程模式不变,指示器正常显示。 移除已不需要的注释和调试日志。 --- src/Utils/SectionClipHelper.cs | 41 +++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/Utils/SectionClipHelper.cs b/src/Utils/SectionClipHelper.cs index 9e8bd55..f9770fd 100644 --- a/src/Utils/SectionClipHelper.cs +++ b/src/Utils/SectionClipHelper.cs @@ -285,6 +285,7 @@ namespace NavisworksTransport.Utils // === Box 模式:提取包围盒,用 ApplyClipBox 重建(已知能显示指示器) === if (jObj["OrientedBox"] != null) { + LogManager.Debug($"[剖面盒] 重建: 检测到 Box 模式,OrientedBox 内容: {jObj["OrientedBox"].ToString()}"); var boxArr = jObj["OrientedBox"]?["Box"]; if (boxArr != null && boxArr.Count() >= 2) { @@ -292,36 +293,43 @@ namespace NavisworksTransport.Utils if (TryParseJArrayToPoint3D(boxArr[0], out min) && TryParseJArrayToPoint3D(boxArr[1], out max)) { + LogManager.Debug($"[剖面盒] 重建: 提取 Box min=({min.X}, {min.Y}, {min.Z}), max=({max.X}, {max.Y}, {max.Z})"); ApplyClipBox(new BoundingBox3D(min, max)); LogManager.Info("[剖面盒] 已通过 Box 模式重建剖面状态(含指示器)"); return true; } + else + { + LogManager.Warning("[剖面盒] 重建: Box 数组解析失败"); + } + } + else + { + LogManager.Warning("[剖面盒] 重建: OrientedBox 中缺少 Box 数组"); } } - // === Planes 模式:提取平面数据,重建 Planes JSON === + // === Planes 模式:先清除再恢复,确保 UI 指示器刷新 === if (jObj["Planes"] != null) { bool enabled = jObj["Enabled"]?.Value() ?? true; double range = jObj["Range"]?.Value() ?? 0.0; + bool linked = jObj["Linked"]?.Value() ?? false; - string planesJson = BuildClipPlaneSetPlanesJson(jObj["Planes"] as JArray, enabled, range); + // 先发 Planes 模式 + Enabled:false(保持模式不变,仅禁用) + string planesDisabledJson = BuildClipPlaneSetPlanesJson(jObj["Planes"] as JArray, false, range, linked); var view = Application.ActiveDocument.ActiveView; - bool success = view.TrySetClippingPlanes(planesJson); + view.TrySetClippingPlanes(planesDisabledJson); - if (success) - { - LogManager.Info("[剖面盒] 已通过 Planes 模式重建剖面状态(含指示器)"); - return true; - } + // 再发 Planes 模式 + Enabled:true(仅切换 Enabled,模式没变) + string planesEnabledJson = BuildClipPlaneSetPlanesJson(jObj["Planes"] as JArray, enabled, range, linked); + view.TrySetClippingPlanes(planesEnabledJson); - // Try 失败则尝试 Set 版本 - view.SetClippingPlanes(planesJson); - LogManager.Info("[剖面盒] 已通过 Planes 模式重建剖面状态(含指示器,Set 路径)"); + LogManager.Info("[剖面盒] 已通过 Planes 模式重建剖面状态(含指示器)"); return true; } - LogManager.Warning("[剖面盒] 无法识别保存的剖面 JSON 结构"); + LogManager.Warning($"[剖面盒] 无法识别保存的剖面 JSON 结构。完整 JSON: {savedJson}"); return false; } catch (Exception ex) @@ -357,9 +365,9 @@ namespace NavisworksTransport.Utils /// /// 构建 Planes 模式的 ClipPlaneSet JSON, - /// 用与 BuildClipPlaneSetJson 一致的格式风格确保指示器显示。 + /// 保留原始 JSON 的所有字段(含 Linked),确保与 Navisworks 期望的格式一致。 /// - private static string BuildClipPlaneSetPlanesJson(JArray planesArray, bool enabled, double range) + private static string BuildClipPlaneSetPlanesJson(JArray planesArray, bool enabled, double range, bool linked = false) { // 逐个提取平面数据 var planeJsons = new List(); @@ -402,11 +410,12 @@ namespace NavisworksTransport.Utils string planesArrayStr = string.Join(",", planeJsons); string rangeStr = range > 0 ? $",\"Range\":{range.ToString("G17")}" : ""; + string linkedStr = $",\"Linked\":{linked.ToString().ToLowerInvariant()}"; return string.Format( "{{\"Type\":\"ClipPlaneSet\",\"Version\":1," + - "\"Planes\":[{0}]{1},\"Enabled\":{2}}}", - planesArrayStr, rangeStr, enabled.ToString().ToLowerInvariant()); + "\"Planes\":[{0}]{1}{2},\"Enabled\":{3}}}", + planesArrayStr, rangeStr, linkedStr, enabled.ToString().ToLowerInvariant()); } ///