摘" 要:文章提出了一种工程三维模型自动生成的算法,该算法可以用来开发建筑信息模型(BIM)自动生成系统,从而降低工程设计资料三维可视化的技术门槛。首先设定了算法的假设前提、介绍了算法中的基本原理和基本操作,然后用函数式的表达方式给出了算法中基本操作的程序化表达方式。在这个基础上,用伪代码给出了工程三维模型自动建模算法的基本步骤,并且用一种DSL语言方案来描述了该算法的过程。最后,用了一个工程实例检验了该DSL语言和算法的正确性。
关键词:计算机图形学;三维模型自动化建模;DSL语言;BIM
中图分类号:TP312" " 文献标识码:A" 文章编号:2096-4706(2024)12-0125-05
Research on Programmed Modeling Algorithm for Engineering 3D Model
YANG Lin
(School of Civil Engineering, Lanzhou Jiaotong University, Lanzhou" 730070, China)
Abstract: This paper proposes an algorithm of automatic generation of engineering 3D model, which can be used to develop the automatic generation system of Building Information Model (BIM), so as to reduce the technical threshold of 3D visualization of engineering design data. Firstly, it sets the assumptions of the algorithm, introduces the basic principle and basic operation in the algorithm, and then the programmed expression of the basic operation in the algorithm is given by functional expression. On this basis, the basic steps of the automatic modeling algorithm of engineering 3D model are given by pseudo-code, and the process is described by a DSL language scheme. Finally, an engineering example is used to test the correctness of the DSL language and algorithm.
Keywords: computer graphics; automatic modeling of 3D model; DSL; BIM
0" 引" 言
工程设计的传统表达方式是二维平面图纸,其形式简单但是阅读具有一定的技术门槛,因此了很多非工程背景的建设甲方,以及一些文化程度较低的一线工人,无法看懂图纸,导致沟通问题频出。随着计算机图形学理论与技术的不断发展,采用三维模型来表达工程设计资料成为可能[1]。全部以三维模型的形式表现的设计资料使得没有工程背景的普通人也能够理解工程的构造,这种技术手段被称为建筑信息模型(Building Information Modeling, BIM)[2]。2000年以后,BIM技术开始在全球范围内掀起了三维模型取代二维图纸的热潮[3]。但是,三维建模虽然比二维图纸容易阅读,绘制却要难得多。目前主流的BIM建模软件Revit [4]、Bently [5],学习周期长,学习曲线陡,能够熟练操作此类软件的专业人员相对于市场需求来说非常缺乏[6],所以市场迫切需要开发出自动化程度更高的工程三维模型建模软件。
程序化建模是一种全自动化的三维模型创建方式,它可以将整个建模过程以代码的方式表示,然后通过执行此代码实现建模过程的自动化。这种建模方式最早出现在游戏开发领域,用来生成游戏地形。当前,已经有研究用此方法来生成工程结构的三维模型[7-10]。本文将提出一种专门用于工程三维建模的算法,此算法可以支持工程三维模型的程序化建模。
1" 相关研究综述
程序化建模在建筑工程领域中已经用于自动化生成三维模型,比如:周在辉等提出了利用CGA形状描述语言来指定建筑物之间的层次关系,从而有效地生成大规模数字城市三维模型[7];王新征对BIM建模软件进行了高度参数化定制,实现脚手架,砌体等自动排布,自动识别构件相应尺寸及各型号构件的三维模型自动生成[8];曹建涛等提出一种Revit+Dynamo+Excel的隧道工程三维模型自动建模解决方案,适用于山岭隧道标准段和特殊段的三维建模[9];欧阳春生等对Dynamo软件进行了二次开发,实现了建筑物装饰工程三维模型的快速生成[10]。此外,在其他工程领域中,三维模型自动化建模技术也已经开始研究和应用,比如王荣亮等提出了三维地质模型的建模算法与应用[11];刘勐提出了利用无人机进行摄影测量从而对露天铁矿实现自动化建模的技术[12];谭金娥提出了基于小波分解原理多尺度表示建筑结构线矢量数据,采用QEM算法生成现浇混凝土结构的三维模型[13]。这些研究是工程三维模型自动化建模的一些探索性尝试,除了程序化建模的方法,基于扫描技术的点云三维模型建模技术也开始被研究和应用,比如:孙竹青等提出了基于三维点云技术的历史建筑物自动建模算法[14];郭威等提出了使用激光雷达扫描技术来对变电站的施工过程进行三维建模仿真[15]。
本文所针对的建模对象、以及所使用的建模方法与它们有着很大的不同,下面是本文提出的工程三维模型自动化建模算法的具体描述。
2" 工程模型的程序化建模算法描述
以下是对本文所提出的“工程三维模型自动化建模算法”进行的描述,依次介绍了算法的前提假设、算法中的基本操作,以及算法步骤的伪代码描述。
2.1" 算法的基本假设
1)一个土建结构的三维模型存在于一个参考坐标系中。
2)一个土建结构由若干基本构件组成。
3)除了参考坐标系,每个构件有一个属于自己的自身标系。
以图1和图2中的桥墩为例来说明以上假设。图1(a)中,桥墩结构位于参考坐标系O中;图1(b)中,该桥墩由若干基本构件组合而成;图2(a)中,演示了每个基本构件的自身坐标系;图2(b)演示的是:当每个构件的自身坐标系在参考坐标系中处于适当的位置时,整个桥墩结构被正确地组装到了一起。
2.2" 算法中的基本操作
算法由以下基本操作组合而成。
2.2.1" 构件生成操作
构件生成操作指在参考坐标系中依靠算法生成基本构件的几何形体,生成算法可以采用经典的边界表示法(Boundary representation, B-rep)或构造表示法(Constructive Solid Geometry, CSG),但是生成时构件应该考虑构件的自身坐标系在参考坐标系中的位置,使得生成操作程序的代码的形式最为简洁、代码量最小。
2.2.2nbsp; 构件坐标变换操作
构件坐标变换操作指的是构件从一个坐标系中,转移到另一个坐标系中,且在新旧坐标系中的相对位置保持不变。例如图3所示的桥墩以及其墩身,墩身从参考坐标系的原点位置变换到了桥墩的装配位置。
2.2.3" 构件间传递信息操作
构件间传递信息操作指的是已经装配到正确位置的构件,向下一个即将组装的构件发出信息,告诉它应该被组装到的正确位置。也就是说,由已经装配就位的构件给下一个待安装的构件传递定位坐标。例如图4所示,墩的装配坐标系由桩基承台生成,并传递给在参考坐标系中生成的墩模型,墩模型由此装配就位。
2.3" 程序的基本表达
以上的基本操作可以以函数表达式的方式表现出来,这是构建自动建模程序的基础。
2.3.1" 构件生成操作的表达式
构件的生成操作可以由一个函数式来表示,函数是的结构如式(1)所示:
Component_n(parm_n_1, parm_n_2, …)" "(1)
式中:Component_n表示第n个基本构件的名称;parm_n_k表示第n个基本构件的第k个参数;
2.3.2" 构件坐标变换操作的表达式
构件坐标变换操作可以由一个函数式来表示,函数是的结构如式(2)所示:
Translation(Component_n, x_coord_n, y_coord_n, z_coord_n)" "(2)
式中:Translation表示位移变换命令;Component_n表示第n个基本构件;x_coord_n表示第n个基本构件应该处于的装配位置的x坐标值,y、z坐标值的表达同此。
2.3.3" 构件间传递信息操作的表达式
构件间传递信息操作可以由一个函数式来表示,函数是的结构如式(3)所示:
Message(Component_m,Component_n,x_coord_n,y_coord_n,z_coord_n)(3)
其中:Message表示构件间传递信息的操作函数名;Component_m,Component_n表示由第m个构件向第n个构件传递信息;x_coord_n同式(2)中的解释。
2.4" 结构装配过程的算法描述
结构装配的过程可以视为2.2中的基本操作的不断重复,设基本构件的编号分别为:1,2,…,k,…,n,则工程结构的自动建模过程可以由以下伪代码来描述,其中各项的含义同式(1)~式(3)中的解释。
Component_1(parm_1_1, parm_1_2, …, x_coord_1, y_coord_1, z_coord_1) " (5)
Component_1(parm_1_1, parm_1_2, …, x_coord_1, y_coord_1, z_coord_1)" "(6)
Translation(Component_1, x_coord_1_new, y_coord_1_new, z_coord_1_new)"(7)
…
Component_k(parm_k_1, parm_k_2, …, x_coord_k, y_coord_k, z_coord_k)" "(8)
Message(Component_k-1, Component_k, x_coord_k_new, y_coord_k_new, z_coord_k_new)(9)
Translation(Component_k, x_coord_k_new, y_coord_k_new, z_coord_k_new)(10)
…
Component_n(parm_n_1, parm_n_2, …, x_coord_n, y_coord_n, z_coord_n)" (11)
Message(Component_n-1, Component_n, x_coord_n_new, y_coord_n_new, z_coord_n_new)(12)
Translation(Component_n, x_coord_n_new, y_coord_n_new, z_coord_n_new)(13)
3" 实例验证
为了证实该算法的有效性和可靠性,本文用了一个实际的桥梁工程来进行验证。该工程是一个钢筋混凝土简支梁桥工程,其下部结构单元如图1所示。按照该工程结构的特点,本研究具体化了上面式(5)到式(13)所给出的语言框架,形成了一个DSL语言系统,用这个语言系统写出的代码开发了该工程三维模型自动建模系统的内核。式(14)~式(23)为内核的部分代码示例,表示该桥梁下部结构的一个单元的三维模型生成过程。该段代码的详细解释说明附在代码后面。
1 Pile_original=pile(0.2, 8)" " " " " " (14)
2" "Pile_prepared=preparation_for_installation(Pile_original)" " (15)
3" "Coordination_for_piles= coordinations_for_piles(3, 2, 5, 3, 2, 1.5, 0,8 0, 0, 35)(16)
4" "Piles_installed=install(Pile_prepared, Coordination_for_piles)"(17)
5" "Coordination_for_pileCap= provide_coordination(Piles_installed, above)" (18)
6" "PileCap_original = pileCap(5, 3, 1)" "(19)
7" "PileCap_prepared= preparation_for_installation(PileCap_original)"(20)
8" "Coordination_for_ pileCap= coordination_for_pileCap" " " " (21)
9" "PileCap_installed=install(PileCap_prepared, Coordination_for_piles)(" "22)
10" provide_coordination_for_pier= provide_coordination(PileCap_installed, above)(23)
以下为上面DSL语言的逐句解释:
式(14)中:Pile_original表示存放最后生成的桩模型的变量;Pile表示生成桩模型的命令名;参数0.2和8分别表示桩身的直径、桩身的长度。
式(15)中:Pile_prepared表示变量用来存放从最佳生成位置转移到最佳安装位置的桩构件;preparation_for_installation表示将构件从最佳生成位置转移到最佳安装位置的命令(此桩构件最佳生成位置和最佳安装位置为同一位置);Pile_original表示式(14)中所描述的初始化的桩。
式(16)中:coordination_for_piles表示建模者为桩构件所指定的装配坐标系;Coordination_for_piles是变量用来存放这些桩的装配坐标系;参数3、2、5表示6根桩的中心点坐标;参数3、2表示这6根桩的分布是3行两列,X方向为3根,Y方向为2根;参数1.5、0,8表示每一行中桩的间距是1.5,每一列中桩的间距是0.8;参数0、0、35表示整个桩群沿参考坐标系X、Y、Z轴分别旋转的角度是0度、0度、35度。
式(17)中:Piles_installed表示变量用来存储装配就位的桩模型;Install(…)表示将构件变换到装配坐标系中的函数;Pile_prepared表示式(15)中生成的处于最佳安装位置的桩。
式(18)中:Coordination_for_pileCap表示变量用来存储装配就位的桩群模型为下一个待安装的桩基承台模型生成的装配坐标系;provide_coordination(…)表示函数为下一个待安装构件提供装配坐标系。
式(19)中:PileCap_original表示变量用来存储在参考坐标系中的最佳生成位置生成的桩基承台模型;pileCap(…)表示生成桩基承台模型的函数名;参数5、3、1分别表示桩基承台的长、宽、高。
式(20)中:PileCap_prepared表示变量用来存放从最佳生成位置转移到最佳安装位置的桩基承台模型;preparation_for_installation表示将构件从最佳生成位置转移到最佳安装位置的命令;PileCap_original表示式(19)中所描述的初始化的桩基承台模型。
式(21)中:Coordination_for_ pileCap表示变量用来存放桩基承台模型的装配坐标系;coordination_for_pileCap表示式(18)中生成的桩基承台装配坐标系。
式(22)中:PileCap_installed表示变量用来存放装配就位的桩基承台模型。
式(23)中:provide_coordination_for_pier表示变量用来存放装配就位的桩基承台模型为下一个待安装的桩模型生成的装配坐标系。
本研究在式(14)~式(23)的基础上,用Python语言实现了该DSL语言,然后开发了该DSL语言与Autodesk图形开发库Dynamo的接口,使得内核运行的结果可以调用Dynamo库生成三维模型。如图5所示的某简支梁桥的三维模型就是采用目前已经开发出来的工程三维模型自动建模系统的原型系统自动生成的。
4" 结" 论
本文研究的目的是实现工程设计中的三维模型自动生成,此类技术可以帮助工程师将二维设计图纸快速转变为三维模型,这样可以降低所谓的“识图技术门槛”,使得更多的工程参与者通过三维可视化演示更加容易地理解设计内容,这就可以大大减少工程进行中由误解设计意图所导致的各种错误及事故。本文所采用的技术路线为程序化建模技术,提出了一种程序化建模算法来实现工程三维模型自动生成。本文在第2节详细描述了该算法的前提假设、基本操作、以及算法步骤的伪代码描述,在这个基础上,一种DSL语言被设计出来以验证本文所提出的算法的有效性。第3节给出了一个实例验证,用这种DSL语言描述了一个简支梁桥工程的三维模型建模过程,然后用Python实现了该语言,连接到Dynamo图形库最终自动生成了该工程的三维模型。从而该算法的有效性得到了初步的验证。本文是工程三维模型自动生成研究的初步尝试,未来会进一步改进算法和支撑这种算法的DSL语言,以实现对更多种类工程的支持。
参考文献:
[1] 黄翠香,董毅,姜立,等.三维模型在建筑工程设计中的应用 [C]//工程三维模型与虚拟现实表现——第二届工程建设计算机应用创新论坛论文集.上海:[出版者不详],2009:119-124.
[2] 伊斯曼. BIM手册 [M].北京:中国建筑工业出版社,2016.
[3] 杨德磊.国外BIM应用现状综述 [J].土木建筑工程信息技术,2013,5(6):89-94+100.
[4] Autodesk. Revit简介 [EB/OL].[2023-09-26].https://www.autodesk.com/products/revit/.
[5] Bentley. Bentley软件简介 [EB/OL].[2023-09-26].https://www.bentley.com/.
[6] 何清华,钱丽丽,段运峰,等.BIM在国内外应用的现状及障碍研究 [J].工程管理学报,2012,26(1):12-16.
[7] 周在辉,马静,许五弟,等.基于CGA的建筑物程序化建模研究 [J].测绘与空间地理信息,2013,36(6):17-20+24.
[8] 王新征.BIM建模高度参数化与程序化相结合的技术应用 [J].城市建设理论研究:电子版,2018(11):178-179.
[9] 曹建涛,王磊,许泽琪,等.山岭隧道衬砌结构BIM建模方法研究与应用 [J].公路,2020,65(8):386-389.
[10] 欧阳春生,罗迎社,邓宇龙,等.BIM技术二次开发及其在装饰工程中的程序化应用 [J].科技和产业,2022,22(1):316-322.
[11] 王荣亮,郭军,陈龙.基于剖面图的三维地质建模算法研究与技术应用 [J].煤炭科技,2022,43(3):109-113.
[12] 刘勐.基于无人机倾斜摄影的露天铁矿实景三维建模方法 [J].自动化与仪器仪表,2022(12):222-225+231.
[13] 谭金娥.现浇混凝土建筑结构多尺度三维BIM建模方法研究 [J].太原学院学报:自然科学版,2023,41(2):8-14.
[14] 孙竹青,许鹏程,张大宝.基于密集三维点云的历史建筑BIM自动建模算法研究 [J].建筑技术,2023,54(13):1630-1634.
[15] 郭威,张成炜,尹元,等.基于激光雷达与BIM技术的变电站施工三维仿真模拟 [J].湘潭大学学报:自然科学版,2021,43(3):106-113.
作者简介:杨林(1977-),男,汉族,山西华阴人,讲师,硕士研究生,研究方向:工程管理信息化。