如何使用Navisworks API获取Clash Detective UI中选中的clash结果项
Navisworks 2022 托管API已支持该能力,无需调用ComAPI,可通过Autodesk.Navisworks.Api.Clash命名空间下的接口实现,具体步骤如下:
- 首先在插件项目中添加对应版本的程序集引用:
Autodesk.Navisworks.Api.dll、Autodesk.Navisworks.Api.Clash.dll,确保程序集版本匹配2022的内部版本号(19.0.0.0) - 调用以下逻辑获取当前选中的冲突项,示例代码如下:
using Autodesk.Navisworks.Api; using Autodesk.Navisworks.Api.Clash; using System.Collections.Generic; public List<ClashResult> GetSelectedClashResults() { List<ClashResult> selectedResults = new List<ClashResult>(); // 获取当前文档的所有冲突测试 DocumentClashTests clashTests = Application.MainDocument.GetClashTests(); // 遍历所有激活的冲突测试 foreach (ClashTest test in clashTests.Tests) { if (!test.IsActive) continue; // 遍历分组内的冲突结果 foreach (ClashGroup group in test.Groups) { foreach (ClashResult result in group.Children) { if (result.IsSelected) { selectedResults.Add(result); } } } // 遍历未分组的冲突结果 foreach (ClashResult result in test.Results) { if (result.IsSelected) { selectedResults.Add(result); } } } return selectedResults; }
- 额外注意事项:
- 若需实时监听选中状态变更,可订阅
Application.MainDocument.ClashTests.ClashTestsChanged事件,配合UI面板激活状态判断即可实现实时捕获 - 当Clash Detective面板未处于激活状态时,
IsSelected属性会统一返回false,调用该逻辑前可先判断面板激活状态,避免返回空值 - 该方法仅对Navisworks 2020及以上版本生效,2022版本可直接调用无需适配
- 若需实时监听选中状态变更,可订阅
内容的提问来源于stack exchange,提问作者Amit Mandal
相关产品推荐
相关产品推荐

