From 97bf6dbecd2e387e0ab43222c0aea7de356e9a75 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Thu, 8 Jan 2026 15:53:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84GeometryCacheManager=E4=BB=A5?= =?UTF-8?q?=E4=BD=BF=E7=94=A8ModelItemAnalysisHelper=E8=8E=B7=E5=8F=96Mode?= =?UTF-8?q?lItem=E5=AE=8C=E6=95=B4=E8=B7=AF=E5=BE=84=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Utils/GeometryCacheManager.cs | 30 +++------------------------- src/Utils/ModelItemAnalysisHelper.cs | 29 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/Utils/GeometryCacheManager.cs b/src/Utils/GeometryCacheManager.cs index 65c35b7..00b466c 100644 --- a/src/Utils/GeometryCacheManager.cs +++ b/src/Utils/GeometryCacheManager.cs @@ -5,6 +5,7 @@ using System.Linq; using Autodesk.Navisworks.Api; using ComApi = Autodesk.Navisworks.Api.Interop.ComApi; using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge; +using NavisworksTransport.Utils; namespace NavisworksTransport.Utils { @@ -192,8 +193,8 @@ namespace NavisworksTransport.Utils var result = new List(); - // 获取ModelItem的所有路径 - var itemPaths = GetModelItemPaths(modelItem); + // 获取ModelItem的完整路径 + var itemPaths = ModelItemAnalysisHelper.GetModelItemIndexPaths(modelItem); // 收集所有路径下的片段 foreach (var pathKey in itemPaths) @@ -263,31 +264,6 @@ namespace NavisworksTransport.Utils return count; } - /// - /// 获取ModelItem的所有路径 - /// - /// 模型项 - /// 路径列表 - private List GetModelItemPaths(ModelItem modelItem) - { - var paths = new List(); - - // 转换为COM选择 - var modelCollection = new ModelItemCollection(); - modelCollection.Add(modelItem); - var comSelection = ComApiBridge.ToInwOpSelection(modelCollection); - - // 遍历所有路径 - foreach (ComApi.InwOaPath3 path in comSelection.Paths()) - { - var pathArray = ((Array)path.ArrayData).ToArray(); - var pathKey = string.Join(",", pathArray); - paths.Add(pathKey); - } - - return paths; - } - /// /// 获取指定路径下的所有片段 /// diff --git a/src/Utils/ModelItemAnalysisHelper.cs b/src/Utils/ModelItemAnalysisHelper.cs index 6c5c42d..ad698eb 100644 --- a/src/Utils/ModelItemAnalysisHelper.cs +++ b/src/Utils/ModelItemAnalysisHelper.cs @@ -2,6 +2,8 @@ using System; using System.Collections.Generic; using System.Linq; using Autodesk.Navisworks.Api; +using ComApi = Autodesk.Navisworks.Api.Interop.ComApi; +using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge; namespace NavisworksTransport.Utils { @@ -14,6 +16,33 @@ namespace NavisworksTransport.Utils #region 辅助方法 + /// + /// 获取ModelItem的完整路径 + /// + /// 模型项 + /// 路径列表 + public static List GetModelItemIndexPaths(ModelItem modelItem) + { + var paths = new List(); + + // 转换为COM选择 + var modelCollection = new ModelItemCollection + { + modelItem + }; + var comSelection = ComApiBridge.ToInwOpSelection(modelCollection); + + // 遍历完整路径 + foreach (ComApi.InwOaPath3 path in comSelection.Paths()) + { + var pathArray = ((Array)path.ArrayData).ToArray(); + var pathKey = string.Join(",", pathArray); + paths.Add(pathKey); + } + + return paths; + } + /// /// 检查一个ModelItem是否是另一个ModelItem的子节点 ///