钢结构 IFC 碰撞检查:为什么一跑就是几千条,怎么才能只剩该看的
碰撞检查的价值不由算法精度决定,而由误报率决定。本文讲清楚螺栓穿孔为什么不该报、构造缝为什么不是问题、间隙阈值该取多少,以及一份模型没打散成构件时会发生什么。
很多人第一次对钢结构模型跑碰撞检查,拿到的是一份几千条的清单,翻了两页就再也不打开了。问题几乎从来不是算法算错了——那几千处几何相交是真实存在的——而是其中绝大多数根本不是问题。一套碰撞检查好不好用,取决于它排除了什么,不取决于它能报出多少条。
四类必须排除的「相交」
在钢结构模型里,以下四种几何相交是设计本身,报出来只会淹没真问题:
- 紧固件穿孔。螺栓穿过钢板上的孔就是设计意图。在真实模型里紧固件能占到构件总数的三成左右,不排除它们,清单里剩下的全是螺栓。
- 同一个构件内部的零件。一根梁上的加劲板、连接板、端板和梁本体是焊在一起的,它们当然相交。判断两个零件是不是同一个构件,要看装配体这一层,不能只看直接父节点——有的模型几万个零件的父节点全是同一个楼层,照直用会把整个模型当成一个构件,结果一条都报不出来。
- 已经贴合的构件对之间的小间隙。两个构件如果在某一处贴合,说明它们是连着的,那么连接处附近的几毫米缝隙是节点构造,不是问题。判据是按构件对归并:一对构件只要在任何一处最小净距接近于零,整对就不再报间隙。
- 重复构件带来的重复结论。钢结构是高度重复的,同一个节点做法可能出现几百次。按编号对归并之后,一条结论带一个「共 N 处」,清单从几千条回到几十条。
间隙阈值取多少
净距小于多少算问题,这个数字不能拍脑袋。在真实钢结构模型里,构件之间的净距不是均匀分布的,而是明显集中在 1、2、5、10、20 毫米这几个档位上——因为那些是设计留出的构造缝:檩条与檩托之间 2 毫米、墙梁与柱之间 10 毫米、门框周边 20 毫米。
所以阈值取 10 毫米且判据是严格小于,是一个有依据的选择:它盖住了明显过紧的配合,又刚好把 10 毫米那一档常见构造缝排除在外。阈值放到 30 毫米,会把整片构造缝纳进来,清单立刻回到不可用的状态。反过来取到 2 毫米,则会漏掉真正装不进去的地方。
侵入深度不能用包围盒估
报出一处碰撞只是一半,另一半是说清楚扎进去多少。这个数字如果用包围盒或者相交区域的尺寸来估,会错得离谱:两块面对面贴着的端板,真实侵入约 0.1 毫米,用包围盒估会得到 50 毫米;两根交叉的圆钢,真实侵入十几毫米,用包围盒估能得到 500 毫米以上。看到这种数字的人第二次就不会再信这张清单了。
同样重要的是结论指向的位置。位置应该取侵入最深的那个点,而不是相交区域的几何中心——对于细长构件,两者能差出几十米。用户点进结论飞过去,看到的却是一切正常的地方,一次就足够毁掉整张清单的可信度。
模型没打散成构件时会发生什么
如果导出的 IFC 里所有零件都是平铺的、没有装配体这一层,那么「同一个构件内部不配对」这条排除会完全失效。后果不只是误报变多:焊在一起的零件全部进入配对,相交率能到一半,而每一对相交都要做一次完整的深度计算,检查耗时会高出一个数量级。
所以导出 IFC 时保留装配体结构,不只是为了看着整齐,它直接决定了碰撞检查能不能用。如果你的模型跑出来结论异常多、或者跑得异常慢,先检查这一点。