APP下载

基于ObjectARX实现自定义回旋线实体*

2013-09-20郑健龙闻德保

大地测量与地球动力学 2013年5期
关键词:计算精度绘制实体

杨 柳 郑健龙 闻德保

(长沙理工大学道路结构与材料交通行业重点实验室,长沙 410004)

基于ObjectARX实现自定义回旋线实体*

杨 柳 郑健龙 闻德保

(长沙理工大学道路结构与材料交通行业重点实验室,长沙 410004)

为解决在AutoCAD中只能用短直线拟合表示回旋线、计算和绘制效率低、不能实现修改和查询等问题,采用改进的级数展开积分法保证计算精度和效率;运用ObjectARX自定义实体和面向对象编程技术,从曲线基类派生自定义回旋线类;论述了自定义回旋线的绘制、修改、查询、存储和拖动的程序实现方法,讨论了精度控制方法。实验结果表明,该方法能高效的开发自定义回旋线程序,解决短直线拟合所产生的问题,实现面向图形的设计。

缓和曲线;回旋线;ObjectARX;ObjectDBX;AutoCAD

1 引言

道路平面线形由直线、圆曲线、缓和曲线三要素组成,缓和曲线是设置在直线与圆曲线之间或半径相差较大的两个转向相同的圆曲线之间的一种曲率连续变化的曲线,有回旋线、n次抛物线(n≥3)、双纽线和正弦型曲线等多种形式,国外采用回旋线居多,国内设计规范也采用回旋线[1]。AutoCAD未提供回旋线实体,只能用短直线组成的多段线拟合表示,分段计算绘制工作量大,需用专业软件辅助完成。拟合线仅模拟显示回旋线的几何形状,几何数据保存在扩展数据[2]或外部文件中,与图形是分离的,脱离专业软件就无法查询,对拟合线进行延伸、缩放、圆角等修改操作时,被当作普通多段线处理而得到错误的结果。由于不能对回旋线实现面向图形对象的设计,限制了AutoCAD在道路勘测设计领域的应用。实体是AutoCAD中所有具有图形表示的数据库对象的统称,ObjectARX(AutoCAD Runtime eXtension)二次开发技术提供了自定义实体功能,可解决工程中的特殊图形和数据问题。文献[3]研究了用ObjectARX技术开发三维参数化管线建模程序的方法。文献[4]研究了用于地下管线数据采集的自定义管线和节点,将几何图形和标注融合为一个实体。文献[5]研究了基于导线法的自定义道路平面设计线,实现了交点拖动。本文较全面地研究自定义回旋线的实现方法,让回旋线与直线、圆弧一样成为AutoCAD自有实体,系统地解决计算、绘制、修改、查询和存储问题。

2 回旋线的计算方法

2.1 标准回旋线的数值计算

1)微分近似计算法

用等长的微分单元Δl累积计算坐标,计算公式为:

式中ln=nΔl,x0=0,n=0,1,2,3…,对于y坐标只需将公式中的余弦换成正弦。Δl越小则误差越小,但会降低计算效率。由于每步递推计算都存在误差,随着ln增大,累积误差也增大,坐标值逐渐偏离真实回旋线。该方法的计算公式简洁,但不能进行误差估计,无法确定能兼顾计算精度和效率的Δl值。

图1 标准回旋线计算示意图Fig.1 Calculation chart of standard clothoid

2)级数展开积分法

用泰勒级数展开cosβ和sinβ,通过积分整理得到坐标的参数方程通式为:

手工计算一般只截取公式前两项或三项,但对于大参数、大转角和小半径的回旋线,要截取更多项以保证截断误差满足精度要求。传统的参数方程用长度l作为参数,而用缓和曲线角β作为参数,计算公式更加简洁,多项式的次数更小,且由于β≪l,用计算机计算时截取高次项也不会产生大数溢出[6]。

相对方法1),方法2)计算坐标没有累积误差,其余项通式能根据项数准确估计截断误差,或给定精度值确定截取项数,保证坐标满足精度要求,同时能避免取项过多降低效率。

2.2 非标准回旋线的处理

不满足起点曲率为0且左偏的回旋线统称为非标准回旋线。回旋线的端点曲率必须与相邻线元端点曲率相同,当回旋线连接直线和圆曲线时称为完整回旋线,连接同向圆曲线时称为不完整回旋线。根据起终点半径大小关系和偏转方向,可以将回旋线分为四类(表1),先确定第1类的计算方法。

表1 各类回旋线的对称变换Tab.1 Symmetric transformation of various clothoid

见图2,将不完整回旋线用虚线延长至曲率零点,作为完整回旋线处理[7],建立与图1相同的局部坐标系,回旋线位于第一象限,起点与坐标系原点不再重合,计算公式及参数的含义都与标准回旋线相同。如果不延长回旋线,采用起点作为原点,起点切向作为轴,则各参数的含义发生了改变,使计算变得复杂。对其余三类回旋线,采用与第1类相同的坐标系,先计算坐标绝对值,然后根据对称关系确定坐标正负。

图2 非标准回旋线的坐标系Fig.2 Coordinate system of non-standard clothoid

2.3 几何变换

3 ObjectARX自定义实体方法

AutoCAD软件提供了 ObjectARX、LISP、COM和.net四种二次开发接口,其中ObjectARX开发包提供了面向对象的C++编程接口,其类库采用标准C++形式,支持定制和扩展AutoCAD功能,能直接访问AutoCAD数据库、图形系统和自定义命令,具有功能强大、运行效率高的优势,但对编程人员要求高[3-5]。自定义实体是ObjectARX开发接口特有的功能。

自定义实体实现原理见图3。ObjectDBX(Data-Base eXtension)是独立于AutoCAD的ObjectARX子集,包含多个动态链接库。ObjectDBX库与Object-ARX库共享大多数相同的C++代码,两者最大的区别是DBX程序可脱离AutoCAD运行。ARX程序完成自定义命令、实现对话框、处理提示、创建图形、设置图形属性、提取图形数据等用户接口功能[9,10]。DBX程序完成自定义实体的绘制、修改、查询、存储等数据库功能。

图3 自定义实体实现原理Fig.3 Implementation principle of custom entity

图4展现了AutoCAD数据库对象的层次关系。AcDbObject是所有数据库常驻对象的基类。AcD-bEntity是所有实体的基类。通常将二次开发时派生自AcDbEntity及其子类的类称为自定义实体类。AcDbCurve从AcDbEntity派生,是所有线形实体的基类,它提供了对曲线进行操作和查询的通用函数,曲线能在参数空间或笛卡尔坐标空间定义,曲线函数能转换点对应的参数值与坐标值。从AcDbCurve派生回旋线类AcDbClothoid,可共享基类的功能,开发时只需专注于回旋线的特性,最大限度地减轻了工作量。几何计算类 AcGePoint2d、AcGeVector2d、AcGeMatrix2d提供了点、向量和矩阵运算的各种操作。AcDbClothoid的数据成员主要包括:回旋线参数、偏转方向、起终点曲率半径、起终点缓和曲线角、起终点坐标和切线方向。

图4 数据库对象层次关系Fig.4 Hierarchical relationship of database objects

4 自定义回旋线的数据库实现

4.1 绘制

AutoCAD通过绘图原语来绘制矢量图形,几何图形接口类AcGiGeometry提供了 circularArc、polyline、ray、text等绘图原语函数,它们是最低级的绘图指令,用于绘制圆弧、多段线、射线、文字等。曲线都要分解成短矢量才能在显示器上显示,称为分格处理。回旋线经过分格处理后,用polyline函数绘制。为了兼顾显示精度和效率,需要用一条具有最少段数但看上去光滑的多段线来表示回旋线,当短矢量与回旋线之间的最大偏差小于一个像素时,曲线看上去便是光滑的。以显示设备的像素尺寸作为偏差控制值,便可计算出分格处理的最少段数,使自定义实体和自有实体的显示精度保持一致。需重载worldDraw和viewportDraw函数实现绘制功能,其中worldDraw函数用来生成跟视图无关的图形,由系统自动调整图形在所有活动视区中的显示。viewport-Draw则根据不同视图生成不同图形,当视图改变时,它自动将本视区图形调整到正确的显示状态。

4.2 修改和查询

表2 修改及查询功能的实现Tab.2 Implementation of modification and query

4.3 存储

数据存储有DWG和DXF两种文件格式。DWG文件是AutoCAD专有的数据文件,数据格式是保密的。DXF文件是图形文件的 ASCII或二进制表示形式,数据格式是公开的,它用于在AutoCAD与其他应用程序之间共享图形数据。重载dwgOut-Fields和dwgInFields函数,用DWG文档类AcDbD-wgFiler的writeItem和readItem函数实现DWG格式下回旋线数据的保存和读入。类似地,DXF格式下应重载dxfOutFields和dxfInFields函数,用 DXF文档类AcDbDxfFiler的对应函数实现。两者的区别在于,DXF格式下写出和读入数据必须明确给出数据的DXF组码值[13],数据精度可以人为指定,而DWG格式下必须以相同的顺序对数据进行写和读,否则会出现数据混乱,其数据精度由系统确定。无论哪种格式,都必须完整的写出和读入 AcDb-Clothoid对象的有效数据成员,避免数据残缺。

4.4 动态拖动

为实现回旋线绘制和修改的动态拖动效果,必须从动态拖动类AcEdJig派生回旋线拖动类(将它命名为 AcEdClothoidJig),并重载 sampler(获取角度、距离和点等几何值)、update(根据新几何值更新回旋线)、entity(返回需要更新的回旋线的指针)这三个函数。drag函数自动循环调用上述函数实现动态拖动(图5)。获取拖动事件后,在sampler函数中调用用户输入函数获取几何值并检查是否有变化,若有变化,判断是否需要更新拖动图像,若几何值不合理则不更新,否则按新几何值计算并更新。拖动成功结束后,应调用append函数将新回旋线加入图形数据库。

图5 动态拖动流程图Fig.5 Flow chart of dynamic drag

4.5 精度控制

回旋线的几何计算精度与图形显示精度是不相关的,应分别控制。AutoCAD的点和向量的计算精度为10-10,回旋线应与之一致,用余项通式可算出参数方程应截取的项数。实现动态拖动时,高精度会增加计算量导致图像显示不连续,适当降低计算精度,能提高效率保证拖动连续性。回旋线的图形显示精度应与圆弧、椭圆等自有曲线保持一致,增大精度会增加重生成图形的时间,精度过低会使回旋线显示不光滑影响视觉效果,可根据使用需求用VIEWRES命令设置显示精度。

5 示例

基于AutoCAD 2012平台和Microsoft Visual Studio2008开发环境,用ObjectARX 2012开发程序实现了自定义回旋线功能。图6展示了程序绘制的不同参数值的回旋线,均能光滑显示。图7中的拟合线是按照0.5个长度单位分段的多段线,执行EXTEND(延伸)命令时,拟合线沿端点切线方向直线延伸,延伸后得到新多段线,不再表示回旋线,而自定义回旋线按照几何形状延伸,并生成新回旋线。通过LIST(列表显示)或PROPERTIES(特性)命令能查询自定义回旋线的几何信息,并可直接在特性对话框中修改数据并更新回旋线图形,而拟合多段线本身并不包含任何回旋线信息,只能通过以上命令查询和修改各顶点坐标。

图6 不同参数值的回旋线Fig.6 Clothoid with different parameter values

图7 延伸对比Fig.7 Extension comparison

6 讨论与结论

级数展开积分法相对于微分近似计算法具有明显优势,能确定满足精度要求的最少计算项,兼顾计算精度和效率。将不完整回旋线延长为完整回旋线,并统一在标准回旋线的局部坐标系下计算,计算公式及参数含义不变,只需进行简单的对称变换。ObjectARX提供了完善的自定义实体功能,通过从曲线类派生回旋线类并重载虚函数,实现绘制、修改、查询、存储和动态拖动,ObjectARX封装的几何计算和图形绘制功能使开发工作量减少到最小程度。实现过程中要注意以下几点:1)计算中不能混淆局部坐标与全局坐标、到回旋线起点曲线长与到曲率零点曲线长;2)要正确运用C++指针,避免对内存进行非法操作;3)对数据库对象的打开和关闭、读和写等操作必须按要求进行。需要进一步研究以下问题:1)当缓和曲线角很大,需要截取的参数方程项次很高,在计算时还是可能产生大数溢出,应寻求合适的解决方法;2)求交点、切点、垂足、最近点和切线方向的算法优劣直接影响程序运行速度,特别是对于大转角的回旋线,应研究优化算法提高程序执行效率。

用多段线拟合回旋线,图形和数据是分离的,不能进行修改和查询。自定义回旋线实现了图形和数据的融合与相互驱动,避免了用多段线拟合的诸多问题,扩展了AutoCAD的曲线处理功能,实现了面向图形对象的设计,可广泛应用于道路缓和曲线测设。

1 桂岚.道路勘测设计[M].长沙:中南大学出版社,2009.(Gui Lan.Road survey and design[M].Changsha:Central South University Press,2009)

2 刘德儿,等.城市基础地理数据库更新机制研究[J].大地测量及地球动力学,2010,(1):154-158.(Liu Deer,et al.Study on updating city’s fundamental geodatabase[J].Journal of Geodesy and Geodynamics,2010,(1):154-158)

3 向巍,郭际明.基于ObjectARX技术的管道参数化建模[J].大地测量及地球动力学,2011,(2):99-101.(Xiang Wei and Guo Jiming.Parametrization modeling of pipe based on ObjectARX[J].Journal of Geodesy and Geodynamics,2011,(2):99-101)

4 王乾,李刚,赵海民.ObjectARX自定义实体的地下管线前端数据采集系统开发[J].测绘科学,2010,35(5):214 -216.(Wang Qian,Li Gang and Zhao Haimin.Design of underground pipeline front facing data acquisition system on the basis of custom entity of ObjectARX[J].Science of Surveying and Mapping,2010,35(5):214-216)

5 彭利辉,蒲浩.道路平面线形交互式设计方法研究[J].铁路计算机应用,2006,15(8):7-9.(Peng Lihui and Pu Hao.Study on interactive design methods for road horizontal alignment[J].Railway Computer Application,2006,15(8):7-9)

6 陈飞,凌九忠.提高高等级公路缓和曲线计算精度的方法[J].东南大学学报(自然科学版),2000,30(6):81-86.(Chen Fei and Ling Jiuzhong.A method of improving the calculation accuracy of transition curve in highway alignment design[J].Journal of Southeast University:Natural Science Edition,2000,30(6):81-86)

7 闻道秋,贡云兰.不完全缓和曲线的计算[J].公路交通科技,2002,19(1):37-39.(Wen Daoqiu and Gong Yunlan.Calculation of incomplete spiral curve[J].Journal of Highway and Transportation Research and Development,2002,19(1):37-39)

8 Hearn D,Baker M P.计算机图形学[M].蔡士杰,宋继强,蔡敏译.北京:电子工业出版社,2010.(Hearn D and Baker M P.Computer graphics[M].Translated by Cai Shijie,Song Jiqiang and Cai Min.Beijing:Publishing House of Electronics Industry,2010)

9 张丽萍.基于铁路选线CAD系统的图形接口方法与交互技术[J].兰州大学学报(自然科学版),2011,47(2):117 - 121.(Zhang Liping.Graphic interface method and interactive graphics technology based on railway line selection CAD system[J].Journal of Lanzhou University:Natural Sciences,2011,47(2):117-121)

10 袁媛.基于MFC类设计ObjectARX应用程序界面[J].中南大学学报(自然科学版),2004,35(3):448-452.(Yuan Yuan.MFC sequence-based design for ObjectARX application interface[J].Journal of Central South University(Science and Technology),2004,35(3):448-452)

11 邵俊昌,李旭东.AutoCAD ObjectARX 2000开发技术指南[M].北京:电子工业出版社,2000.(Shao Junchang and Li Xudong.AutoCAD ObjectARX 2000 development guide[M].Beijing:Publishing House of Electronics of Industry,2000)

12 须鼎兴,陈继山.高等级线路缓和曲线边线性质及计算公式[J].同济大学学报,2003,31(1):56-59.(Xu Dingxing and Chen Jishan.Formula of calculating transition curve for higher grade highway[J].Journal of Tongji University,2003,31(1):56-59)

13 姚宜斌,孔建.基于DXF文件的图件转换方法研究及程序实现[J].大地测量及地球动力学,2011,(1):117 -121.(Yao Yibin and Kong Jian.Research on graphic conversion method and program implementation based on DXF file[J].Journal of Geodesy and Geodynamics,2011,(1):117-121)

IMPLEMENTATION OF CUSTOM ENTITY FOR CLOTHOID BASED ON OBJECTARX

Yang Liu,Zheng Jianlong and Wen Debao
(Key Laboratory of Road Structure and Material of Ministry of Transport,Changsha University of Science and Technology,Changsha410004)

In AutoCAD,clothoid can be fitted only by short straight lines,which cannot be modified and queried,and this method is inefficient in calculation and drawing.The series expansion integration method is improved to ensure the accuracy and efficiency of calculation.With the techniques of ObjectARX custom entity and object-oriented programming,the custom clothoid class is derived from the curve base class.The programming methods for drawing,modifying,querying,storing and dragging of the custom clothoid are stressed and the accuracy control method is discussed.The experimental results show that the above methods can develop the programs for custom clothoid efficiently,which can solve the problems caused by fitting and implement the graphic-oriented design.

transition curve;clothoid;ObjectARX;ObjectDBX;AutoCAD

U412.34;TB237

A

1671-5942(2013)05-00110-06

2012-10-15

国家自然科学基金(41174001);长沙理工大学道路结构与材料交通行业重点实验室开放基金(KFJ090207)

杨柳,男,1980年生,讲师,硕士,从事道路和交通CAD研究.E-mail:yangliuemail@163.com

猜你喜欢

计算精度绘制实体
前海自贸区:金融服务实体
超萌小鹿课程表
放学后
基于SHIPFLOW软件的某集装箱船的阻力计算分析
实体的可感部分与实体——兼论亚里士多德分析实体的两种模式
两会进行时:紧扣实体经济“钉钉子”
振兴实体经济地方如何“钉钉子”
在转变中绘制新蓝图
钢箱计算失效应变的冲击试验
VBA在宗地图绘制中的应用