基于CAD二次开发技术的钢桁梁桥参数化绘图研究

2014-09-26 11:34朱宗喜程耀东
铁道标准设计 2014年10期
关键词:桁梁线型杆件

朱宗喜,程耀东,王 博

(1.兰州交通大学测绘与地理信息学院, 兰州 730070;2.兰州交通大学土木工程学院, 兰州 730070)

基于CAD二次开发技术的钢桁梁桥参数化绘图研究

朱宗喜1,程耀东2,王 博1

(1.兰州交通大学测绘与地理信息学院, 兰州 730070;2.兰州交通大学土木工程学院, 兰州 730070)

在研究多种钢桁梁桥的结构特点、杆件类型的基础上,运用VC++和ObjectARX开发技术,建立图层、颜色、线型、文字和标注样式等绘图环境设置接口函数,开发图形绘制、尺寸标注、文字书写等接口功能,根据钢桁梁杆件参数的不同,创建各种杆件的参数化绘图和符号标注子模块,实现钢桁梁杆件的参数化绘图,为钢桁梁桥的参数化绘图提供了新的思路和方法。

桥梁结构;钢桁梁桥;AutoCAD;ObjectARX;参数化绘图

现代钢桁梁桥及其他钢结构日趋复杂,其杆件二维平面图的设计和绘制工作繁重,如果仅仅采用AutoCAD软件交互绘图,依次绘制各种类型的杆件,则工作量大且效率低。因此,在AutoCAD环境下,实现钢桁梁桥杆件二维平面图的参数化绘图,将会大大提高绘图效率。

文献[1]对我国移动模架技术标准化进行了研究与展望,给钢结构杆件的标准化设计提供了思路;文献[2]对混合梁斜拉桥钢混结合段的关键设计技术进行了研究;文献[3]对箱梁结构特点进行了分析,运用VC++和ObjectARX工具,对箱梁三维实体参数化建模进行了研究;文献[4-7]对ObjectARX工具包的编程环境、类库、应用程序框架以及ARX的接口技术等进行了研究,并结合线路设计和其他工程设计进行了开发;文献[8]讨论了ObjectARX与MFC结合进行AutoCAD 二次开发的方法,文献[9-11]对图纸自动化生成技术和生成系统进行了研究。由上可以看出,在钢桁梁桥自动绘图方面的研究文献较少。

本文运用VC2005软件开发平台和ObjectARX二次开发工具包,对AutoCAD图形数据库的操作、绘图接口方法和绘图参数标准化进行探讨,建立了设置图层、标注样式和基本绘图等接口函数,实现了杆件的参数化自动绘图,为钢桁梁的设计提供自动绘图软件。

1 开发环境配置

1.1 ObjectARX简介

ObjectARX是AutoDesk公司为实现AutoCAD平台上的二次开发而推出的一个软件开发包,它提供了以C++语言为基础的面向对象的开发环境及应用程序接口,能快速访问AutoCAD图形数据库。

ObjectARX应用程序是一个动态链接库(Dynamic Link Library,缩写为DLL),与AutoCAD在同一地址空间运行,能够利用AutoCAD的内核代码直接访问AutoCAD的数据库、图形系统及几何造型核心,在运行期间实时扩展AutoCAD的功能,使得程序运行速度大大提高。另外,ARX 类库采用了标准的C++类库的封装形式,大大提高了程序员编程的可靠度和效率。

1.2 搭建开发环境

运用VC++和ObjectARX工具 对AutoCAD进行二次开发,首先必须设置ObjectARX开发环境,不同版本的AutoCAD软件对应的开发工具和语言有一定的对应关系,本文采用ObjectARX 2007 SDK和VC2005语言对AutoCAD 2008进行开发。在VC2005语言环境中,选择[视图]→[属性页]进行配置:设置编译器,包括附加包含目录、警告等级、可移植性及运行时库等;设置链接器,包括输出文件、附加库路径、附加依赖项及模块定义文件等。

1.3 图层创建及其属性设置

在AutoCAD状态下,为了便于图形管理,应该对图形进行分层,图层一般划分为:轮廓层、虚线层、中心线层、尺寸标注层、文字说明与注写层等。创建图层就是在数据库的层表中添加层表记录,在建立层的同时给该层设置颜色、线型和线宽等属性。

1.3.1 添加图层

添加图层的方法和步骤如下。

(1)定义图层接口函数

AcDbObjectId NewLayer(TCHAR* LayerName, Adesk::UInt16 ColorIndex,double

LineTypeFactor, TCHAR* LineType, AcDb::LineWeight Weight);

函数中的参数依次为图层名称、颜色、线型比例因子、线型和线宽,返回值类型为AcDbObjectId;在图层创建后,若不进行更改图层属性等操作,可设置返回值类型为void。

(2)获取当前图形的层表

定义层表指针pLayerTbl,在当前数据库符号表中以写的方式打开层表:acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl, AcDb::kForWrite);

(3)判断图层名是否存在

若存在,关闭层表,结束图层创建;否则继续下一步。

(4)创建新层表记录

定义层表记录指针pLayerTblRcd=new AcDbLayerTableRecord();设置图层名:pLayerTblRcd->setName(LayerName);将新的层表记录添加到层表中:pLayerTbl->add(LayerTblRcdId, pLayerTblRcd)。

(5)设置颜色、线宽和线型

成员函数setColor()和setLineWeight()可以完成颜色和线宽设置,需要注意的是在设置前需将Adesk::UInt16类型转换为AcCmColor类型,代码如下:

AcCmColor Color;

Color.setColorIndex(ColorIndex);

设置线型时要检查所设置的线型是否在当前的线型表中存在,若不存在,则需要加载线型文件“acad.lin”,步骤包括:①定义线型表指针和线型ID号,在当前数据库中以读的方式打开线型表;②判断当前线型表中是否存在需要设置的线型ID号,若存在,执行下一步操作,否则加载线型文件“acad.lin”并获取需要设置的线型ID号;③设置线型。加载线型文件的代码如下:

acdbCurDwg()->loadLineTypeFile(LineType,_T("acad.lin"));

acdbCurDwg()->getLinetypeTable(pLinetypeTbl,AcDb::kForRead);

pLinetypeTbl->getAt(LineType, DashedLineId);

(6)关闭层表指针,返回层表ID号

1.3.2 创建标注样式及文字样式

创建标注样式和文字样式的操作方法相似,以创建标注样式为例方法如下。

(1)定义接口函数。

AcDbObjectId AddDimStyle(TCHAR* StyleName,double LinearFactor,double Scale,

double DimTextHeight);

函数中参数依次为标注样式名称、线性单位比例因子、全局比例因子和标注字体高度。

(2)获取当前标注样式表。

(3)判断要定义的标注样式名称是否存在,若存在,关闭标注样式表,结束标注样式创建;否则进行下一个步骤。

(4)创建标注样式表记录并设置标注样式属性。

标注样式属性由其对象成员函数进行设置:setName()设置标注样式名称,setDimasz()设置箭头长度,setDimtxt() 设置标注文字的高度,setDimscale()设置全局比例因子,其余属性如尺寸界线与标注点的偏移量、尺寸界线起点偏移量、线性单位比例因子等也由相关成员函数进行设置。属性赋值一般根据国标规定来确定,部分属性赋值也可以由具体的设计来确定,如全局比例因子、线性单位比例因子。

(5)将标注样式表记录添加到标注样式表中,关闭标注样式表,返回标注记录ID号。

2 创建基本绘图接口函数

工程图由图形、文字和符号等内容构成,复杂图形是由直线、矩形、圆和多段线等绘制,所以要实现参数化自动绘图就必须创建基本绘图接口函数。以下是几种基本绘图接口函数。

2.1 创建直线

工程图中直线是最基本的图形,创建直线的实质是对数据库进行操作,方法步骤如下。

(1)定义函数。设直线起点ptStart(x1,y1,z1)和终点ptEnd(x2,y2,z2),函数定义为:

AcDbObjectId CreateLine(doublex1,doubley1,doublez1, doublex2,doubley2,doublez2);

为了程序中调用函数的方便,可以重载CreateLine()函数:

AcDbObjectId CreateLine(AcGePoint3d ptStart, AcGePoint3d ptEnd);

(2)创建AcDbLine对象。AcDbLine *pLine=new AcDbLine(ptStart, ptEnd);

(3)获得指向块表的指针pBlockTable:

acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,

AcDb::kForRead);

(4)获得指向块表记录的指针pBlockTblRcd,将AcDbLine对象添加到块表记录中:

pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTblRcd, AcDb::kForWrite);

pBlockTblRcd->appendAcDbEntity(LineId, pLine);

(5)关闭图形数据库的块表对象、块表记录和AcDbLine对象。若需要对创建的实体进行操作,则返回实体ID号。

上述步骤可以划分为3个阶段,如图1所示,考虑到绘制每一个基本图形都会重复将实体对象添加到模型空间,造成代码重复、程序不简洁,所以在编程中将(3)~(5)中的代码组合成一个函数供CreateLine()调用,其功能是将实体对象添加到模型空间,函数声明如下:

AcDbObjectId PostToModelSpace(AcDbEntity* pEnt);

图1 创建直线的流程

创建圆的方法和直线类似,创建AcDbCircle对象的方法为:

AcDbCircle *pCircle=new AcDbCircle(ptCenter,Vec,Rradius);

其中,Vec为圆所在平面法向矢量。

2.2 创建多段线

多段线和直线的不同在于直线的每一段为一个实体,而多段线整体为一个实体;多段线可以进行曲线拟合,而单条直线不能拟合。创建多段线的接口函数声明如下:

AcDbObjectId CreatePolyline(AcGePoint2dArray Points, double Width );

参数Points和Width分别表示构成多段线的顶点数组和线宽。部分代码如下:

AcDbPolyline *pPoly=new AcDbPolyline(Points.length()); //创建AcDbPolyline对象

for (int i=0; i < Points.length(); i++) {

pPoly->addVertexAt(i, Points.at(i), 0, Width, Width); //添加顶点}

在钢桁梁杆件二维图中,用矩形表示钢板截面,可利用多段线接口函数和矩形的长、宽数据定义矩形绘制函数。

3 创建文字及尺寸标注接口函数

3.1 创建文字

文字是工程图的重要组成部分之一,创建文字时需要定义文字插入点、高度、样式和旋转角度,文字的书写分为单行和多行两种形式,下面给出两个接口函数声明及主要代码:

(1)单行文本

AcDbObjectId CreateText(AcGePoint3d ptInsert, CString Text,double Height,AcDbObjectId Style,double Rotate);

AcDbText *pText=new AcDbText(ptInsert,Text,Style,Height,Rotate); //创建AcDbText对象

(2)多行文本

AcDbObjectId CreateMText(AcGePoint3d ptInsert,CString Text,double Height,double

Width, AcDbObjectId Style);

AcDbMText *pMText=new AcDbMText(); //创建AcDbMText对象

通过AcDbMText对象成员函数可以设置相关属性:setTextStyle()设置文本样式,setWidth()设置文本宽度,setContents()设置文本内容,setLocation()设置插入点,setTextHeight()设置文本高度。

3.2 创建尺寸标注

常用的尺寸标注有对齐标注、直径、半径标注等,以对齐标注和半径标注为例,接口函数声明及部分代码如下[12]:

(1)对齐标注

AcDbObjectId CreateDimAligned(AcGePoint3d pt1, AcGePoint3d pt2, AcGePoint3d ptLine,

AcDbObjectId DimStyle, CString DimText="");

参数含义:pt1为第一条尺寸界线的起点,pt2为第二条尺寸界线的起点,ptLine为通过尺寸线上的一点,DimStyle为标注样式,DimText为标注内容。创建尺寸标注:

AcDbAlignedDimension *pDim=new AcDbAlignedDimension(pt1, pt2, ptLine, DimText, DimStyle);

(2)半径标注

AcDbObjectId CreateDimRadial(AcGePoint3d ptCenter, double Radius, double Angle,

double LeaderLength, AcDbObjectId DimStyle, CString DimText="");

参数含义依次为圆心坐标、半径、标注尺寸线旋转角度、引线长度、标注样式和内容。

标注半径尺寸时,先确定尺寸线与圆周交点坐标ptChord(类型为AcGePoint3d),标注半径的方法为:

AcDbRadialDimension *pDim=new AcDbRadial Dimension(ptCenter,ptChord, LeaderLength, DimText, DimStyle);

3.3 创建标注符号

在钢结构图中除上述基本尺寸标注外,还包括材料号、截面号、标题、坡度、焊接、详图、钢板信息(钢板数目、长、宽、厚)等标注,这些都是工程图的重要组成部分,必须创建标注符号,标注符号的位置、大小、旋转角度等属性可以由参数进行设置,以适应具体工程图及图形拓扑需要,这些符号由绘图和文字书写接口函数组合绘制。部分标注符号如图2所示。

图2 标注符号

4 钢桁梁桥杆件参数化绘图方法

参数化绘图是专业CAD软件最重要的应用技术之一,它是通过修改图形参数,从而自动改变图形中的相关部分,或者是改变图形中某一部分或某几部分的尺寸,实现对图形的修改。用参数化绘图方法绘制钢桁梁桥杆件,便于设计人员设计和修改,将大大提高绘图效率。

4.1 标准化绘图参数

为了实现自动化绘图,必须对杆件参数进行标准化,钢桁梁桥杆件参数归纳为以下4种:

(1)轮廓尺寸参数,包括杆件长、宽、厚、螺栓直径等;

(2)拓扑关系参数,指组成杆件的各组件空间位置及各视图之间的间距等;

(3)数量参数,指组成杆件的各组件的数目,例如隔板数目、螺栓个数等;

(4)指代参数,是可以指代图形几何形状的参数,如在绘制螺栓阵列的接口函数中定义一个bool型的变量IsCircle,当IsCircle为0时,用实心点表示螺栓,当IsCircle为1时,用圆圈表示螺栓,因此,可以设置指代参数来改变图形形状样式。

将钢桁梁桥各类杆件的参数按照上述分类方法进行归纳整理,以便于绘图时输入参数,输入参数的方法分为3种:一是读取txt格式的文件,当参数数据量大且类型比较单一时,适用这种方法;二是对话框输入,当参数的意义比较抽象,需要配置示意图解释时,此方法比较合适;三是在AutoCAD命令行输入,如输入变量或拾取坐标点等参数。

4.2 子图分类

钢桁梁桥杆件工程图是由大量直线、圆、矩形及多段线等组成,其绘图实质是将基本绘图接口函数进行组合创建更加复杂的图形。对于相对单一的图形(如工字钢横截面)可以用一个接口函数一次性绘制完成(如图3(a));对于比较复杂的图形,可以将图形按组成特征分成若干子图,对每个子图创建绘图接口函数,最后将各个子图整合为完整工程图(如图3(b))。子图以杆件的类型、详图内容、节点形式等因素进行划分,包括:轮廓子图、加劲肋子图、螺栓阵列子图及隔板子图等。

图3 子图举例

4.3 标注

对于工程图的标注有以下两种标注方法。

(1)简单标注,针对由基本绘图接口函数绘制的简单图形的标注,可以是对齐标注、半径标注和符号标注中的任意一种。

(2)复合标注,针对划分的子图创建标注接口函数,由若干对齐标注、半径标注和符号标注组成。如图4中工字钢侧面投影的标注,包括5个对齐标注和3个文字标注。

4.4 钢桁梁桥杆件绘图实例

根据上述钢桁梁桥杆件参数化绘图方法,以赵寨颍河双线特大桥施工图中的某一段工字钢杆件为例绘制平面图。如图4所示。

图4 工字钢杆件平面(单位:mm)

5 结语

本文运用VC2005结合 ObjectARX二次开发工具包,对AutoCAD绘图环境中的图层、颜色、线型和线宽进行自动设置,建立了基本实体、标注样式、文字书写及尺寸标注等接口函数,实现了钢桁梁桥杆件、节点板、断面图及详图的二维参数化绘图,通过设计实例证明了这种CAD技术出图快、精度高,比交互绘图提高效率75%左右。这种钢桁梁桥参数化绘图技术对其他形式的桥梁CAD研究具有一定的参考价值。

[1] 刘宏刚,尤继勤,张超福.我国移动模架技术标准化与现代化展望[J].铁道标准设计,2014(4):37-43.

[2] 蔡建业.混合梁斜拉桥钢混结合段设计[J].铁道标准设计,2014(1):68-71.

[3] 朱德荣.箱梁三维实体自动建模方法研究[J].铁道标准设计,2014(3):54-58.

[4] 程耀东,姚德新,徐军.既有轨道纵断面CAD软件开发研究[J].兰州交通大学学报,2005(1):14-17.

[5] 程耀东,赵建昌,徐军.图形数据库应用技术研究[J].工程图学学报,2006(1):143-148.

[6] 何亮.基于ObjectARX的CAD系统开发若干关键技术的研究[D].合肥:合肥工业大学,2008.

[7] 杜刚,刘东学,张磊.基于ObjectARX的AutoCAD二次开发及应用实例[J].机械设计与制造,2004(3):30-32.

[8] 崔秀丽,鲁墨武,邢艳秋,等.ObjectARX与MFC结合开发AutoCAD应用程序[J].沈阳航空工业学院学报,2007(1):28-31.

[9] 孙建峰.图纸自动化生成系统的设计与实现[D].江苏镇江:江苏大学,2007.

[10] 张锋.基于ObjectARX的图纸自动处理技术若干问题的研究[D].杭州:浙江大学,2006.

[11] 饶上荣.工程图纸自动生成技术的研究与实现[D].北京:中国科学院研究生院(计算技术研究所),2000.

[12] 李世国.AutoCAD高级开发技术——ARX编程及应用[M].北京:机械工业出版社,1999.

Research of Parametric Drawing of Steel Truss Bridge Based on Secondary Development of CAD

Zhu Zongxi1, Cheng Yaodong2, Wang Bo1

(1.Faculty of Geomatics ,Lanzhou Jiaotong University, Lanzhou Gansu, 730070, China; 2.School of Civil Engineering, Lanzhou Jiaotong University, Lanzhou Gansu 730070, China)

On the basis of the structural characteristics of various kinds of steel truss bridge and member models, interface functions of drawing environment settings for setting layer, color, line type, text and marking style are established, and the interface services to draw graphics, mark dimensions and write characters are developed. According to the different parameters of steel truss members, parametric drawing and symbol annotation sub-module for various members are created, parametric drawing for members of steel truss bridge is fulfilled, and then new concept and method for parametric drawing of steel truss bridge are proposed.

Bridge structure; Steel truss bridge; AutoCAD; ObjectARX; Parametric drawing

2014-04-03;

:2014-04-24

甘肃省自然科学基金(1212RJZA042);甘肃省省级教学团队基金资助(101004)

朱宗喜(1987—),男,硕士研究生,E-mail:441005644@qq.com。

1004-2954(2014)10-0078-05

U442

:A

10.13238/j.issn.1004-2954.2014.10.019

猜你喜欢
桁梁线型杆件
变化环境下考虑线型不确定性的水文设计值估算分析
湘潭高月塘大桥施工线型监控与合拢策略研究
考虑节点偏差、杆件缺陷与偏心的单层三向柱面网壳稳定性研究
卸载程度对铆接钢桁梁桥加固效果的影响
孟加拉帕德玛大桥大跨度连续钢桁梁架设技术
基于临时支撑结构的杆件初弯曲对其轴压性能的影响
中心受压杆件的承载力计算方法
微流控法低温保护剂添加及去除线型优化研究
AutoCAD中线型的开发定制技术
山区钢桁梁斜拉桥施工期抖振时域分析