郭 鹏,黄河清
(中交第二公路勘察设计研究院有限公司,湖北 武汉 430063)
BIM技术是新一代的设计技术,包含的软件程序较多,不同厂家的BIM设计软件都能实现整个传统的设计过程,并满足包括三维建模在内的大部分BIM应用需求[1]。目前隧道建模方式多样,基本以Autodesk系列软件、Bentley系列软件和Dassault系列软件为主。明茂刚等[2]利用“Dyanmo+Revit”的方式进行隧道建模,并根据项目实际需求进行了一定程度的自定义功能开发;陈一飞等[3]利用“AutoCAD+Photoshop+3ds Max”三种软件实现隧道的虚拟建模和模型贴图;陶海波等[4]使用Civil 3D软件的原生功能建立了隧道模型,在不考虑效率的情况下基本满足项目需求;程秋雨等[5]利用Bentley平台的MicroStation进行盾构隧道的参数化设计;覃延春[6]使用结合Bentley结合Catia的方式实现了隧道的快速建模。纵观现有相关研究成果,大多是利用软件已有功能去实现相关需求,但是基本都存在手动工作量大、软件自身原因不适用实际工作坐标系、多平台数据不互通等问题。基于Bentley系列软件和Dassault系列软件的隧道建模方法本质逻辑与Autodesk系列软件是一致的,通过研究Autodesk平台,选择满足实际工程需求的软件,在软件已有功能的基础上提升隧道建模效率。
Civil 3D是专业的工程土木BIM软件,能够实现公路工程完整的设计过程并与AutoCAD数据无损互通,保证与现有设计习惯、设计成果的衔接,契合隧道“带状工程”特点,在隧道三维建模领域占据较高的地位[7-8]。利用Civil 3D的传统建模方法流程较多,前期准备时间较长,中期手动操作量较大,不利于发挥其专业优势[9]。因此,在了解Civil 3D隧道建模常规方法的基础上,希望通过一系列具体功能的二次开发,探讨Civil 3D在隧道建模方面二次开发的主要流程和若干技术细节。
常规方法一般包含3个步骤:(1)Civil 3D中生成路线项目文件;(2)制作包含项目所需的隧道衬砌断面部件;(3)在Civil 3D中设置道路并提取实体,如图1所示。
图1 Civil 3D中隧道常规建模步骤
使用Civil 3D设计模块下的“路线创建”和“纵断面创建”命令,分别确定项目路线的平纵参数。根据设计规范,选中已有路线后,使用“计算/编辑超高”命令,完成对路线横坡的确定,如图2所示。
图2 路线超高设计
实际项目中隧道衬砌形式多样,需要利用Subassembly Composer(部件编辑器)对不同衬砌形式进行参数化设置,结合设计图纸将不同衬砌形式整合到一个或者多个部件中,以备后期使用。具体如下:(1)定义隧道衬砌基本参数;(2)定义隧道衬砌拾取参数;(3)判断分离式隧道(左右洞);(4)确定三心圆的特征点;(5)根据图纸绘制衬砌轮廓;(6)根据图纸绘制仰拱轮廓;(7)根据图纸绘制路面及排水沟等设施断面轮廓;(8)将轮廓闭合成“型”(Shape),最终形成隧道衬砌的部件。
将隧道衬砌部件导入到Civil 3D中形成“装配”,以路线的平曲线、纵断面以及超高信息作为控制参数,生成Civil 3D的“道路”对象,并从“道路”对象提取隧道实体模型,如图3所示。
图3 隧道模型提取
Civil 3D开放了丰富的功能接口,并提供不同的编程语言版本,能够满足使用者的绝大部分开发需求。本文基于Civil 3D的.NET API(.NET Application Programming Interface,即.NET框架下的应用程序编程接口),使用C#编程语言进行二次开发,二次开发环境如表1所示。
表1 Civil 3D二次开发环境一览
(1)隧道模型结构分析
隧道模型是典型的“带状构造物”,设计人员通过不同的桩号区间将整个隧道划分为不同的段落,每个段落对应一种衬砌类型。段落与段落之间外表会有突变,但内部的空间是相同或者连续的。通过Excel表格的形式将隧道段落和段落对应的衬砌类型信息收集并保存,以备后续使用。
(2)Civil 3D环境下的三维模型生成原理分析
在Civil 3D环境下,三维模型的生成方式主要有4种方式:①拉伸;②放样融合;③旋转;④扫掠。考虑到隧道线形特性,直接拉伸断面生成三维实体的方式不容易控制拉伸的方向,故舍弃方式①。旋转方式适用于绕着某条轴线旋转得到的三维物体,如锥体、柱体以及异形柱体等,与隧道的结构特点不符,故舍弃方式③。扫掠方式能够基本符合隧道结构特点,也能够满足段落较多的情况,但是在扫掠过程中控制扫掠的频率较为困难,容易生成协调性不够的三维实体,故舍弃方式④。放样融合的方式除了能够满足隧道结构相应需求外,还能控制方向以符合线路走向,亦能通过加密(或减少)中间点来控制放样频率,符合隧道三维化的要求。因此,选取放样融合的方式进行隧道三维化,三维实体生成方式的优缺点见表2。
表2 不同三维实体生成方式对比表
(3)开发需求分析
通过实际项目验证出利用Civil 3D结合部件的常规方式效率较低,分析其原因:①部件制作耗时较长,由于部件编辑器自身原因,导致复杂图形的绘制较为繁琐,无法与直接在AutoCAD环境下手绘断面形式相比;②高质量、复用性好的部件制作困难,虽然部件能够实现一次制作、多次使用的效果,但是前期对公用参数、公用构件、拾取参数等数据的把控较为困难,对使用者的经验要求较高;③Civil 3D中“道路”的设置不利于多段落隧道,Civil 3D中的“道路”对象需要手动设置多个分段“道路”,每个分段“道路”需要单独设置桩号范围、装配、拾取参数等,手动工作量较大。
基于此,二次开发最重要的两个需求分别是:①代替传统的手动输入隧道段落的相关信息;②结合AutoCAD环境下的手绘断面,利用放样融合方式得到准确的隧道三维模型。隧道模型层级如图4所示,二次开发详细功能见表3。
表3 二次开发功能一览
图4 隧道模型层级图
图5 “数据读取”功能流程图
图6 “数据读取”功能代码框架
根据既定功能需求,制定完善的逻辑思路,再利用合适的功能函数逐一实现。具体地,首先要分析功能对应的实际操作流程,将其抽象为流程逻辑,再根据流程图进行具体的编程开发,最终实现预期功能。本节就以数据读取、三维空间变换以及断面元素放样融合3个核心功能进行分析,展现开发过程。
(1)数据读取
数据读取主要分为两种数据格式:①包含隧道段落划分和对应衬砌名称等信息的Excel文件;②包含某种衬砌断面所有相关元素的DWG文件。程序需要先选择指定的Excel文件,读取该文件内当前工作表的数据转换为DataTable数据格式并存储到计算机内存中。其次需要根据读取得到的隧道包含的所有衬砌类型数据,按照名称读取加载对应的衬砌断面DWG文件,以ObjectCollection的形式存入计算机内存中[10-11]。
(2)三维空间变换
在隧道衬砌断面的DWG文件中,断面元素的基点为原点,x坐标与y坐标对应Civil 3D路线的平曲线点,z坐标对应路线纵断面点。如何将原点的衬砌断面放置到对应桩号位置的路线点上去是本功能需要解决的问题。在数学中,利用三维空间变换矩阵能够实现元素的平移、旋转、缩放等,但是该方法相对计算复杂,不适合在实际项目中应用。通过查阅Civil 3D二次开发手册,选择Matrix 3D(三维矩阵)类进行相关的开发来实现既定目标。Matrix3D类需要8个参数,分别是①原始点坐标(From_Point3d);②目标点坐标(To_Point3d);③原始点x方向向量(Vector3d_FromX);④原始点y方向向量(Vector3d_FromY);⑤原始点z方向向量(Vector3d_FromZ);⑥目标点x方向向量(Vector3d_ToX);⑦目标点y方向向量(Vector3d_ToY);⑧目标点z方向向量(Vector3d_ToZ),其中原始点和目标点的三相向量都必须符合右手法则,并相互垂直。原始点的三相向量是容易的,可直接定义为正常工程坐标系下的三相向量;目标点的向量是相对复杂的,必须考虑路线的平、纵、横三个维度的对应,通过利用Civil 3D路线类(Alignment)的相关方法获得。
目标点(A)坐标通过Alignment类下的PointLocation函数形参传出e、n的值(即是x,y坐标),同时通过Profile类下的GetElevationAt函数传回该点高程值(即是z坐标),此时获得完整的目标点坐标信息。同样利用PointLocation函数,变化其中的Offset(偏移)变量值,获得偏移路线以外的点(B)的x、y坐标,其z坐标按照水平处理,使用点(A)的z坐标作为点(B)的高程,由此获得向量Vector_X。向量Vector_Y可利用Profile类下的GetFirstDerivative(初阶导数,现实意义为纵断面在某处的切线向量)获得。最后利用向量叉乘(CrossProduct)函数求取向量Vector_Z[12],至此目标点的相关参数全部求解完毕,空间变换矩阵也随之得到,实现元素的空间位置变换,如图7所示。
图7 “三维空间变换”示意图
(3)放样融合
利用空间变化矩阵,将拟放样元素放置到目标位置上,此时需要明确起点放样元素和终点放样元素。当放样元素较多时,如何让起点放样元素对应到正确的终点放样元素,不至于出现放样路径交织的现象成为本节研究的重点。经过研究发现,Civil 3D环境如图层能够包含足够丰富的信息,利用图层来归类、区别不同的放样元素,让起点放样元素自动找寻自己对应的终点放样元素,从而实现元素的正确放样。
以重庆市晏家隧道工程为例,工程位于重庆市江北区,双线城市快速路隧道,全长4.46 km。项目地质情况复杂,设计衬砌类型11种,双线不同的衬砌节段合计174个。若按常规方法对晏家隧道建模,前期需要制作11种部件(不同的衬砌复杂程度不同,需要的时间也不同,一般都需要1 h以上),中期需要设置174个“道路”节段(每个“道路”节段都需要设置起讫桩号、“装配”以及其他相关参数),时间消耗大。不同于常规的Civil 3D建模,通过隧道衬砌类型信息的快速统计成表,程序直接读取表格数据以划分不同模型节段,代替重复创建174个“道路”,实现了创建道路过程化繁为简,衬砌信息表格如表4所示。
表4 晏家隧道衬砌信息统计表(部分)
同时,摒弃传统部件编辑器复杂的部件编辑工作,直接利用设计文件快速创建断面轮廓文件,实现前期准备过程的效率提升。统计该工程正常建模和利用二次开发功能建模的时长,如图9所示。
图9 晏家隧道工程中常规操作与二次开发功能效率对比
本研究基于.NET API,在Civil 3D环境下开发了隧道工程快速三维化功能,用以提升隧道建模效率;经实践,隧道建模效率在该二次开发功能辅助下得到显著提升。但是目前只考虑了隧道工程的土建模型,隧道机电、隧道钢结构等部分还未涉及,在后续研究中应当将机电和钢结构等构造物建模纳入考虑范围内。
Civil 3D软件不但本身能够很好地支持土木工程行业,还提供了丰富的二次开发接口以供使用者更加深入、灵活地使用该软件。随着计算机技术的不断发展,基于软件的二次开发会变得愈发广泛,从业人员能够为交通行业BIM的应用提供更大的助力。