0

我有一个 3D 建筑模型 (BIM) 的 IFC 文件,它拆分为组成物理对象,并且我有要分配给正确对象的属性。这些属性带有一个位置:它们是与 3D 空间中的一个点相关联的标量值。如果我有一个点 P1 = (x1, y1, z1),我如何确定这个点是位于门内还是门旁边的墙上(或两者都不是,在空中)?

我看到两个选项,但无法破译 Xbim/IFC 文档以使用任何一种方法到达任何地方:

  1. 查看 BIM 中的位置 P1 并询问:如果有的话,哪个物体占据了空间中的这个点?
  2. 查看 BIM 中的每个对象并询问:该对象是否根据其形状和全局位置围绕 P1 延伸?

作为一个额外的挑战,我最终可能会在一个非常大的 BIM 中分布数以万计的属性,因此首选低复杂度的算法。

4

1 回答 1

1

本质上,您正在查看碰撞检测算法。这是一个相当复杂的话题……

为了提高效率,您经常构建场景的OctTree - Xbim 在这里有一个实现https://github.com/xBimTeam/XbimGeometry/blob/master/Xbim.ModelGeometry.Scene/XbimOctree.cs

..你可以使用。

有一些高级示例代码使用边界框和八叉树来计算两个产品是否相交或包含彼此等,这可能会让您在https://github.com/xBimTeam/XbimAnalysis/tree/develop/ Xbim.Analysis/空间

..但您需要根据您的具体情况进行调整。另请注意,如果几何形状不规则,则针对边界框(或命中框)进行测试会产生一些误报(例如,椅子的边界框将具有比其真实几何形状大得多的体积),因此您可能需要一旦你有一个候选命中,一个更精确的碰撞检测。

于 2020-07-21T15:49:57.020 回答