张兴华
(中国铁路设计集团有限公司 桥梁工程设计研究院,天津 300142)
铁路涵洞通用图中制定了一系列涵洞结构尺寸,用于适应涵洞的各种孔径、角度、埋深等参数变化,与之对应的涵洞出入口作为独立结构也相应地制定了复杂的尺寸表格。在铁路三维建模项目中,人员手动建模的重复操作较多而且又不能通用,特别是箱涵出入口挡土墙目前多为八字翼墙,八字翼墙放坡面交叉是空间三角形平面形式,关键节点坐标计算难度较大。基于这种情况,有必要研究、开发一套能够根据通用图表格自动创建出入口三维建模的程序。本文以VB.NET为开发环境,结合CATIA建模应用,开发了参数化批量创建箱涵出入口的三维建模程序。
CATIA是一款三维设计软件,已广泛应用于机械、航空领域,在解决复杂建筑结构空间建模方面有独特的优势。目前,主要的二次开发方式有:
(1)通过安装CATIA提供的二次开发工具组件应用架构CAA,在C++开发环境中与CATIA通信并使用其提供的一系列API函数进行开发,以此达到开发CATIA插件的目的。采用这种方法开发的程序特点为插件形式,运行效率高,缺点是开发者需要在熟练运用CATIA并且了解CAA API函数的基础上,额外安装相关的开发组件并且需要掌握C++语言才能进行开发工作,所以入门难度较高。
(2)通过运行CATIA并录制宏来进行开发。相对于我们熟知利用VBA二次开发Excel或CAD而言,CATIA的宏录制器可以直接将录制宏转换为开放式的VBScript代码,所以开发者几乎无需系统地学习VBScript便可在录制宏的基础上修改代码并使之成为自己的程序。该方法简单方便,无需额外的开发环境,但此种方法人机交互性差,无法做出界面,也无法达到参数化建模的效果。不过,开发者可以利用VB.NET作为开发环境,通过COM引用CATIA对象库至程序框架之中,复制粘贴并编辑宏代码,从而达到在外部环境直接操作CATIA实例对象的效果,并且能够开发独立的程序界面,来实现交互式的参数化建模功能。这种方法运行速度不如前者,但简单有效并且功能同样强大,适用于小型化的建模开发工作,本文选取这种二次开发方式。其中,获取CATIA实例对象的主要VBScript代码如下:
Dim catia As INFITF.Application= GetObject(,"CATIA.Application")'获得catia对象
Dim documents1 As Documents= catia.Documents'获得当前操作窗口集合
Dim partDocument1 As Document=documents1.Add("Part")'获得当前操作窗口
Dim part1 As Part=partDocument1.Part'获得零件设计对象
本程序的界面向用户提供了箱涵出入口参数化建模图示、Excel数据源的指定与加载、数据源的列表显示以及洞门批量建模与文件导出功能按钮,如图1所示。
图1 程序界面
(1)根据位于界面左侧的箱涵出入口结构样式图,用户按指定格式使用Excel准备好相关数据文件;
(2)点击界面左上角指定图库的蓝色按钮,选中文件后即可提取Excel并更新数据至界面右侧列表,表中的每一行代表一种出入口尺寸类型;
(3)可通过鼠标选择列表中的单行或多行来指定要建模的出入口;
(4)点击创建BIM模型按钮,由程序在后台启动CATIA并进行参数化建模;
(5)创建好的模型将保存为*.CATPart以及*.STL格式提供三维项目调用。
箱涵通用图出入口的尺寸表作为三维建模时的数据来源,充当程序数据库的作用。相对于部署困难的大型数据库,就小程序来说,选用ACCESS或Excel会更加灵活而且容易开发。这两者相比较,各有优势,ACCESS作为数据库应用比Excel更加专业,可以灵活地使用SQL语言操作数据记录,但除非在程序中再额外开发数据库管理功能,否则用户直接编辑ACCESS文件比较麻烦且不直观。Excel作为数据库最大的缺点就是使用SQL语言不够灵活,不宜实现添加、删除、筛选记录等功能。但其完全开放的数据编辑模式和广泛普及的使用性,使得用户依靠手动操作便可自由地管理数据记录,达到随时更新最新通用图尺寸的效果,所以本文采用Excel作为通用图的模板格式。目前,读取Excel比较普及的方式主要有以下3种。
该方法的特点是功能强大、速度快。但因其不能脱离Excel内部环境运行,所以不能开发独立的程序主界面。而且因为不是.NET环境,所以窗口及控件外观也比较简陋。此外,对于开发者而言,VBA的源代码暴漏在外,不利于代码保密;如果额外开发DLL提供VBA调用,既可以达到VBA的高效率,又可以实现程序封装的目的,但是,这样做对于小程序而言,开发难度加大、开发成本过高。
通过COM类库创建实例相当于在Excel外部使用VBA编程,几乎可以实现所有的Excel功能,而且可以脱离Excel运行环境,在外部独立开发程序的功能与界面。但该方法的缺点是速度慢,特别是在表格数据庞大时进行的写操作,耗时几乎是VBA操作的万倍以上。
该方法是采用数据库连接的形式,读取效率比通过COM引用Excel类库要高。ADO是对OLE DB的一种封装,提供了大量的COM接口,既保留了原有的数据处理功能,又简单易用。ADO.NET则是建立在ADO基础上并针对.NET编程环境的升级。采用ADO.NET的OleDbConnection对象,可以以较快的速度从外部连接并读取Excel表格内容,同时,DataSet对象的筛选功能,也能作为对该方法使用SQL时不够灵活的一种补偿。数据库连接及操作的关键代码如下:
Dim Con As New OleDbConnection '连接数据源
Con.ConnectionString = "ADO.NET的Excel连接字串" '赋值连接字串
Dim Adapter As New OleDbDataAdapter-("SELECT * FROM [sheet名称$]", Con)
Dim dataSet As New DataSet '数据集对象
Adapter.Fill(dataSet, "sheet名称") '填充数据集
Dim filrow() As DataRow '过滤记录
filrow = dataSet.Tables("sheet名称").Select("查找条件where的字符串")
经过比较,本文采用ADO.NET方式读取Excel数据源。
箱涵出入口挡土墙的外形为八字翼墙,结构比较复杂,特别是中部的三角形为空间平面,关键节点的坐标无法通过公式计算得到,所以整体建模难度较大。因此,将其进行拆分并分别建模,拆分后的出入口大致由4部分组成,如图2所示。图2中,①表示纵向挡墙;②表示横向挡墙;③表示中部三角形挡墙;④表示基础。
图2 箱涵出入口平面示意图
以图2为例:
(1)根据几何公式计算c点坐标,以c点为基准点创建出入口的①、③部分;
(2)经过对①、③部分的裁剪确定a点、b点坐标;
(3)根据关键节点坐标及实体间的裁剪功能创建②部分;
(4)创建④部分。
各部分建模常用的VBScript代码如下:
Dim sketch1 As Sketch=sketches1.Add(origin-Elements1.PlaneYZ) '设置xy平面为草图平面
Dim constraints1 As Constraints=sketch1.Constraints '为草图平满设置约束集
constraints1.AddBiEltCst(catCstTypeVerticality,约束对象1, 约束对象2) '设置约束
shapeFactory1 = part1.ShapeFactory'图形加工类库
Dim pad1 As Pad=shapeFactory1.AddNewPad-(sketch1, 拉伸距离) '拉伸对象
Dim split1 As Split=shapeFactory1.AddNew-Split(裁剪对象, 裁剪面)'裁剪对象
建模效果如图3所示。
图3 CATIA建模效果图
针对铁路三维设计项目中外形尺寸变化繁多的涵洞出入口结构,本文对CATIA的二次开发以及Excel作为数据源的相关技术进行了研究,开发了依据通用图尺寸表格参数化创建箱涵出入口的三维建模程序,达到了批量建模的目的。本文介绍的CATIA二次开发方法简单有效,同时,以Excel作为数据源,使得用户可以随时更新尺寸数据,操作简便。本程序已在铁路BIM相关设计项目中应用,效果良好,减少了手动操作工作量,提高了建模效率。
[1] 黎家立.基于ADO对象编程实现Excel表中数据的检索[J].数据库与信息管理,2017(2):53-54.
[2] 李 原,彭培林,邵 毅,等.基于CATIA的标准件库设计与实现[J].计算机辅助设计与图形学学报,2005,17(8):1873-1877.
[3] 潘永杰.基于BIM的桥梁建养一体化平台应用研究[J].铁路计算机应用,2016,25(5):39-43.
[4] 刘延宏. BIM 技术在铁路桥梁建设中的应用[J]. 铁路技术创新,2015(3):47-50.
[5] 金 星. 铁路勘测设计BIM 应用基础研究[J]. 铁道建筑,2014(7):136-138.
[6]赵斯思.Visual Basic数据库编程技术与实例[M]. 北京:人民邮电出版社.2004.
[7]侯彤璞,赵新慧. Visual Basic.NET程序设计实用教程[M].北京:清华大学出版社,2008.
[8] 胡 挺,吴立军. CATIA二次开发技术基础[M].北京:电子工业出版社,2006.