From e5f710407cce0298738fd8c1a82ad213dfb666d9 Mon Sep 17 00:00:00 2001
From: tian <11429339@qq.com>
Date: Sat, 16 May 2026 15:21:37 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=90=8E=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=89=96=E9=9D=A2=E7=9B=92=EF=BC=88Naviswork?=
=?UTF-8?q?s=20ExportToNwd=20=E5=86=85=E9=83=A8=E5=85=B3=E9=97=AD=E5=89=96?=
=?UTF-8?q?=E5=88=86=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- SectionClipHelper 新增 RestoreClipBox 公开方法
- VisibilityHelper.ExecuteWithPrecomputedHiddenItems 导出前保存剖面盒状态,导出后恢复
---
src/Utils/SectionClipHelper.cs | 8 ++++++++
src/Utils/VisibilityHelper.cs | 16 ++++++++++++++--
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/Utils/SectionClipHelper.cs b/src/Utils/SectionClipHelper.cs
index 1bd7757..13daff8 100644
--- a/src/Utils/SectionClipHelper.cs
+++ b/src/Utils/SectionClipHelper.cs
@@ -246,6 +246,14 @@ namespace NavisworksTransport.Utils
}
}
+ ///
+ /// 恢复剖面盒(用于被 Navisworks ExportToNwd 内部关闭后重新启用)
+ ///
+ public static void RestoreClipBox(BoundingBox3D box)
+ {
+ ApplyClipBox(box);
+ }
+
///
/// 获取当前剖面盒
///
diff --git a/src/Utils/VisibilityHelper.cs b/src/Utils/VisibilityHelper.cs
index 441e4ae..e35434f 100644
--- a/src/Utils/VisibilityHelper.cs
+++ b/src/Utils/VisibilityHelper.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using Autodesk.Navisworks.Api;
+using NavisworksTransport.Utils;
using NavisApplication = Autodesk.Navisworks.Api.Application;
namespace NavisworksTransport
@@ -261,9 +262,14 @@ namespace NavisworksTransport
return default(T);
}
- // 保存当前状态
+ // 保存可见性状态
var savedState = SaveVisibilityStateInternal(document);
+ // 保存剖面盒状态(Navisworks ExportToNwd 会内部关闭剖分)
+ bool clipWasEnabled = SectionClipHelper.IsClipBoxEnabled;
+ BoundingBox3D savedClipBox = default;
+ bool hasClipBox = SectionClipHelper.TryGetCurrentClipBox(out savedClipBox);
+
try
{
// 1. 全部显示
@@ -281,8 +287,14 @@ namespace NavisworksTransport
}
finally
{
- // 4. 恢复状态
+ // 4. 恢复可见性状态
RestoreVisibilityStateInternal(document, savedState);
+
+ // 5. 恢复剖面盒(Navisworks 导出时会关闭)
+ if (clipWasEnabled && !SectionClipHelper.IsClipBoxEnabled && hasClipBox)
+ {
+ SectionClipHelper.RestoreClipBox(savedClipBox);
+ }
}
}