You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Navisworks API中添加预定义及自定义碰撞检测忽略规则?

规则用于将特定操作或条目应用到一组条目上,TimeLiner与Clash Detective功能均使用这类规则。该类支持启用或禁用指定规则。

开发Navisworks碰撞检测自动化Add-in时,多数人卡在规则配置环节的核心原因是:Autodesk.Navisworks.Api.Clash命名空间下的Rule类没有公开的可实例化构造函数,无法通过new Rule()直接创建合法规则实例,必须通过ClashTest测试对象内置的规则创建方法生成规则,挂载到测试项的规则集合中才能在检测时生效。

实现流程

  • 操作入口:直接通过现有代码中documentClashTest对象(即DocumentClashTests类型的实例,是管理文档内所有碰撞测试的核心入口,也就是已经用来执行TestsRunAllTests()的对象)获取目标碰撞测试项,即可开始配置规则。
  • 预定义规则添加:Navisworks原生碰撞面板展示的所有忽略规则,均有对应的API创建方法,直接调用即可生成和原生功能完全一致的合法规则:
    • 忽略同一构件内部碰撞:调用测试项的CreateRuleIgnoreSameModelItem()方法生成规则,加入测试项的Rules集合
    • 忽略同一源文件内构件的碰撞:调用CreateRuleIgnoreSameSourceFile()方法生成规则
    • 过滤小于指定距离的软碰撞:调用CreateRuleMinDistance(double distance)方法,传入适配模型单位的距离阈值生成规则
    • 忽略指定构件集合的碰撞:调用CreateRuleIgnoreModelItems(ModelItemCollection items)方法,传入需要排除的构件集合生成规则
  • 自定义规则搭建:如果需要匹配特定属性的构件(比如指定楼层、指定专业的构件不参与碰撞计算),可以通过规则组合的方式实现:
    1. 先调用测试项的内置方法,生成基于模型属性的基础匹配规则(比如匹配构件属性中“楼层=3F”“专业=消防”的条目)
    2. 通过逻辑与/或关系将多条基础规则组合成复合规则
    3. 必须为复合规则指定作用范围(即规则是匹配A检测集、B检测集还是两侧都匹配),否则规则不会触发过滤逻辑

关键注意事项

  • 所有规则的创建、启停操作,必须在执行documentClashTest.TestsRunAllTests()方法之前完成,否则已经运行完成的碰撞结果不会回溯应用新规则的过滤逻辑
  • 每一条生成的规则都自带IsEnabled属性,可以随时调整规则的生效状态,不需要重新创建规则对象
  • 禁止直接将非当前测试对象生成的Rule实例加入规则集合,不属于测试上下文的规则会导致加载异常

简化代码示例

// 获取文档内当前激活的碰撞测试
var currentTest = documentClashTest.ActiveTest;
// 添加忽略同构件内部碰撞的规则
var samePartRule = currentTest.CreateRuleIgnoreSameModelItem();
samePartRule.IsEnabled = true;
currentTest.Rules.Add(samePartRule);
// 添加距离过滤规则,忽略小于2mm的无效碰撞
var minDistRule = currentTest.CreateRuleMinDistance(0.002);
minDistRule.IsEnabled = true;
currentTest.Rules.Add(minDistRule);
// 执行全量碰撞检测
documentClashTest.TestsRunAllTests();

内容的提问来源于stack exchange,提问作者Md. Shohag Mia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 22:36:04