fix: 剖面盒关闭时恢复 Planes 剖面不切换模式,修复 UI 指示器不显示
根因:ClearClipBox() 发送的是 Box 模式 JSON + Enabled:false, 将 ClipPlaneSet 模式从 Planes 切到 Box。后续再应用 Planes JSON 时模式又切回来,Navisworks 在该切换过程中未刷新 Planes 指示器。 修复:清除时不调用 ClearClipBox()(Box JSON),改为: 1. 发 Planes 模式 + Enabled:false(保持模式,仅禁用) 2. 发 Planes 模式 + Enabled:true(保持模式,仅切换启用) 全程模式不变,指示器正常显示。 移除已不需要的注释和调试日志。
This commit is contained in:
parent
17d774154d
commit
809df425ee
@ -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<bool>() ?? true;
|
||||
double range = jObj["Range"]?.Value<double>() ?? 0.0;
|
||||
bool linked = jObj["Linked"]?.Value<bool>() ?? 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
|
||||
|
||||
/// <summary>
|
||||
/// 构建 Planes 模式的 ClipPlaneSet JSON,
|
||||
/// 用与 BuildClipPlaneSetJson 一致的格式风格确保指示器显示。
|
||||
/// 保留原始 JSON 的所有字段(含 Linked),确保与 Navisworks 期望的格式一致。
|
||||
/// </summary>
|
||||
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<string>();
|
||||
@ -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());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user