王 浩
(中国铁路设计集团有限公司,天津 300251)
自从铁路总公司牵头成立铁路BIM 联盟以来,铁路BIM 技术应用获得了快速的发展[1-3]。各单位依据自身需求选用不同的软件平台进行探索,取得了较大的技术进步。但是无论各单位选择那一款软件平台,随着研究的深入将面临软件功能不足的问题[4]。
各软件平台所建立的三维模型虽然能够较好地表达各工程实体间的空间几何关系,但是对于其他设计信息的附加能力较弱。尽管通过IFC 属性的附加,模型具备了一定的类型及属性信息[5],但是附加的信息仍然不能够满足设计需要。
目前,BIM 软件主要有欧特克(Autodesk)、本特利(Bentley)和达索(Dassault)[5]。各软件平台在铁路行业中的建模思路虽然命名不同[6-9],但基本可归属于“骨架-模板”模式[10-11]。
以达索平台为例,铁路行业内多采用EKL 语言批量实例化用户自定义特征 (UDF,User Define Feature)的方式建立骨架[12],该方法受限于EKL 语言的执行效率和UDF 的实例化速度,在骨架线数量较多的时候生成速度较慢。并且UDF 作为骨架线的载体,附加的信息相当有限,在设计及建模过程中需要设计人员进行大量的手动计算来确定模板实例化过程中需要的数据。
如1 图1 所示,计算骨架线所需数据耗费设计者大量的时间和精力,而采用UDF 无法省略该步骤的主要原因就是UDF 所能附加的信息不足,切无法包含复杂运算。
为了解决上述问题,减少设计者重复工作,本文在铁路隧道行业内探索使用CAA 开发的方式将骨架线作为自定义特征[13],由设计基础数据直接生成隧道骨架线。同时探索解决了设计信息附加的问题,开发人员可以任意添加骨架附加信息,提高了BIM设计的效率和质量。
骨架线是模型模板的定位基准,在部分模型模板当中还承担定型的作用,同时是协同设计中重要的信息传递载体[14-15]。所以,骨架线是整个建模工作的基础。铁路行业内的骨架线由总到分至少分为层。
线路总骨架由线路专业提供,是整条线路模型空间位置的最根本基础。总骨架包含线路左线和线路右线,其中,线路左线包含线路左线平面、纵曲线、左线三维线路以及断链表,线路右线包含线路右线平面、右线三维线路以及起止里程。骨架线模型,如图2 所示。
以隧道专业为例,隧道专业总骨架为在线路总骨架左线上按隧道起终点里程截取的线段。目前,隧道专业总骨架使用UDF 特征,采用EKL 语言批量生成。
专业骨架可依据各专业实际需要细分为若干层,但本质上都是将专业总骨架划分为可以直接作为建模基准细度的骨架线。以隧道专业为例,按照隧道衬砌类型表将隧道专业总骨架截断。衬砌类型表中的每一项对应一条隧道专业骨架。隧道专业骨架线同样适用UDF 特征,采用EKL 语言批量生成。
自定义特征是达索平台CAA 开发提供的扩展功能,可以由用户自己根据实际需要和业务逻辑定义适合自己需要的特征。自定义特征可以附加大量的信息,并包含复杂的逻辑判断和计算功能。
自定义特征的信息主要储存在2 个部分。附加信息,如断链表、骨架起终点里程记录在Catalog 文件中,Catalog 文件由OSM 文件生成。确定自定义特征中所能存储的信息类型,存储某个自定义特征的具体信息数据。判断逻辑和计算功能记录在代码生成的win64 文件中,通过将win64 文件部署到达索平台安装文件夹下特定位置调用,达到计算机代替设计人员进行复杂数据计算的目的。Catalog 生成及作用,如图3 所示。
在达索平台内部,一个特征的建立需要历经数学特征、几何特征、拓扑特征和机械特征4 个层级。
其中,机械特征的名称主要因为达索平台最初是为机械行业服务,名称一致沿用,铁路行业最终生成的自定义特征应该是机械特征。
数学特征包括生成特征所需的数值型数据,如圆心坐标值,圆半径等。几何特征在数字特征的基础上增加了特征的几何实体和空间位置等信息,是内存中实际存在的几何体。拓扑特征包含CATIA 特征所需的信息,可以参与拓扑运算,如将曲线拉伸成曲面或将曲面拉伸成实体等。上述3 种特征存在内存中,而机械特征才是最终出现在用户可见的模板空间中的特征实体。数据生成自定义特征过程,如图4所示。
骨架线二次开发主要需要实现2 方面功能,(1)通过读取对话框内输入的设计数据,生成单根骨架线。(2)通过读取Excel 内数据批量生成一系列的骨架线。
程序采用用户接口组件模型,在同一框架下分为4 个模块,分别是Addin.m, CommonFunction.m,Feat.m, UI.m,每个模块下包含若干类和资源。
如图5 所示软件分为4 个模块:
(1)Addin.m 模块作用为将整个软件实现的功能做成按钮添加到软件平台当中。
(2)CommonFunction.m 模块内包含一个名为CommonFunction 的类,该类中存储了大量通用性函数。
(3)Feat.m 模块定义了自定义特征的功能。包括数据的存入Catalog 和读取,确定由数据到生成自定义特征的过程,确定自定义特征在结构树上显示的属性内容等。
(4)UI.m 模块包含内容主要为对话框资源及对于部分对话框内属性数据的处理方法。
生成隧道骨架线需要的输入元素及数据包括线路左线几何图形集、骨架起终点里程、版本号。其中,线路左线几何图形集下需要用到左线三维线位、左线平面线位以及断链表。
骨架线生成流程,如图6 所示。(1)骨架线起终点里程在对话框内获取以后,读取断链表内信息,计算出起终点里程的实际位置;(2)由于铁路工程中的里程长度为平面线位的长度,因此计算出的里程点应该首先生成在平面线位上;(3)有平面线位上的起终点向Z 方向延伸与三维线位相交生成三维起终点;(4)采用三维起终点截取左线三维骨架线,并结合版本号生成隧道专业骨架线。
由于该自定义特征将所有属性信息都存储在Catalog 当中,可以通过自定义特征本身的更新适应输入元素及属性的修改。与传统UDF 骨架线相比极大地减少了设计人员工作量。
批量生成骨架线所需的属性信息存储在Excel 当中,通过程序逐行读取Excel 内数据。结合对话框中读取的左线几何图形集循环调用Feat.m 内的功能批量生成隧道专业骨架线。批量生成骨架线流程,如图7 所示。
在程序内部,生成每根骨架线的具体功能(图7 中蓝色背景部分内容)直接调用生成单根骨架线部分函数,因此在修改过程中直接调用单根骨架线修改功能,可以方便的实施修改。
在达索平台中,点在线上的定位通常采用点到曲线起点的距离。由于断链的存在,铁路线路上里程点间的距离并不一定等于两个里程点之间的差值。因此在获取里程点信息之后需要结合断链表信息进行计算,确定里程点在线路上的实际位置。
在使用UDF 作为隧道专业骨架线的方法中,由于UDF 无法存储断链表信息,也无法包含复杂计算,因此计算里程点实际位置的工作必须由设计者手动完成,不但工作量巨大、容易出现错误,也没有办法在线路或断链表信息发生变化的时候通过自我更新来进行修改。而采用自定义特征作为骨架线由于存储了断链表信息和里程点实际位置的计算方法,以上问题均不会出现。断链表示意图,如图8 所示。
通常,断链序号0 为线路起点里程。在从对话框内得到里程点信息后,要判断里程点位于哪个区间。由于断链序号前里程和后里程之间的里程是不存在的,因此里程点必然会位于两个断链序号之间的区间,即前一断链序号后里程以后,后一断链序号前里程之前。确定里程点位置区间后,即可确定线路起点与里程点位置之间的断链数量。然后循环执行用里程点里程值线路起点里程的差值依次减去里程点前断链后里程与前里程的差值,公式如下:
式中:
L——里程点距离线路起点的距离;
Df——里程点里程值;
DS——线路起点里程值;
n——里程点前断链数量;
Di1——断链序号i前里程值;
Di2——断链序号i后里程值。
计算结果可直接采用达索平台点到曲线起点距离定位的方式确定里程点实际位置。
需要注意的是,骨架线自定义特征内由数据生成自定义特征过程函数定义在TunnelESKBuild::Build()函数中,该函数在自定义特征生成或输入属性值发生改变时自动调用。但是由于骨架线自定义特征存储的是线路左线几何图形集,并没有直接存储断链表内的数据信息,因此修改断链表内信息并不能触发TunnelESKBuild::Build()函数的执行。因此在断链表信息更改后需要修改骨架自定义特征的版本属性触发更新。
通过C++语言进行CAA 二次开发将骨架线作为自定义特征,实现了将线路信息、里程信息、断链信息和计算方法等存储于骨架线当中。实现了设计信息从人为记录计算到计算机存储计算的转变,提高了BIM 模型的信息化程度。成功解决了此前骨架线建立速度慢、前期计算量大易出错后期修改复杂的缺点。与传统骨架线建立方法相比,其优势主要体现在以下几个方面:
(1)前期计算由计算机代替设计人员完成,减轻了设计人员工作并减少了人工计算错误的可能。
(2)UDF 由于自身原因,生成速度较慢,采用自定义特征方式加快了骨架线建模速度。
(3)骨架线包含更多设计信息,方便后续建模的使用,加强了信息的统一性和准确性。
(4)面对上游数据的修改,可以更好的实现自我更新,减少了建模工作量,避免了依赖骨架线建立的模型因为骨架线的修改而需要进行的修改工作。