APP下载

基于ObjectARX的AutoCAD二次开发技术在铁路桥梁工程中的应用

2021-10-14韩广晖陈冰洋

铁道标准设计 2021年11期
关键词:二次开发图层绘图

高 策,韩广晖,李 淼,陈冰洋

(中铁工程设计咨询集团有限公司桥梁工程设计研究院,北京 100055)

1 背景及意义

图纸是工程设计成果的主要表达形式,绘图工作量大是桥梁设计工作的重要特点。从经济性、通用性等角度出发,原铁道部及国铁集团编制了大量的通用参考图,这在一定程度上减少了设计工作量,但是由于工程条件千差万别,通用图无法做到面面俱到,需要单独绘制图纸的工作在具体设计中仍占有较大的比例,绘图工作常常成为制约设计进度的瓶颈。

对于桥梁设计企业管理者而言,如何减少绘图工作量、降低设计人员劳动强度,提高工作效率,把有限的人力投入到专业性更强、技术水平更高的设计研究工作中去,这是需要思考的现实问题。另一方面,通过编程等方法减少重复劳动、有利于身体健康、有利于技术进步,这对于工程师而言也具有很强的吸引力。

2 二次开发概述

目前国内土建行业主要采用AutoCAD软件绘图。AutoCAD(Autodesk Computer Aided Design)是Autodesk(欧特克)公司开发的自动计算机辅助设计软件,是土木工程师们最熟悉的绘图软件。

一般而言,Autodesk公司开发AutoCAD软件是一次开发,由AutoCAD的用户们开发的、在AutoCAD程序界面上应用的插件程序即为二次开发。其本质就是针对绘图、计算规则明确、可分类、可标准化的结构,通过各种计算机语言编制程序,将这些程序加载在AutoCAD软件中,使用程序实现绘图及计算等功能。在使用时,只需一个或几个命令就可以运行程序,自动完成绘图、计算过程。显而易见,这不仅提高了设计效率,也提高了准确性。

AutoCAD的二次开发方式包括AutoLISP/Visual LISP、VBA、ObjectARX等,各种开发方式的比较见图1。其中,ObjectARX拥有与AutoCAD自身几乎相同的编程接口和控制能力,是目前最为强大的二次开发方式。这种开发方式难度大,但是程序运行的效率最高、运行速度较快[1-5]。一般采用C++或C#语言进行ObjectARX二次开发,主要介绍基于C++[6-8]的ObjectARX二次开发。

图1 各种开发方式的比较[1]

3 ObjectARX主要原理及使用

ObjectARX二次开发程序后缀一般为“arx”。除了前述的运行效率高、速度快的特点外,ObjectARX二次开发程序与AutoCAD版本存在对应关系。要针对不同的使用场景分别编译生成32位、64位及不同AutoCAD版本的ARX文件。

一般一个DWG文件即可认为是一个图形数据库,这个图形数据库的组成见图2。图2中的实体即是各种图元,如直线、圆弧、文字等。由于通过程序生成各种实体需要使用块表及块表记录,所以块表和块表记录是编程中经常使用的部分。每个图元都有对应的ID,可以通过ID找到相应的图元获取或修改图元的信息,如坐标、颜色等。

图2 图形数据库的组成

需要加载及使用编译完成的ObjectARX应用程序时,可以用APPLOAD命令弹出对话框后选择相应ARX文件,也可选中相应ARX文件后按住拖放至AutoCAD窗口,之后在AutoCAD命令行键入对应的ARX命令即可开始使用。

4 编程环境

基于C++的ObjectARX开发的工具和软件包括AutoCAD、Microsoft Visual Studio、ObjectARX开发包(Software Development Kit即SDK),这3部分之间的版本存在一定的对应关系。其中SDK是由Autodesk公司提供的,可以在Autodesk的官方网站上下载,它包含各种库文件、头文件、帮助文件及程序示例等。SDK中的库文件、头文件是由Autodesk的软件工程师们已经开发好的各种成熟的类、函数或子程序。对于一般开发者而言,只需在项目文件中包含并使用这些库文件即可,避免了花费大量时间研究基础层面的功能实现,大大提高了编程效率,这也是二次开发的主要特点。

对于Microsoft Visual Studio,一般需要在项目的选项“VC++目录-包含目录”、“VC++目录引用目录”、“C++-常规-附加包含目录”、“连接器-附加库目录”中设置包含文件或库文件。

MFC(Microsoft Foundation Classes)是微软基础类库的简称,是微软公司提供的C++类库,主要封装了大部分的Windows API函数,对于ObjectARX 二次开发而言,如果需要建立可视化操作界面会用到MFC[8]。

ARX程序的命令是使用程序的入口,命令可以通过命令助手添加,也可手动在acrxEntryPoint.cpp中添加,与其他C++程序相同,命令的字母需要区分大小写。

5 通过编程实现绘图通用设置的思路

5.1 图层

根据一般绘图习惯,结构轮廓线、钢筋采用不同的颜色,通过设定的打印样式(.ctp文件)打印为不同线宽。不同颜色的线分别位于不同图层。同理,实线、虚线、点划线、文字等也分别位于不同图层。程序加载后,对当前DWG文件图层进行初始化,根据可能使用到的所有线型、颜色创建多种图层并将图层分别命名。

程序生成相关线条及文字时,各图元均默认随图层设置(Bylayer),读入图层名参数,即可完成颜色、线型的设置。

5.2 比例及文字

比例尺是绘图的重要参数。程序一般默认为A3或A2图纸,读入主要轮廓尺寸后,按照正视图,侧视图、俯视图、数量表等4部分布置,图纸内容所占高度即为正视图与俯视图竖向尺寸之和、水平长度即为正视图与侧视图之和,在此之外再适当考虑各部分之间的空隙和标注所占空间,即可基本确定图纸内容的范围。

程序设有“Scale”参数,此参数为0时即自动识别比例,输入其他数值即为自定义比例尺,如输入80,即表示比例尺为1∶80。比例尺确定后,程序按比例尺生成对应的文字样式、标注样式并命名,后续程序生成的全部文字和标注都采用相应文字样式、标注样式。另外,引线、钢筋圆点绘制也要引用比例尺参数,使其显示效果与图幅匹配。

6 编程应用实例

6.1 承台钢筋图绘制程序

群桩承台基础是铁路桥梁最为常见的基础形式,本程序可以绘制单层矩形、双层矩形、单层切角、双层切角4种类型的承台钢筋图。

本程序采用填数据卡模式,数据卡为TXT格式文件,各数据在数据卡文件中的顺序是固定的并配有说明书。使用时键入SDPC命令(命令为Steel Drawing of Pile Cap的缩写),激活打开文件对话框,使用该对话框打开任意路径下已经填好的TXT数据卡文件,瞬间即可完成承台钢筋图绘制。

程序可以通过一次运行命令实现多种类型的多个承台钢筋批量绘制,底面钢筋根据受力需要可单肢、双肢、单双肢交错以及单层、多层布置,绘图成果见图3、图4。

图3 程序绘制的单层矩形承台钢筋图(部分)(单位:mm)

图4 程序绘制的双层承台(下层切角)钢筋图(部分)(单位:mm)

对于不同类型的承台分别采用参数KC控制,为了便于理解,KC取值分别为14、24、18、24,其中10位数1或2表示单层或双层承台,个位数4或8表示4边(矩形)或8边(矩形切角)承台。

程序读入承台长、宽、高等尺寸后绘制承台构造。根据不同的承台类型梳理为7或11种类型钢筋[9-11],其中单层承台为7种钢筋、双层承台为11种钢筋,依次读入每种钢筋的直径、间距、弯钩长度参数及保护层参数后依次绘制各类型钢筋。其中考虑到规范的更新[12]及工程具体条件的不同,程序专门提供了可供使用者输入的钢筋弯钩长度参数。

三视图的布置图绘制完毕后进入计算数量环节。程序采用二维数组“amount”记录各类型钢筋的编号、直径、单根长度、合计长度、延米重、总重等参数,数组的行数即为钢筋类型数,数组列数在最终钢筋数量表的列数上适当增加,增加的列数用于存储弯钩长度、变长度钢筋的最大值、最小值、平均值等过程计算变量。之后绘制数量表的纵横线,通过二重嵌套循环将二维数组“amount”中的钢筋编号、直径、数量等数值转换为CString变量添加到数量表中的相应位置。

通过“detail”函数绘制钢筋大样,由于四种承台的钢筋大样形状存在一定差别,该函数共包括四种形式,分别对应四种承台类型,绘制直线(含半圆弯钩及直角弯钩)、矩形、切角矩形等不同钢筋大样,二维数组“amount”作为参数被引用到“detail”函数中,大样函数“detail”绘制大样图形后将“amount”中的钢筋编号和长度添加到大样附近相应位置。

程序设有绘制垫层和桩基的参数“pile_onoff”,该参数为1、2、3时分别对应行列式、梅花式、自定义布桩等三种桩基布置形式。

另外考虑到部分项目有按含筋量确定竖向架立钢筋的习惯。当架立钢筋的直径参数输为0时,即可通过含筋量(kg/m3)计列架立钢筋的数量,含筋量的数据卡位置与原钢筋间距参数相同。

程序主要流程图见图5。

图5 承台钢筋图绘图程序SDPC流程

6.2 实体桥墩钢筋图绘制程序

本程序能够绘制常见客货共线T梁[13-15]对应圆端形桥墩[16-17]的垫石、托盘顶帽、墩身钢筋图。墩身箍筋布置可适应不同地震烈度,自由输入钢筋直径、间距,可生成布置图、大样图、数量表等内容。同承台钢筋图绘图程序一样,可自动判断图纸比例尺,也可自定义比例尺,图纸内容均与比例尺对应。软件出图后手动套用项目图框后即可成图。程序主要流程见图6,绘图成果见图7。

图6 桥墩钢筋图绘图程序SDPR流程

图7 桥墩钢筋图绘图程序生成的顶帽钢筋图(部分)(单位:mm)

桥墩构造及布筋原则主要参照通桥[2012]4104、通桥[2017]4104圆端形实体桥墩,即矩形顶帽、圆端形托盘、圆端形墩身,墩顶不设过人洞、墩身不设泄水管凹槽,地震区箍筋加密段设于墩底。后期拟升级为兼容城际[18]、高速铁路圆弧托盘、圆端顶帽、设泄水槽、墩顶检查槽等多种类型桥墩[19]的钢筋图绘图程序。

本程序同样采用填数据卡模式。使用时键入SDPR命令(该命令为Steel Drawing of Pier的缩写),激活打开文件对话框,打开任意路径下已经填好的TXT数据卡文件,瞬间即可完成桥墩钢筋图绘制。

6.3 批量打印程序

图纸数量多、打印工作量大是桥梁设计的重要特点。目前一般打印流程为:图纸绘制完毕→编辑图名图号→开始打印PLT文件→手动逐张框选图纸打印范围→选择打印样式→针对不同图纸输入缩放比例→按图号图名为PLT文件命名(如郑济施桥-21-01-全桥布置图第1张共2张.PLT)→选择保存路径→印刷硫酸图及转换DWF或PDF文件汇总归档。

打印环节大部分是机械的重复劳动,但工作量不可小视。尤其在实际工作中常常遇到图名图号修改、阶段名称由咨询稿改正式施工图等情况时,打印工作量更是成倍增加。

对于桥梁设计者而言,打印是设计工作的最后一步,尤其在设计周期紧张的情况下,打印占用了有限的设计时间,也耗费了设计者的精力,成为急需解决的“痛点”。

对于程序开发者而言,图纸的打印规律性很强,易于通过代码编制相应规则,通过程序解放劳动力,是编程的理想对象。笔者开发的QPLT程序,可一次性打印多个DWG文件模型空间中的多张图纸并生成PLT,可自动识别图纸内容中的图名图号并命名,生成的PLT文件可用于转换DWF、PDF等文件或打印蜡图。程序界面见图8。

图8 批量打印QPLT程序界面

使用前,需要设置图纸外框,即将需要打印的每个DWG文件里的每张需要打印的图纸外框,采用闭合矩形绘制(使用矩形rec命令或多义线PL命令均可),此图框可加长、可自由设置比例,但需要单独放在一个图层里。

使用时加载程序,在AutoCAD中输入命令“qqq”,回车随即弹出打印对话框,在对话框内选择添加准备打印的DWG文件、选择打印机及纸张、相应的打印样式、填入图框所在的图层名,点击打印。打印出的PLT文件均存放在对应DWG文件所在的文件夹下。

当需要在打印的PLT文件名前统一添加前缀时,可使用增加前缀功能,比如使用了外部参照的角标,模型空间中只有图号尾数的情况(如文件名统一添加前缀“襄常郑万联宜配施(咨)桥-24-”)。如果希望生成的文件名不包含长串的图号,可以选择不包含前缀,程序会将文件名中最后一个“-”前面的文字删除,即只保留图号的尾数。

设计人员绘图时,图号、页码按理论位置放置,图名位置也不要过分偏离。程序根据文字相对于外图框的位置检索判断并获取图名、图号、页码(页码指“第x张共n张”)。程序主要适用于笔者所在单位使用频率较高的4种三大类图签角标:工点桥(院审定及专业审定)、工点桥(集团审定)、通用图[20](设计复核审核)。其中工点桥的图名都在最下方,图名文字的下缘(即插入点)位置不高于图9的虚线,也不要低于图纸内框;通用图主要的图名在中间,文字的下缘(即插入点)不超出图10两条横向虚线的范围。

程序的主要原理是通过使用者输入的图框所在的图层名获得图层的layerId;之后使用迭代器pBlkTblRcdItr遍历模型空间块表记录,对于符合layerId的多段线,通过循环将图框多段线的左上和右下角点坐标(即打印范围)分别储存在2个二维数组中。对于笔者所在单位的几种典型图签角标(图9、图10),其图号、图名、页码相对于图纸外框的位置是固定的。程序结合使用者选定的图签角标类型获取对应位置处的图号、图名、页码,将此信息组合后设为PLT文件的文件名,从而实现了通过程序批量打印文件并自动编辑文件名的功能。

图9 典型图签角标示意一

图10 典型图签角标示意二

7 结语

与软件工程师相比,土木工程师从事软件开发的长处是问题导向性强,能准确把握程序的使用功能,短处是软件开发经验不足、编程语言知识基础较弱,二次开发一定程度上弥补了这种不足。

当今世界计算机技术高速发展,依赖于传统设计绘图手段的铁路桥梁行业,在计算机软件提升方面大有可为。基于ObjectARX的AutoCAD二次开发技术是十分实用的技术,可以有效降低劳动强度、提高劳动效率。本文涉及的三款程序已在多个项目中应用,反响较好,可为相关二次开发编程提供借鉴。

猜你喜欢

二次开发图层绘图
AutoCAD 与PDMS 二次开发在三维复杂形体设计建模上的应用
编辑部故事
为《飞舞的空竹龙》加动感
例谈对高中数学教材中习题的二次开发
以假乱真窥探湿玻璃后的风景
浅谈CAD软件二次开发的方法及工具
垂涎三尺
与众不同“跳出”画面更个性
例谈课本习题的“二次开发”
绘图机器人