BIM模型相连构件获取方法

2020-11-24 06:18苏鼎丁周小平
土木建筑工程信息技术 2020年2期
关键词:碰撞检测构件网格

苏鼎丁 王 佳, 2 周小平

(1.北京建筑大学电气与信息工程学院,北京 100044;2.北京建筑大学建筑节能与安全监控研究所,北京 102616)

引言

BIM模型中集成了建筑的诸多信息,如几何、空间关系[1]、数量和属性等信息[2],信息完备的模型可以贯穿整个建筑的生命周期,为建筑的全生命周期提供服务。BIM模型中包含了建筑的全部信息,这些信息之间彼此关联,其中所包含的构件间连接关系在建模时就已经存在。然而由于模型在建立过程中并不都十分规范,或者由于BIM模型的源文件—IFC文件解析时出现问题,使得从业者获得相连构件有一定困难,因此本研究提出了一种以改良的OBB包围盒碰撞检测算法为基础的相连构件查找方法。

本研究中针对的是以通用交互格式工业基础类(IFC)文件为数据源文件的BIM模型,IFC标准IFC2x3包括600多个实体(Entity)以及300多个枚举、选择等类,还包含各种建筑部件间的语义连接关系[3]。其中IfcRelationship是一个比较特殊的概念,用来描述实体对象间的相互关系,IFC把建筑实体之间的关系,以及概念之间的关系都抽象为对象,任何两个对象之间的联系都要通过IfcRelationship联系。IfcRelationship中定义了IfcRelConnects子类,该子类定义了两个或多个对象间的某种方式的连接关系[4]。目前获取相连构件的方法主要是通过对IFC文件进行解析,通过解析IfcRelConnects子类中的连接关系获得相连构件。

本研究中根据BIM模型中所包含的构件的语义信息、几何信息等,可以获得任意两个构件的位置,再给其中一个构件一偏移量,然后利用OBB包围盒碰撞检测算法判断两构件是否发生碰撞,若发生碰撞,则为相连构件,若未发生碰撞,则为不相连构件。

1 OBB包围盒碰撞检测算法

包围盒技术的基本思想是先使用简单的几何体来代替复杂的几何体,再根据包围盒在分离轴上是否有重叠来判断其包围的几何体是否发生碰撞。包围体类包括球体、轴对齐包围盒(AABB)和有向包围盒(OBB)。其中,包围球和AABB的紧密性较差,并不适用于本研究中对于相连构件的检测。而OBB包围盒始终沿着物体的主成分方向生成一个最小的矩形包围盒,这个包围盒可以随物体旋转,能够用于比较精确的碰撞检测。所以,本研究中采用了OBB包围盒算法。

1.1 构建OBB包围盒

本研究中需要构建的是BIM模型中各个构件的包围盒,以IFC文件为源文件的BIM模型在经过解析之后可以将实体几何表达转换为三角网格(triangle mesh)数据[5],这些三角网格数据构建成了模型的构件,这些构件可能是规则的凸多面体,也可能是弧形或者其他特殊形状的多面体,本研究中的OBB包围盒将根据这两种情况来构建。

构建出的OBB包围盒一般是长方体,构建时多用一个中心点、一个旋转矩阵和三个1/2边长来确定OBB包围盒。由于OBB包围盒的三条边的方向有任意性,所以其计算方法比其他包围体更为复杂,目前常用的方法是利用主成分分析法(PCA)构建OBB包围盒。

构建OBB包围盒时,根据物体表面的顶点,通过主成分分析获得特征向量,也就是OBB包围盒的主轴。在本小节构建OBB包围盒的算法中,通过遍历表达构件几何的三角网格顶点,分析主成分即可获得始终沿构件主体方向的OBB主轴。主成分分析中引入协方差矩阵[6]:

(1)

其中,i与j为构件内任意三角网格点,通过计算其x,y,z值的协方差表达2个三角网格点相关性。再将协方差矩阵对角化、计算得出特征向量,此特征向量即为凸多面体的OBB方向轴,再计算得到中心点,此时OBB包围盒形成。

由于BIM模型中可能有弧形或者其他特殊形状的构件存在,所以需要对构建的OBB包围盒进行检测。若包围盒的大小与构件的大小一致,则该构件为规则的凸多面体,所构建的OBB包围盒为构件的包围盒,若不一致,则需引入层次包围盒。

由于构件的几何模型是由三角网格数据构成的,所以可以采用自顶向下的方法构造层次包围盒树,以BIM模型中的构件为根节点,递归划分组成构件的三角网格数据,同时计算出对应的OBB包围盒,直到递归结束,即可生成构件的OBB包围盒层次树。

本研究中OBB包围盒层次树的构造原则为[7]:

步骤1:对构件建立OBB包围盒,将该包围盒作为OBB包围盒层次树的根节点且该包围盒包含了构件中所有三角网格;

步骤2:选择当前OBB节点中最长的一条边作为分裂轴,该边的中点为分裂点,过该分裂点并且与分裂轴相垂直的平面作为分裂平面,划分三角网格时,根据其中心点所在的位置,将三角网格划分在分裂平面的两边。此时得到了两个三角网格的集合,用这两个三角网格集合可以得到两个OBB包围盒,并分别以这两个OBB节点作为当前节点,递归执行步骤2,如果不可以分裂,则执行步骤3;

步骤3:选择当前OBB节点的次长轴进行分裂,如果可以分裂,则将新生成的OBB节点作为当前节点,执行步骤2,如果不可以分裂,则执行步骤4;

步骤4:选择最短的边,如果不可以进行分裂,则该三角网格集合不可以再分,将其作为叶子节点,如果可以进行分裂,则分别生成两个OBB节点作为当前节点,执行步骤2。

图1是根据此原则构造OBB包围盒层次树的过程,其中S形构件由虚线表示,该过程在构件包围盒的三个轴都无法分裂时为止。

图1 OBB包围盒层次树

1.2 OBB包围盒碰撞检测

OBB包围盒相较于其他包围盒具有方向的任意性,可以更紧密地包围模型,但是这也使得其碰撞检测变得更为复杂。判定OBB包围盒是否发生碰撞主要采用了分离轴定律。

定义1 分离轴定律[8]。如果存在一个向量,使得被检测的几何体在该轴上的投影不相交,那么这根轴就是一根分离轴,如果找不到分离轴,那么被检测的几何体相交。

本研究中涉及到了两种构件类型,一种是规则的凸多面体,这种构件的碰撞检测可以通过直接检测两个OBB包围盒在轴上的投影是否有重叠来判断是否发生碰撞,而对于弧形或者其他特殊形状的构件,可以采用以下步骤[10]:

步骤1:将根节点作为当前节点;

步骤2:判断当前节点是否与给定的OBB包围盒发生碰撞,如果发生了碰撞则执行步骤3,如果未发生碰撞,则执行步骤4;

步骤3:如果该节点没有未检测的兄弟节点,表明该节点未发生碰撞,如果该节点还有未检测的兄弟节点,则依次将下一个兄弟节点作为当前节点,递归执行步骤2;

步骤4:判断当前节点是否为叶子节点,如果是,则表明该顶点发生了碰撞,记下当前节点后,碰撞检测结束; 如果该节点不是叶子节点,则将该节点的所有子节点依次作为当前节点,然后递归执行步骤2。

二维实例如图3所示,分别对组成构件1与构件2的三角网格顶点的位置坐标P1=(x1,y1)与P2=(x2,y2)进行主成分分析、包围盒构建,由此可得到四个潜在分离轴α,β,γ,δ以及两个构件的包围盒; 再根据分离轴定律进行碰撞检测,即检测在四个潜在分离轴上的投影是否均发生重叠。将未发生碰撞的构件标为灰色,发生碰撞的构件标为红色,则OBB包围盒算法效果图如图2所示,图2(a)中为未发生碰撞的构件,这两个构件分别有两个方向轴α,β和γ,δ,但是他们在轴α上的投影未发生重叠,所以轴α为这两个构件的分离轴,这两个构件未发生碰撞。而图2(b)中为发生碰撞的构件,这两个构件在他们的方向轴α,β,γ和δ上的投影均有重叠,所以这两个构件发生了碰撞,改变颜色为红色。

(a)未发生碰撞的构件,构件为灰色

(b)发生碰撞的构件,构件变为红色图2 OBB包围盒碰撞检测

2 查找相连构件

2.1 几何信息提取

IFC文件包含了BIM模型中构件的语义、几何以及建筑构件间的连接关系等信息,目前国内外约有100家软件开发商的产品支持通过IFC标准格式共享和交换BIM数据[1]。基于IFC存储的多种类型的几何模型数据[11],经过解析之后可以转换为三角网格(triangle mesh)数据。三角网格结构简单清晰,易于读取,是目前在图形研究上比较通用的几何表达格式。本研究中对构件的几何要求为其基本轮廓与位置信息,因此,需提取出构件的三角网格顶点。然而IFC标准中定义的构件位置与坐标系包含了绝对坐标与相对坐标,提取出的数据还需进行处理才能使用[12]。

本研究中主要采用小红砖开放平台[13]解析完成的BIM模型进行研究。从小红砖开放平台中可以获取构件的位置坐标矩阵positions、索引矩阵index和旋转矩阵matrix。将位置坐标矩阵与旋转矩阵相乘即可得到世界坐标下的位置矩阵。

2.2 获得相连构件

BIM模型中包含诸多构件,构件间关系有两种情况,分别是相连构件和相分离构件,二维示意图如图3所示。

(a)相连构件

(b)相分离构件图3 BIM模型中构件的两种情况

由于OBB包围盒碰撞检测的原理是对坐标信息的处理,所以可以对构件的位置坐标信息进行变换来获取相连构件。本研究中用改进的OBB包围盒算法碰撞检测算法来达成检测相连构件的目的。该算法赋予了构件一位移量ε,通过检测构件和赋予位移量后的另一构件是否发生碰撞来检测两构件是否为相连构件。二维实例如图4所示,图中为两种情况下的构件分别赋予位移量ε后的情况,即分别给一构件在轴α正方向、轴δ反方向的微小位移量ε,则构件的三角网格顶点的位置坐标信息变换为P=(x′,y′),同样对组成两构件的三角网格顶点的位置坐标进行主成分分析、包围盒构建,再根据分离轴定律进行碰撞检测。其二维结果分别如图4中所示,相连构件发生碰撞,而相分离构件仍然未发生碰撞,由此便可获得BIM模型中的相连构件。

(a)给一偏移量ε,相连构件发生碰撞

(b)给一偏移量ε,相分离构件未发生碰撞图4 BIM模型中构件的两种情况

三维空间中,则需要分别给构件在三个方向轴方向的微小偏移量ε,然后再将两构件进行主成分分析、构建包围盒、碰撞检测,即可获得相连构件。然而分析BIM模型中构件的关系可以发现,门构件插入墙构件由两个独立的过程表示:首先,在墙内创建门洞,然后将门插入门洞[9],所以只需直接构建门构件和墙构件的OBB包围盒然后进行碰撞检测即可。

3 获取相连构件实例

本节中主要通过三组示例来验证本获取相连构件算法的可行性,所使用的BIM模型均由小红砖开放平台[13]解析完成。

第一个实例为获取规则凸多面体的相连构件。如图5所示,图5(a)是某二居室BIM模型,若要获得图中蓝色构件的相连构件,则需分别获取各个构件的三角网格数据,并以此来构建OBB包围盒,通过检测,包围盒的大小和构件的大小一致,然后分别给蓝色构件的OBB包围盒三个方向轴方向的微小位移量ε,因为该模型中最小构件的最小尺寸为80.000mm(即窗构件的厚度),所以选定ε=40.000mm,再检测该构件与其他构件的碰撞情况,即可获得蓝色构件的相连构件。图5(b)中将相连构件高亮展示,即相连构件为两个墙构件、一个楼板构件和三个家具构件。经过目视检查,本方法准确获得了目标构件的所有相连构件,所以本方法可靠。

(a)某二居室BIM模型

(b)高亮显示相连构件图5 BIM模型中某一墙构件的相连构件

(a)某酒店某一层BIM模型

(b)高亮显示相连构件图6 BIM模型中某一弧形墙构件的相连构件

第二个实例为获取弧形构件的相连构件。如图6所示,图6(a)是某酒店某一层的BIM模型,若要获得图中蓝色构件的相连构件,则需分别获取各个构件的三角网格数据,并以此来构建OBB包围盒,通过检测,包围盒比构件的尺寸大,所以判定该构件为不规则多面体,所以构造层次包围盒树,然后分别给蓝色构件的OBB层次包围盒树三个方向轴方向的微小位移量ε,因为该模型中最小构件的最小尺寸为25.000mm(即窗构件的厚度),所以选定ε=12.500mm,再检测该构件与其他构件的碰撞情况,即可获得蓝色构件的相连构件。图6(b)中将相连构件高亮展示,即相连构件为三个墙构件和一个楼板构件。经过目视检查,本方法准确获得了目标构件的所有相连构件,所以本方法可靠。

第三个实例为获取门构件的相连构件。如图7所示,图7(a)是某一居室的BIM模型,若要获得图中蓝色门构件的相连构件,则需分别获取各个构件的三角网格数据,并以此来构建OBB包围盒,再检测该门构件与其他构件的碰撞情况,即可获得蓝色门构件的相连构件。图7(b)中将相连构件高亮展示,即相连构件为一个墙构件。经过目视检查,该门构件与楼板构件并未连接,本方法中所获取的相连构件并未包含楼板构件,所以本方法可靠。

(a)某一居室BIM模型

(b)高亮显示相连构件图7 BIM模型中某一门构件的相连构件

4 总结与展望

本研究针对BIM模型中由于模型建立不规范或者IFC文件解析异常而导致的相连构件无法获取的现状,提出了以改良的OBB包围盒碰撞检测算法为基础的相连构件查找方法。该方法获取构件的位置,并构建OBB包围盒,然后通过比较包围盒的尺寸和构件的大小来判断是否需要构建OBB层次包围盒树,再根据构建的包围盒/层次包围盒树用改进的碰撞检测算法进行碰撞检测,若进行检测的两构件发生碰撞,则为相连构件,若未发生碰撞,则不为相连构件。本研究提出的方法实现了对相连构件的获取,为BIM模型的二次开发等提供了便利。

猜你喜欢
碰撞检测构件网格
钢筋混凝土构件裂缝控制
基于动力学补偿的机器人电机力矩误差碰撞检测
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
追逐
重叠网格装配中的一种改进ADT搜索方法
基于Virtools的虚拟灭火系统碰撞检测设计与实现
基于构件的软件工程技术与理论方法探讨
基于构件的软件开发实践
基于复合连接器的插拔式构件组装方法研究