基于bim的三维模型专业爆炸方法
技术领域
1.本发明属于建筑信息模型及计算机图形学技术领域,具体涉及一种基于bim的三维模型专业爆炸方法。
背景技术:2.随着数字化技术在工业领域的推进,新一代信息技术与传统行业的深度融合,bim技术在工程行业有了广泛应用。通过模型可视化手段,bim平台为用户带来良好的使用体验。在这个平台上开发出更多功能,以满足当前行业的工程应用,已成为一个迫切需求。其中,模型爆炸是bim平台中一个常见的功能。通过该功能,使用者可以将整个模型拆解,进而对每一个构件进行观察、操作。而在工程领域,装配模型体量大(动辄整个模型上百g)、专业多;设计、施工等人员不仅需要对各个专业进行精细化查看,而且对不同专业查看的细节化程度也不一样。因此,现有的爆炸方法尚不能满足一些现实场景的需求,主要存在以下几个问题:
3.一、爆炸节点不可选。设计人员在模型检查时,需要分专业查看各个子模型细节。然而,现有的爆炸不能选择某一子模型单独爆炸。因此,技术人员只能在整个模型爆炸结果中寻找需要检查的本专业构件,导致整个过程操作困难、耗时长且效率低。
4.二、在爆炸效果中不能按专业或楼层对各子模型进行位置区分。施工人员希望在大型装配模型的爆炸结果中按照专业布置爆炸的构件,为施工提供更明确的指导。然而,已有的爆炸只围绕同一爆炸原点,对全局构件进行统一化分离处理,使爆炸结果中各专业构件混杂,不同专业模型无法分离展示。
5.因此,本发明旨在提供一种新的模型爆炸方法,解决当前爆炸不能选择特定子模型进行爆炸和爆炸中不能实现各子模型分离的问题,以满足建筑和水利水电行业的bim模型爆炸需求。
技术实现要素:6.本发明的目的在于提供一种基于bim的三维模型专业爆炸方法,解决了现有模型全局爆炸方法只能对整体模型进行爆炸查看,无法针对特定节点或特定专业进行爆炸查看和不能区分不同专业位置的问题。
7.本发明所采用的技术方案是:基于bim的三维模型专业爆炸方法,包括以下步骤:
8.步骤1、选择需要爆炸的专业模型;
9.步骤2、针对每一个选定的专业模型,以专业模型中心为爆炸原点,等比例扩大构件与专业模型中心之间的距离,实现专业模型内部的构件爆炸分离;
10.步骤3、各专业模型分离;
11.步骤4、爆炸结果展示;
12.步骤5、爆炸程度调整;
13.步骤6、爆炸重置。
14.本发明的特点还在于,
15.步骤1具体为:选定主模型中的任意一个或多个节点作为子模型节点,一个子模型节点代表一个专业模型。
16.步骤2具体包括以下步骤:
17.步骤2.1、从前端获得用户选择的爆炸程度value,爆炸程度value为大于等于1且小于等于10的整数,通过公式(1)计算偏移比例scale:
[0018][0019]
步骤2.2、针对每一选定的专业模型,计算专业模型的包围盒,各专业模型的包围盒中心点视为爆炸中心,专业内各构件的包围盒中心点视为构件中心;
[0020]
步骤2.3、根据步骤2.1所得偏移比例scale和步骤2.2所得爆炸中心和构件中心计算各构件的偏移矩阵;
[0021]
步骤2.4、对专业模型下的所有构件施加各自的偏移矩阵,完成构件中心位置的移动,实现专业模型内部的构件爆炸分离。
[0022]
步骤2.3具体包括以下步骤:
[0023]
步骤2.3.1、根据爆炸中心和构件中心计算出构件爆炸方向上的初始向量;再由初始向量获得构件爆炸方向上的单位向量;
[0024]
步骤2.3.2、由构件爆炸方向上的初始向量,计算构件与爆炸中心的初始距离;
[0025]
步骤2.3.3、根据步骤2.1所得偏移比例scale和步骤2.3.2所得初始距离,计算构件和爆炸中心的目标偏移距离;
[0026]
步骤2.3.4、根据步骤2.3.2所得初始距离和步骤2.3.3所得目标偏移距离,计算构件需要移动的距离;再根据构件需要移动的距离和步骤2.3.1所得单位向量,构造偏移向量;
[0027]
步骤2.3.5、根据步骤2.3.4所得偏移向量构造构件节点的偏移矩阵。
[0028]
步骤3具体包括以下步骤:
[0029]
步骤3.1、基于步骤2专业模型内部构件爆炸分离的结果,计算各专业模型包围盒中心originpoi,i表示所选的第i个专业模型,即各专业模型的原始中心位置;
[0030]
步骤3.2、排布专业模型位置,得到虚拟坐标系中各专业模型中心的坐标offseti和爆炸中心坐标offseto;
[0031]
步骤3.3、获取步骤3.2所得爆炸中心坐标offseto,将其映射到模型的真实坐标系并在z轴向取值为0,通过公式(2)计算得到中心点offsetpo:
[0032]
offsetpo=[offseto[0],offseto[1],0]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0033]
再获取世界坐标系的爆炸原点centropos,即所有选择专业模型的总包围盒的中心;将中心点offsetpo和世界坐标系的爆炸原点centropos映射,计算得到映射向量mappingvector=centropos-offsetpo;
[0034]
步骤3.4、计算各专业模型中心需要到达的真实目标位置targetpoi,i表示所选专业的序号,提取步骤3.2所得各专业模型中心的虚拟坐标offseti,加上步骤3.3所得映射向量mappingvector进行映射,得到专业模型中心在世界坐标系中的真实坐标位置;
[0035]
步骤3.5、基于步骤3.1所得各专业模型的原始中心位置originpoi和步骤3.4所得
真实目标位置targetpoi,计算偏移向量translatei=targetpo
i-originpoi;再根据偏移向量translatei构造专业模型的偏移矩阵translatematrixi;
[0036]
步骤3.6、对各专业模型下所有构件施加相应专业模型的偏移矩阵translatematrixi,完成距离移动从而实现专业模型分离。
[0037]
步骤3.2具体包括以下步骤:
[0038]
步骤3.2.1、根据所选专业模型的总数num,构造一个n*n的正方形对专业模型位置进行二维矩阵排布,n*n≥num的最小正整数;
[0039]
步骤3.2.2、计算专业模型中心在步骤3.2.1所得二维矩阵中的位置索引:行位置索引rowindexi=i%n;列位置索引i表示所选专业模型的序号,0≤i≤num;计算爆炸中心在二维矩阵中的位置索引:行位置索引列位置索引
[0040]
步骤3.2.3、分别比较各专业模型包围盒在x轴、y轴、z轴三个方向的大小,获取各专业在三个方向上的包围盒最大值maxxyz=[maxx,maxy,maxz];
[0041]
步骤3.2.4、构建虚拟坐标系,根据各专业模型的行列索引将其放入虚拟坐标系中,计算各专业模型中心及爆炸中心在虚拟坐标系中的坐标,相邻两专业模型中心点之间的距离需要满足d=maxxyz,得到各专业模型中心的坐标:offseti=(rowindexi*maxxyz[0],colindexi*maxxyz[1])和爆炸中心坐标:offseto=(rowindexo*maxxyz[0],colindexo*maxxyz[1])。
[0042]
步骤4具体为:将各专业的拆解模型加载至相应的n*n的正方形视窗,每个专业显示在一个视窗中。
[0043]
步骤5具体包括以下步骤:
[0044]
步骤5.1、求步骤3.5中各专业模型偏移矩阵translatematrixi的逆矩阵inversematrixi,对各专业模型施加逆矩阵inversematrixi,实现专业模型位置的还原;
[0045]
步骤5.2、计算出专业模型内各构件目标爆炸位置和当前位置的相对偏移矩阵;
[0046]
步骤5.3、应用构件的相对偏移矩阵,实现各专业内构件爆炸程度的调整;
[0047]
步骤5.4、将调整后各专业模型内部构件爆炸分离的结果再依次导入步骤3和步骤4实现各专业模型分离和爆炸结果展示。
[0048]
步骤5.2具体包括以下步骤:
[0049]
步骤5.2.1、读取新输入的偏移程度newvalue,通过公式(3)计算本次爆炸偏移比例newscale:
[0050][0051]
步骤5.2.2、获取当前状态下即上一次爆炸完成后的各构件中心和专业爆炸中心;
[0052]
步骤5.2.3、计算各构件的偏移矩阵,具体为:
[0053]
步骤5.2.3.1、根据步骤5.2.2所得各构件中心和专业爆炸中心,计算出各构件中心到爆炸中心的当前偏移向量direction,进而得到爆炸方向上的单位向量;
[0054]
步骤5.2.3.2、根据步骤5.2.3.1所得当前偏移向量direction获取当前偏移距离currentlength=|direction|;
[0055]
步骤5.2.3.3、根据步骤5.2.3.2所得当前偏移距离和步骤2.1所得偏移比例scale,还原出构件和爆炸中心的初始偏移距离,即未发生爆炸时的原始偏移距离;
[0056]
步骤5.2.3.4、根据步骤5.2.1所得本次爆炸偏移比例newscale和步骤5.2.3.3所得初始偏移距离,计算出构件与爆炸中心的目标偏移距离;
[0057]
步骤5.2.3.5、根据步骤5.2.3.4所得目标偏移距离和步骤5.2.3.2所得当前偏移距离currentlength,得到构件相对移动距离;
[0058]
步骤5.2.3.6、根据步骤5.2.3.5所得构件相对移动距离和步骤5.2.3.1所得爆炸方向构造构件的相对偏移向量,进而构造构件的相对偏移矩阵。
[0059]
步骤6具体包括以下步骤:
[0060]
步骤6.1、还原各专业模型的分离;
[0061]
步骤6.2、将各专业模型内构件还原至初始位置,即不发生爆炸的状态;
[0062]
步骤6.3、将整个模型在前端加载出来,使用户在视窗中看到主模型的初始状态。
[0063]
本发明的有益效果是:
[0064]
(1)在模型爆炸中,可以指定一个专业模型进行爆炸。有助于专业人员对本专业进行检验,减少了无关浏览时间,从而提高工作效率。
[0065]
(2)可选择指定多个专业进行专业模型分离爆炸,在效果展示中可以实现专业模型内部构件的拆解以及专业的分离。使得各专业人员在总模型中检验各自专业模块时,更加清晰和高效。
[0066]
(3)模型分散程度可调节。爆炸偏移程度越大,各专业越分散,专业模型内部间距也越大。针对选定模型或节点的复杂程度,使用人员可根据自身的需求调节分散程度。
[0067]
(4)爆炸过程优化。当所选专业不变,仅爆炸偏移程度发生变化时,保留上次构件偏移结果,只对不可重复利用部分(专业偏移)通过求逆恢复。减少了总的计算量和使用的存储空间,优化了实时效果,提升了使用感受。
附图说明
[0068]
图1是本发明基于bim的三维模型专业爆炸方法的流程图;
[0069]
图2是本发明专业模型内部节点爆炸流程图;
[0070]
图3是本发明构件偏移矩阵计算流程图;
[0071]
图4是本发明专业模型分离流程图;
[0072]
图5是本发明专业模型行列位置索引图;
[0073]
图6是本发明虚拟坐标系示意图;
[0074]
图7是本发明虚拟和世界坐标系的映射关系示意图;
[0075]
图8是本发明爆炸程度调整流程图;
[0076]
图9是将本发明的方法应用到bim平台上的功能选择界面;
[0077]
图10是将本发明的方法应用到bim平台上的模型爆炸节点选择界面;
[0078]
图11是将本发明的方法应用到bim平台上value=1时的爆炸效果图;
[0079]
图12是将本发明的方法应用到bim平台上value=3时的爆炸效果图;
[0080]
图13是将本发明的方法应用到bim平台上value=7时的爆炸效果图。
具体实施方式
[0081]
下面结合附图以及具体实施方式对本发明进行详细说明。
[0082]
本发明提供了一种基于bim的三维模型专业爆炸方法,如图1所示,通过计算专业模型内部构件的拆解方向和拆解距离,将所选节点下的所有模型构件与专业中心点之间的间距放大,实现对专业模型内部构件的分解表达;为各专业模型添加一个偏移量,使得各专业模型互相分离并形成位置排布,有利于快速定位并分离查看专业模型内的各部件细节。充分发挥bim模型体量轻、加载快的特点,结合专业模型的模型结构查看方式,实现实时效果展示和专业构件的快速定位及细节化查看。
[0083]
1.选择需要爆炸的专业模型
[0084]
选定主模型中的任意一个或多个节点作为子模型节点,一个子模型节点代表一个专业模型。当用户做出选择时,前端传入用户所选的节点集,即爆炸的专业模型节点集合。
[0085]
2.专业模型内部构件爆炸
[0086]
专业模型内部构件爆炸的核心思路是针对每一个选定的专业模型,以专业模型中心为爆炸原点,等比例扩大构件与专业模型中心之间的距离,实现专业内的构件爆炸分离。如图2所示,该过程主要分为四步:
[0087]
1)获取偏移比例
[0088]
从前端获得用户选择的爆炸程度value。爆炸程度为大于等于1且小于等于10的整数。因此,通过公式:计算偏移比例,得到用于实际计算的偏移比例scale,取值范围为[1,5]。
[0089]
2)获取爆炸中心和构件中心
[0090]
针对每一选定专业模型,计算专业模型的包围盒,专业模型的包围盒可以是aabb包围盒。各专业模型的包围盒中心点被视为爆炸中心center,专业内各构件的包围盒中心点被视为构件中心elecenter。这里的构件包围盒可以是aabb包围盒。
[0091]
3)如图3所示,计算各构件的偏移矩阵
[0092]
第一、计算爆炸方向。根据专业爆炸中心center和构件中心elecenter,由公式:direction=elecenter-center,计算出构件爆炸方向上的初始向量。由初始向量可获得在爆炸方向上的单位向量:
[0093]
第二、计算初始距离。由构件爆炸方向上的初始向量direction,计算构件与爆炸中心center的初始距离originlength=|direction|。
[0094]
第三、计算构件的和爆炸中心的目标偏移距离targetlength。根据本次爆炸偏移比例scale和初始距离direction,计算构件的和爆炸中心的目标偏移距离targetlength=originlength*scale。
[0095]
第四、构造构件的偏移向量translate。可知构件需要移动的距离movelength=targetlength-originlength。根据构件需要移动的距离和爆炸方向,构造偏移向量translate=dir*movelength。
[0096]
第五、构造构件的偏移矩阵matrix。根据偏移向量构造构件节点的偏移矩阵。
[0097][0098]
4)应用偏移
[0099]
对专业模型下的所有构件施加各自的偏移矩阵,完成构件位置的移动,从而实现专业模型内部的构件爆炸分离。
[0100]
3.各专业模型分离
[0101]
如图4所示,这一步在不改变现有状态下各专业模型内构件间相对位置的前提下,只对专业模型整体进行分离和位置排布。因此,将各个专业模型视为一个整体进行操作。
[0102]
1)获取专业模型的初始位置
[0103]
由于步骤2进行了专业模型内构件爆炸,各专业模型内部的构件距离发生了改变,相应地,专业模型的包围盒发生变化。因此基于步骤2专业模型内部构件爆炸的结果,计算各专业模型包围盒中心originpoi(i表示所选的第i个专业模型),也就是各专业模型的原始中心位置。
[0104]
2)排布专业模型位置
[0105]
第一、构造专业分布矩阵。为了使专业模型分离后各自展示在小窗格中,需要构造专业分离后的专业分布矩阵。根据所选专业模型的总数num,构造一个n*n的正方形(n:满足n*n≥num的最小正整数)对专业模型位置进行二维矩阵排布。计算公式:
[0106]
第二、如图5所示,计算专业模型中心和爆炸中心位置索引。这里的爆炸中心是指专业模型分离的中心点,也就是三维视窗的中心。分别计算专业模型中心和爆炸中心的位置索引,以此确定各专业的模板位置。专业模型中心在二维矩阵中的位置索引计算方法为:行位置索引rowindexi=i%n;列位置索引(i表示所选专业模型的序号,0≤i≤num)。爆炸中心在二维矩阵中的位置索引计算方法为:行位置索引号,0≤i≤num)。爆炸中心在二维矩阵中的位置索引计算方法为:行位置索引列位置索引矩阵排布中存在部分位置为空的情况,这些位置忽略不计。
[0107]
第三、获取最大专业包围盒。为了防止各专业模型重合,需要分别比较各专业模型包围盒在x轴、y轴、z轴三个方向的大小,获取各专业在三个方向上的包围盒最大值,得到最大专业包围盒mzxxyz=[maxx,maxy,maxz]。
[0108]
第四、构建虚拟坐标系,计算专业模型中心的虚拟位置。以专业模型1的模型中心为坐标原点,行、列分别为x轴、y轴构建虚拟坐标系,计算各专业模型中心及爆炸中心在虚拟坐标系中的坐标。为了使各专业模型在坐标系中不发生重叠,相邻两专业模型中心点之间的距离需要满足d=maxxyz,如图6所示。可得到各专业模型中心的坐标:offseti=(rowindexi*maxxyz[0],colindexi*maxxyz[1])和爆炸中心坐标:offseto=(rowindexo*maxxyz[0],colindexo*maxxyz[1])。
[0109]
3)如图7所示,计算虚拟坐标系和世界坐标系的映射关系
[0110]
第一、获取虚拟坐标系中爆炸中心的坐标。因为虚拟坐标系是二维的,将其映射到模型的真实坐标系时,在z轴向取值为0,使用计算公式:offsetpo=[offseto[0],offseto[1],0],得到中心点offsetpo。
[0111]
第二、获取世界坐标系的爆炸原点centropos。爆炸原点为所有选择专业模型的总包围盒的中心。
[0112]
第三、计算映射向量mappingvector。将中心点offsetpo和世界坐标系的爆炸原点centropos映射,得到映射向量mappingvector=centropos-offsetpo。
[0113]
4)计算各专业模型中心的真实目标位置
[0114]
计算各专业模型中心需要到达的真实目标位置targetpoi,i表示所选专业模型的序号。提取各专业模型中心的虚拟坐标offseti,叠加映射向量进行映射,即可得到专业模型中心在世界坐标系中的真实坐标位置。
[0115]
targetpoi=mappingvector+(offseti[0],offseti[1],0)
[0116]
5)构造专业模型偏移矩阵
[0117]
第一,计算偏移向量translatei。由专业模型中心的目标偏移位置targetpoi和初始位置originpoi计算偏移向量,计算公式:translatei=targetpo
i-originpoi。
[0118]
第二、根据偏移向量构造专业模型的偏移矩阵。
[0119][0120]
6)应用偏移矩阵
[0121]
对各专业模型下所有构件施加构件相应专业模型的偏移矩阵,完成距离移动,从而实现专业模型分离。
[0122]
4.爆炸结果展示
[0123]
将各专业的拆解模型加载至相应的n*n的正方形视窗,其中每个专业显示在一个视窗中。
[0124]
5.爆炸程度调整
[0125]
爆炸程度调整指的是在不改变爆炸专业模型节点的情况下改变爆炸偏移比例。为减少计算复杂度,对专业模型内的构件偏移只应用相对偏移,具体方法如图8所示:
[0126]
1)还原各专业的分离
[0127]
运用数学方法求逆,可将专业模型间的偏移复原。求步骤3.5中各专业模型偏移矩阵translatematrixi的逆矩阵inversematrixi:对各专业模型施加对应偏移矩阵的逆矩阵,实现专业模型位置的还原。
[0128][0129]
i表示所选择的第i个专业模型。
[0130]
2)计算专业内构件相对偏移
[0131]
核心思路是计算出专业模型内各构件目标爆炸位置和当前位置的相对偏移,通过施加相对偏移,实现专业内构件爆炸程度的调整。也就是说在每次爆炸程度调整的过程中,
各构件只进行相对位置调整,可以很大程度上减少计算复杂度。
[0132]
(1)获取偏移比例。读取新输入的偏移程度newvalue,计算本次爆炸偏移比例
[0133]
(2)获取当前状态下(上一次爆炸完成后)的各构件中心elecenter和专业爆炸中心center。
[0134]
(3)计算各构件的偏移矩阵。
[0135]
第一、计算爆炸方向。计算出各构件中心到爆炸中心的当前偏移向量direction=elecenter-center,得到爆炸方向上的单位向量
[0136]
第二、获取当前偏移距离currentlength=|direction|。
[0137]
第三、还原初始偏移距离originlength。根据当前偏移距离和上次爆炸偏移比例scale,还原出构件和爆炸中心的初始偏移距离originlength=currentlength/scale,即未发生爆炸时的原始偏移距离。
[0138]
第四、计算目标偏移距离targetlength。根据本次爆炸偏移比例newscale和构件的初始距离originlength,计算出构件与爆炸中心的目标偏移距离targetlength=originlength*newscale。
[0139]
第五、计算构件相对移动距离movelength。根据目标距离targetlength和当前距离currentlength,可得到构件的相对移动距离movelength=targetlength-currentlength。
[0140]
第六、构造构件相对偏移向量和相对偏移矩阵。根据构件相对移动距离movelength和爆炸方向构造构件的相对偏移向量translate和相对偏移矩阵transmatrix。
[0141]
translate=dir*movelength
[0142][0143]
3)应用偏移
[0144]
应用构件的相对偏移矩阵。最终实现各专业内构件爆炸程度的调整。
[0145]
4)各专业模型分离
[0146]
调用步骤3即可得到。
[0147]
5)爆炸结果显示
[0148]
调用步骤4即可得到。
[0149]
6.爆炸重置
[0150]
爆炸重置指的是将爆炸后的视图复原到未发生爆炸的状态。核心思想是还原各专业模型分离以及还原各专业模型内构件爆炸。基于爆炸实现的整个流程,爆炸重置主要分为4个步骤。
[0151]
1)还原各专业模型的分离
[0152]
实现方法同步骤5.1)。
[0153]
2)还原各专业模型内构件的爆炸
[0154]
将各专业模型内构件还原至初始位置,即不发生爆炸的状态。从步骤5.2)可知,当爆炸偏移程度value为1时,即是不做任何偏移的状态。因此,可调用步骤5.2)-5.5),传入爆炸偏移程度value=1,即可将专业内的构件爆炸还原。
[0155]
3)更新视图
[0156]
将整个模型在前端加载出来,从而用户可以在视窗中看到主模型的初始状态。
[0157]
通过上述方式,本发明的基于bim的三维模型专业爆炸方法通过选择特定模型专业进行爆炸,能有效解决行业内在模型细节查看时速度缓慢、分类困难,效率低下等问题。效果具体体现在以下几个方面:
[0158]
1、本发明通过新的方法对模型爆炸效果进行创新,使得在模型爆炸中,爆炸范围可选。实现了仅展示并分离特定子模型内部构件的操作,扩大了爆炸的应用业务场景,避免了无关模型的爆炸计算,提高了相关技术人员的工作效率。
[0159]
2、本发明在爆炸中,可选择指定多个专业进行专业分离爆炸,在效果展示中可以实现专业模型内部构件的拆解以及专业的分离。使得爆炸效果按专业排布更有序,爆炸结果更有检验查看价值,专业人员在总模型中检验各自模块时更加清晰和高效。
[0160]
3、本发明基于bim技术,和模型专业结构相关联,定义了新的模型展示方式-专业爆炸,为模型在实际业务应用中带来便利。
[0161]
4、本发明在爆炸范围可选的基础上,实现了爆炸程度可选。针对不同模型或专业的复杂程度,设计人员可自行调整视图,以便进行专业审查。
[0162]
应用例
[0163]
应用本发明的方法到bim平台上,形成相应功能按钮,如图9所示;根据该模型的结构树,选择所需要爆炸的模型节点,如图10所示:针对相同的模型,选择同样的节点,当爆炸程度不同时,即爆炸程度value分别取1、3、7时爆炸效果分别如下图11、12、13所示。