周俊
(西安市勘察测绘院,陕西西安 710054)
基于ObjectARX的道路纵断面图绘制
周俊∗
(西安市勘察测绘院,陕西西安 710054)
利用AutoCAD提供的ObjectARX开发环境以及C++语言,编写道路纵断面图自动绘制程序,提高了工作效率。
ObjectARX;道路纵断面
在城市工程测量中,时常会接触道路纵断面图的测绘。在外业测量中,根据用户要求沿路中线按一定距离采集点的高程以及路中桩的高程。内业利用AutoCAD绘图,在没有专业设计软件辅助的情况下,绘制道路纵断面图是很繁琐的事,需要进行大量的、重复的操作,既降低了工作效率又容易出错。利用AutoCAD提供的ObjectARX开发环境编写自动绘图程序,可以快速而准确地绘出道路纵断面图。
ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。用Object-ARX开发的CAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效实用等优点,并且支持MFC(Microsoft Fundation Class),能简洁并高效地实现许多复杂功能。
ObjectARX的类库构成有以下几项:
(1)AcRx库,提供系统层次的类,用于动态链接库的初始化以及运行时刻类的注册和标识。
(2)AcEd库,提供一组用于定义和注册新的Auto-CAD命令的类。
(3)AcDb库,提供一组用于存取AutoCAD图形数据库结构的类。
(4)AcGi库,提供绘制AutoCAD实体图形界面的类。
(5)AcGe库,提供的实用类用于执行二维和三维几何操作。
3.1 AutoCAD数据库
AutoCAD基本的数据库对象是实体、符号表和字典。实体是在AutoCAD图内部表示图的一种特殊数据库对象,用户可以在屏幕上看见实体并能对其进行操作。符号表和词典是用于存储数据库对象的容器,这两个容器对象都映射一个符号名到一个数据库对象。AutoCAD数据库主要结构如图1所示,实体包含在块表记录中,因此要创建一个图形对象,需要遵循下面的基本步骤:
(1)确定要创建对象的图形数据库;
(2)获得图形数据库的块表;
(3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记录中。
(4)创建实体类的一个对象,将该对象附加到特定的块表记录中。
图1 图形数据库的结构
3.2 相关类的设计
利用面向对象的思想编写相关类文件来细分绘图的工作,如创建实体,修改实体属性以及相关计算。本文程序编写了3个类文件:CCreateEnt、CModifyEnt和CCalculation。CCreateEnt类用于创建实体,如直线、文字、图层等。CModifyEnt类的作用是修改实体的部分属性,如颜色、线型、图层等。这里给出CCreateEnt类中新建图层的函数CreateLayer的代码。
3.3 断面图绘制的算法设计
绘制道路纵断面图的数据信息是沿路中线上的点距起点中桩的里程和高程。断面图横向反映里程信息,纵向反映高程信息,相邻两点之间连线,形成一条不规则的折线,反映了沿着路中线地面的起伏变化。外业采集的数据是点的平面坐标和高程,程序就是利用这些基本数据信息绘制出图形:由平面坐标得到各点距起点的里程,由每个点高程值确定所需要刻画的高程值范围。
在用CAD绘图时,将代表不同意义的实体放到不同的图层中是个很好的习惯。因此,程序将整个纵断面图分成4个图层来创建:折线图层、格网图层、细分格网图层和其他图层。程序的算法如图2所示。
图2 程序流程图
其中数据文本为txt格式,每一行代表一个点的数据信息,如某点A的坐标和高程分别为(1 245.386,2 469.533)和471.65 m,则该点在坐标文件中的格式为“A,1245.386,2469.533,471.65”。
程序部分代码如下:
编译运行程序,生成ARX文件ZhJzdtn.ARX,加载到CAD后即可运用该程序。
为验证程序的有效性,本文利用在西安市南郊某规划路采集的纵断面测量数据生成纵断面图。该工程用RTK测量,以50 m为间隔采集路中线上点的高程以及路中桩的高程,平面坐标以理论值给出,数据结果如图3所示。
图3 纵断数据文本
启动AutoCAD,加载ARX程序,如图4所示。然后在CAD命令行输入调用该程序的自定义命令“ZDT”,出现选择数据文本的对话框(如图5)。按“打开”后,CAD命令行会提示用户点选图表生成位置,在CAD图形窗口任意位置点取一点,即可生成道路纵断面图如图6所示。
图4 加载ZhJzdtn.ARX
图5 选择数据文件对话框
图6 生成道路纵断面图
所生成的道路纵断面图反映了沿路中线道路的起伏变化,符合本院的工作要求,无需再作过多的整饰,即可以作为提供给用户的成果资料。
本文利用ObjectARX开发环境所设计的程序,可以直接利用外业采集的数据自动生成道路纵断面图,不仅准确有效,符合工作要求,而且节省了工作人员的体力和脑力,提高了工作效率。
[1]张帆.ObjectARX开发实例教程电子图书[M].2007
[2]Charles McAuley著.李世国等译.AutoCAD2000 Object-ARX编程指南[M].北京:机械出版社,2000
[3]王育坚.Visual C++面向对象编程教程[M].北京:清华大学出版社,2003
Drawing Vertical Section of Road Based on ObjectARX
Zhou Jun
(Xi’an Institute of Surveying Mapping&Geotechnical Investigation,Xi’an 710054,China)
In order to improve work efficiency,a program based on ObjectARX provided by AutoCAD and C++Language has been compiled to automatic draw road profile.
ObjectARX;road profile
1672-8262(2010)04-139-04
P209
B
2009—12—20
周俊(1985—),男,硕士,主要从事工程测量工作。