重构GeometryCacheManager以使用ModelItemAnalysisHelper获取ModelItem完整路径,移除冗余代码

This commit is contained in:
tian 2026-01-08 15:53:00 +08:00
parent a3bee9a0ba
commit 97bf6dbecd
2 changed files with 32 additions and 27 deletions

View File

@ -5,6 +5,7 @@ using System.Linq;
using Autodesk.Navisworks.Api; using Autodesk.Navisworks.Api;
using ComApi = Autodesk.Navisworks.Api.Interop.ComApi; using ComApi = Autodesk.Navisworks.Api.Interop.ComApi;
using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge; using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge;
using NavisworksTransport.Utils;
namespace NavisworksTransport.Utils namespace NavisworksTransport.Utils
{ {
@ -192,8 +193,8 @@ namespace NavisworksTransport.Utils
var result = new List<Triangle3D>(); var result = new List<Triangle3D>();
// 获取ModelItem的所有路径 // 获取ModelItem的完整路径
var itemPaths = GetModelItemPaths(modelItem); var itemPaths = ModelItemAnalysisHelper.GetModelItemIndexPaths(modelItem);
// 收集所有路径下的片段 // 收集所有路径下的片段
foreach (var pathKey in itemPaths) foreach (var pathKey in itemPaths)
@ -263,31 +264,6 @@ namespace NavisworksTransport.Utils
return count; return count;
} }
/// <summary>
/// 获取ModelItem的所有路径
/// </summary>
/// <param name="modelItem">模型项</param>
/// <returns>路径列表</returns>
private List<string> GetModelItemPaths(ModelItem modelItem)
{
var paths = new List<string>();
// 转换为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<int>();
var pathKey = string.Join(",", pathArray);
paths.Add(pathKey);
}
return paths;
}
/// <summary> /// <summary>
/// 获取指定路径下的所有片段 /// 获取指定路径下的所有片段
/// </summary> /// </summary>

View File

@ -2,6 +2,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Autodesk.Navisworks.Api; using Autodesk.Navisworks.Api;
using ComApi = Autodesk.Navisworks.Api.Interop.ComApi;
using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge;
namespace NavisworksTransport.Utils namespace NavisworksTransport.Utils
{ {
@ -14,6 +16,33 @@ namespace NavisworksTransport.Utils
#region #region
/// <summary>
/// 获取ModelItem的完整路径
/// </summary>
/// <param name="modelItem">模型项</param>
/// <returns>路径列表</returns>
public static List<string> GetModelItemIndexPaths(ModelItem modelItem)
{
var paths = new List<string>();
// 转换为COM选择
var modelCollection = new ModelItemCollection
{
modelItem
};
var comSelection = ComApiBridge.ToInwOpSelection(modelCollection);
// 遍历完整路径
foreach (ComApi.InwOaPath3 path in comSelection.Paths())
{
var pathArray = ((Array)path.ArrayData).ToArray<int>();
var pathKey = string.Join(",", pathArray);
paths.Add(pathKey);
}
return paths;
}
/// <summary> /// <summary>
/// 检查一个ModelItem是否是另一个ModelItem的子节点 /// 检查一个ModelItem是否是另一个ModelItem的子节点
/// </summary> /// </summary>