基于铁路选线CAD系统的图形接口方法与交互技术

时间:2022-11-22 01:07:49 土木工程毕业论文 我要投稿
  • 相关推荐

基于铁路选线CAD系统的图形接口方法与交互技术

  摘要:运用Visual c++ 2005和0bjeetARX 2008开发工具,探讨图形实体的创建与实体属性的设置方法。

  利用结果缓冲区、DXF接口方法和ObjectARX类函数,实现图形数据自动提取和图形交互功能。以此为基础开发的线路设计系统,在一些设计单位完成了多项线路工程设计,取得良好的经济效益。

  关键词:计算机辅助设计;铁路选线;ObjeetARX开发工具;图形交换文件

  随着计算机图形学理论和技术的迅猛发展,针对各行备业出现了多种计算机绘图和计算机辅助设计CAD(computer aided design)的软件和开发工具,为工程设计人员提供了现代化的设计手段,提高了设计效率和绘图质量,使设计图纸更加规范化。

  20世纪90年代利用AutoCAD等软件的交互式绘图,已经为工程技术和科技工作者绘图提供了很大的便利,但绘图速度和效率仍不能满足设计人员的要求。为此,利用面向对象的程序设计方法,采用绘图软件的开发工具包,开发人工智能和自动绘图的计算机辅助设计软件,已成为设计自动化的发展趋势。

  近年来,土木、建筑、机械制造与设计行业在计算机辅助设计方面的研究工作取得了重要成果。

  随着航测和遥感技术的发展,出现了航测地形图、遥感影像图及数字地面模型等数字和图像产品,为铁路选线设计自动化和可视化奠定了基础。本文基于AutoCAD 2008绘图平台和ObjectARX 2008开发工具,运用Visual c++ 2005语言,探讨铁路选线设计图形接口方法和交互技术,通过对AutoCAD图形数据库的操作,在前台进行线路的平、纵断面的交互设计,在后台自动获取并存储设计数据,最后调用设计数据自动绘制线路平面、纵断面设计图。这种铁路选线CAD系统的实现,可为设计部门提供实用、快捷、方便的现代化设计工具,大大提高设计效率和图面质量。

  1、图形接口方法

  基于Visual C++ 2005和ObjectARX的图形接口的建立是图形生成的基础。在线路设计图中包括几何属性和非几何属性,图形实体有直线、圆、圆弧及文字等,图形非几何属性有图层、颜色、线型等。所以,建立生成图形的基本图元和属性设置接口,是图形生成的前提。

  1.1 图形接口的建立

  1.1.1 结果缓冲区接口方法

  (1)结果缓冲区结构在AutoCAD中,实体数据描述表存储在结果缓冲区中,结果缓冲区的结构为:

  struct resbuf{struct resbuf rbnext;\\~向下一个结果缓冲区的指针变量short restype;\\用来指明resval值的类型union ads U val resval;\\“结果缓冲区”节点值的resval变量);resval变量是个同位union ads U val类型,成员变量有ads— real rreal,rpoint[3];short rint;charrstring等。结果缓冲区的restype字段,用来指明返回值resval的类型。ADS函数处理实体时,其返回结果缓冲区的restype字段常常是DXF(drawingexchange file)实体代码。

  (2)利用结果缓冲区创建实体的方法定义结果缓冲区结构:struct resbuf entlist;创建实体数据描述表:不同的实体数据描述表的参数不同,以下为直线、圆和文字的数据描述表的构建方法,其他实体的数据描述表也可依此方法建立?1.entlist— ads— buildlist(RTDXF0,“LINE”,10,S—tartp,11,endp,RTNONE);entlist= ads— buildlist(RTDXF0,“CIRCLE”,10,centerp,40,r,62,color,RTNONE);将实体描述表添加到结果缓冲区中:status—ads— — entmake(entlist);释放结果缓冲区:ads relrb(entlist);1.1.2 用创建类对象的方法建立接口一幅AutoCAD的图形是存储在一个数据库中的对象的集合。创建实体的过程就是向数据库中添加对象的过程。不同的对象有其对应的子类,如AcDbLine,AcDbCircle,AcDbArc,AcDb2dPolyline,AcDbText等。以AcDb2dPolyline对象的创建方法为例,建立POLYLINE实体接口函数的方法如下:

  图形接口定义:

  void createPolyline(AcGePoint3dArray ptArr,double width,int color,char layer)创建实体对象:

  AcDb2dPolyline pNewPline=new AcDb2dPoly—line(AcDb::k2dSimplePoly,ptArr,0.0,Adesk::kFalse,width,width,NULL);设置实体颜色和图层:pNewPline一>setColor—Index(color);pNewPline——>setLayer(1ayer);以读的方式打开当前图形数据库中的块表,建立指向块表的指针。

  acdbHostApplicationServices()——>workingData--base()->getSymbolTable(pBlockTable,AcDb::kForRead);以写的方式打开模型空间,将块表记录指针指向模型空间数据库。

  pBlockTable->getAt(ACDB—MODEL—SPACE,pBlockTableRecord,AcDb::kForWrite);将实体添加到图形数据库的块表记录中,返回对象标识。

  pBlockTableRecord——>appendAcDbEntity(pline·-ObjId,pNewPline);关闭块表指针、块表记录指针和对象指针。如关闭块表指针:pBlockTable->close()[ ];其他实体创建可依据上述方法实现。

  1.2 图形非几何特性设置为了便于图形管理和符合制图标准,在绘制设计图时需设置图形的非几何特性,主要包括图层、颜色、线型和线宽等。

  1.2.1 建立图层若不设置图层,则图形画在“0”层中。当建立图层时 可设置图层的颜色、线型及图层状态(关闭、打开,冻结等)等特性,将设计图中不同内容绘制在各自的图层中,便于图形管理。方法如下:

  (1)函数定义接口函数:AcDbObjectId addLayer(char layer.namell00],char linetype[100],int layer—color);

  (2)加载线型在当前工作空间中,加载标准线型库文件aca—diso.1in中的指定线型。acdbLoadLineTypeFne(hnetype,“…\\acadiso.1in”,pDb);

  (3)建立新的层表记录:AcDbLayerTableRe—cord pLayerTblRcd= new AcDbLayerTableRecord;

  (4)设置层名:pLayerTblRcd一>setName(1ayer—name);

  (5)设置图层颜色:pLayerTblRcd一>setColor(color);f61设置线型在线型表中获取线型标识:pLinetypeTbl一>getAt(1inetype,ltId);在层表记录中设置线型:pLayerTblRcd一>set—LinetypeObjectId(1tId);将层表记录添加到层表中:pLayerTbl一>add(pLayerId,pLayerTblRcd);(7)关闭层表指针,返回层表的ID[3].

  1.2.2 实体非几何特性设置实体的非几何特性包括所属的图层、显示的颜色、线型、线宽和线型比例等 设置方法如下:

  (1)当前图层设置在AutoCAD环境下,图形是画在当前层中,所以,在绘图时要先设置当前图层,方法为:pDb一>setClayer(pLayerld)。

  (2)设置线型比例在AutoCAD 的模型空间设置线型总体比例方法如下:打开当前数据库:AcDbDatabase pDb—acdbHostApplicationSerVices()一>workingDatabase();设置线型总体比例:pDb一>setLtsca1e(Ltscale)。

  (3)设置实体颜色:实体的颜色可与所在层不同,如果颜色值不是256(BYLAYER),则实体与它所在图层的颜色不一致。实体颜色的设置方法为:pEntity一>setCo1orIndexfnewColor)。

  (4)设置实体图层:如果一个实体已经指定了图层,那么当前数据库的图层值会被忽略。设置实体图层的方法为:pEntity一>setLayer(pLayerId)。

  2、图形信息的提取原理和方法

  2.1 图形信息及提取原理

  2.1.1 矢量图的主要内容

  (1)工程设计图中的几何实体包括:点、直线、圆和圆弧、多段线(POLYLINE)、文字、尺寸标注等,其几何属性有离散点的坐标,直线的端点坐标和线段的长度,圆的圆心坐标及半径,多段线(POLYLINE)的各顶点坐标、线段的长度和面积及文字的起点坐标等。

  (2)图形的非几何信息有图层、颜色、线型、线宽及层的状态等。

  2.1.2 实体信息提取原理利用结果缓冲区和DXF接口方法,结合Obje—ctARX工具的实体获取技术,可提取对象的坐标、图层、线型、颜色等信息。

  结果缓冲区用于存储实体信息,根据缓冲区变量restype的返回值,结合DXF组代码来判断组值的类型,实体信息分类如下:

  (1)DXF图形交换文件由7个节(Section)组成,每节由0组和其组值Section开始,中间是若干个组,每组由组代码和组值构成,节尾由0组和其组值ENDSEC组成。不同的组代码对应的组值可为字符串、整型数、浮点数等。

  (2)组代码是0 9的整数,则返回值类型为字符串(RTSTR),组值为实体名称、图层名和线型等。

  (3)组代码是10~19之间的整数时,返回值的类型为RT3DPOINT,这种返回值为点的坐标:adsreal rpoint~3],由此可获得图形中的散点坐标值。

  (4)组代码为38~59的整数时,其返回值的类型为RTREAL,其值为实型数,其中,组代码39的组值为厚度(thickness)、组代码40的组值为高度(如等高线的高程)、半径等,其他组代码的组值为角度等。

  (5)组代码是60~79的整数时,返回值为短整型RTSHORT,如颜色号码及对齐方式等。

  2.2 实体信息提取方法在AutoCAD模型空间中,图形为矢量图,各对象有其对应的子类,在DXF接口中,实体的几何与属性信息对应不同的组代码和组值,根据子类的不同可提取相应实体的几何和属性信息。多段线POLYLINE的子类为AcDbPolyline,DXF的组码为0,组值为POLYLINE,以多段线的顶点信息提取为例,说明对象信息提取的原理和方法如下:

  (1)获取图形实体运用ObjectARX开发工具中的acedSSGet(“a”,NULL,NULL,NULL,ads name all entities)函数获取图形数据实体,然后,用acedSSLength(ads_name aii entities,long entities count)函数获取选择集中的实体数目。

  (2)获取实体名称利用acedSSName(ads name all entities,longi,ads name entity)函数,获取all entities实体集合中第i个实体的名称并存放于参数entity中。

  (3)实体数据描述表在结果缓冲区中获取实体数据的描述表:struct resbuf entitybuf=ads— entget(entity)。

  获取结果缓冲区中所存储的entitybuf->restype为实体的DXF组代码,entitybuf->resva1.rstring为组值,组代码和组值分别为0和“POLYLINE”时,则该实体为P0n LINE.用acdbGetObjectId(AcDbObjectId plineObjIdads name entity)函数获取POLYLINE实体标识符,再用该标识符对POLYLINE实体进行遍历,获取顶点个数和坐标:pLine一>getPointAt(n,data—plineIn]),并将顶点坐标存人数据文件中【5】。

  3、图形交互技术在线路平面和纵断面设计线完成后,经常需要对线路平面图的交点或纵断面变坡点进行交互调整和修改,交互修改包括插入、删除和移动点等方式。此处采用结构、指针,链表、实体数据获取和操作等技术完成。

  (1)获取初始数据获取工作路径下的初始数据:设计标准、断前和断后里程、高程、绘图比例等。

  (2)建立纵断面坡度线的数据结构为了便于存储和操作坡度线的数据信息,坡度线的顶点结构体定义如下:struct podu{double k,X,h,h—Y,r;struct podu next;struct podu prior;}成员变量说明: 为变坡点连续里程,k 为变坡点X坐标,h是变坡点高程,h Y是变坡点Y坐标,r是竖曲线半径。

  (3)获取坡度线数据:先选择对象:ads entsel(“\n请选择坡段,然后根据需要移动变坡点:\n”,pd— line,p0);再获取实体标识:acdbGetObjectId(plineObjId,pd_ line);遍历实体PP—iterate(plineObjId);设置结构首地址podu:podu start.

  (4)判断所选多段线是否为坡度线根据已存储的设计坡段数据与所获取的多段线顶点链表数据比较,运用while(podu){}循环判断所选多段线是否为坡度线。若是坡度线,则进行插入操作。

  (5)首先判断该段坡度是否满足最大限坡的要求,若满足条件,则建立坡度线链表。根据坡长和坡度计算插入点的坐标,判断插入点在链表中的位置,再将该点插入坡度线链表中,然后将链表中的数据写入数据文件中,以备后用。

  (6)获取结果缓冲区中的实体选择集:ads SS—get(“X”,NULL,NULL,&ebl,ssname);测量选择集中的实体个数:ads— sslength(ssname,&ilast);在选择集中逐个删除实体:for(k:0;

  (7)重新生成坡度线根据重新生成的坡度线数据,利用坡度线绘图接口画出新的坡度线,接口函数如下:draw— pd(path—name—pd,n—dl,dl,h~scale,st—ic,orientation,hum—dg,dg—SZ,bz~ jj);

  4、应用实例运用以上图形接口方法和图形数据提取技术开发了铁路选线CAD系统,图1为该系统生成的一段铁路纵断面图[6].系统主要特点如下:

  (1)实现了线路平面和竖向设计可视化设计功能,由设计过程产生设计数据和设计文件,根据设计数据生成平面、纵断面和横断面图,改变了其他软件必须由人工输入设计数据而后产生设计图的做法,真正实现了计算机辅助设计的功能[7]_

  (2)针对选线中的地形图和数字地模(DEM),实现了数字地面模型形成与格式转换。

  (3)在平面和竖向设计过程中自动产生设计数据,实现了设计图和数据的联动、插入、移动、合并和删除等修改功能,实现了线路中的断链处理等功能

  5、结束语

  在计算机辅助设计中,软件平台和开发工具虽多种多样,但图形接口、交互技术、数据提取和存储是CAD开发的主要研究内容。本文采用VisualC++2005语言和强大的ObjectARX 2008二次开发工具,直接对图形数据库进行操作,结合铁路选线设计原理、过程和设计经验,开发了符合实际设计要求的选线设计CAD系统,解决了勘测设计的实际问题和难题,为勘测设计人员快速有效地实施设计思想提供了现代化的设计手段,极大地减轻了设计人员的劳动强度,提高了设计效率。

  参考文献

  [1]余承飞,方勇编。AutoCAD 2000二次开发技术(ObjectARX)[M1.北京:人民邮电出版社,1999:25-30.

  [2]老大中,赵占强。AutoCAD 2000 ARX二次开发实例精粹(ObjectARX)[M1.北京:国防工业出版社,2001:50-56.

  [3]程耀东,张丽萍,韩进,等。计算机绘图教程与二次开发方法fM】。兰州: 甘肃科技出版社,2009:525-533.

  [4]李世国。AutoCAD高级开发技术:ARX编程及应用【MI.北京:机械工业出版社,2001:50-56.

  [5]程耀东。基于ObjectARX 2007的地质断面自动填充方法fJJ.物探与物化,2010,34(5):681—685.

  [6]易思蓉。铁路选线设计(M1.成都:西南交通大学出版社,2005:75—124.

  [7]葛根荣。铁路选线三维联动可视化CAD系统的开发与应用{J】。铁道勘察,2005,31(4):I-3.

  [8]王卫东,蒋红斐。道路与铁道工程计算机辅助设计【M1.北京:机械工业出版社,2004:109-130.

【基于铁路选线CAD系统的图形接口方法与交互技术】相关文章:

基于web的异地并行设计与制造系统研究06-02

基于PLC的断路器型式试验系统设计03-10

基于MOSFET内阻的电流采样及相电流重构方法10-30

基于军网的雷达远程诊断技术研究08-10

基于J2EE的远动系统Web实时曲线的研究05-11

基于电话网络的热网远程控制系统设计05-11

探讨基于多种通信方式并存的配网自动化通信系统06-01

基于价值网理论的铁路多元经营物流企业经营模式研究06-04

分析基于三维扫描的特种设备管理系统设计论文05-26

基于分组技术的下一代光传送网05-29