基于AutoCAD的断面图批量绘制系统设计与实现
2014-04-18柯广恒
柯广恒,李 莉
(1.长江航道测量中心,湖北 武汉 430000)
基于AutoCAD的断面图批量绘制系统设计与实现
柯广恒1,李 莉1
(1.长江航道测量中心,湖北 武汉 430000)
介绍了基于AutoCAD的断面图批量绘制系统的设计思路,实现了从读取CAD数据文件,到建立DEM三角网,再到计算采样点水深,最后在指定位置自动化批量绘制标准格式断面图的一体化解决方案,大幅度减少了人工操作,提高了断面图绘制效率。
AutoCAD;断面图;批量绘制
传统的断面图绘制方法是采用图纸上量取,然后读取数据并手工绘制,或使用软件先读取水深数据,再通过水深及距离的对应关系绘制断面图。在实际测量中,观测点位和设计断面线不可避免地存在一定偏差,需要对所测水深数据进行手动过滤或修正,整个断面图绘制过程复杂,重复操作多,生产效率低下,难以满足长江航道生产用图的需要。本文提出基于AutoCAD的断面图批量绘制系统的设计思路与实现方案,提高了断面图绘制效率。
1 总体思路
Autodesk公司的AutoCAD软件数据编辑功能强大,许多测绘生产单位都把它作为数字化测图和绘图的主要工具。AutoCAD采用文件方式存储地理空间实体位置数据,数据的维护和更新比较复杂。本文提出了从读取CAD数据文件,到建立DEM三角网,再到计算采样点水深,最后在指定位置自动化批量绘制标准格式断面图的一体化解决方案,并基于VC++程序集成开发环境,通过ObjectARX二次开发函数库进行系统开发与研制[1]。总体架构设计如图1所示。
2 关键技术研究
2.1 水深点对象的提取
在AutoCAD中,存在多种形式表示的水深数据,例如点对象、文字对象、块对象、复合对象等。本系统的数据源是文字形式的水深数据,即水深数据的属性信息中并不含有水深值,而是用文本信息描述水深,同时用文本中特殊字符表示水深点真实位置(如小数点)。因此,通过ObjectARX得到的文本位置属性并非直接的水深点真实位置,需要对其进行换算修正。
提取文字对象的第一步是对当前AutoCAD中所有对象进行过滤,仅保留文本对象。获取到全部的文本对象水深数据后,逐个提取水深坐标及相应的水深值。本文以一个文字形式的水深数据为例,描述对其提取水深信息的方法。
图1 系统总体架构
图2 文字形式水深数据提取示意图
如图2所示,存在一个文本形式表示的水深点,水深值为13.8,坐标为小数点所在位置。H表示字高,W表示字宽,P1表示文字左下角,即通过ObjectARX获取到文本水深对象的坐标,P2表示小数点所在位置,P3为垂足与P1和P2构成直角三角形。P2(x,y)即为需要的水深点平面坐标。研究得出:
其中,P1P3表示点P1到点P3的距离,n表示小数点前面的数字个数,k1和k2为与字体、字宽相对应的固定经验系数。
其中, k3为与字体、字高相对应的固定经验系数。由公式(1)和(2)可以求得:
进而求得P2(x,y):
对于P2点对应的水深数值,只需用函数“tstof”对文本进行简单转换即可。
2.2 离散水深点的三角网构建
经过提取过滤得到的水深点信息是离散的,仅含有平面坐标位置和水深信息的独立点,它们之间没有关联信息。为了能利用这些离散点拟合指定断面的水下地形情况,需要对其建立不规则三角网,即TIN(triangulated irregular network)。
本系统采用地形拟合方面运用的较普遍的Delaunay三角网,采用Lawson算法实现。其基本步骤为:
1)构造一个超级三角形,包含所有散点,放入三角形链表;
2)将点集中的散点依次插入,在三角形链表中找出其外接圆包含插入点的三角形(称为该点的影响三角形),删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,从而完成一个点在Delaunay三角形链表中的插入。如图3所示。
3)根据优化准则对局部新形成的三角形进行优化,将形成的三角形放入Delaunay三角形链表;
4)循环执行上述第2步,直到所有散点插入完毕。
经过实际测试发现,在ObjectARX开发环境下,栈内存由AutoCAD控制,不能自定义,一般可支持10 000个水深点构建Delaunay三角网而不会发生栈溢出情况。如果需要支持更大数量的离散点建网,需要划分区域分割处理,最后组合并网。本文采用缓冲区方案解决该问题,即针对每条断面线,扩展生成足够范围的缓冲区,将对此断面线产生影响的离散水深点全部囊括在缓冲区内。最终,仅需要对缓冲区内的离散水深点进行三角网构建即可满足断面线地形拟合的需要。通过这个方案,一方面解决了过多层次迭代造成栈溢出的问题,另一方面大幅提高了计算速度。如图4所示,图4a中间的线段为设定的断面线,矩形框为通过该断面线扩展得到的缓冲区范围。在计算三角网的时候,仅将纳入该范围内的水深点进行考虑。图4b为缓冲区内离散水深点构建好的三角网效果。
图3 Lawson算法关键步骤
图4 缓冲区示意图
2.3 断面线上水深数据拟合
对于已经确定的断面线,根据设定好的采样间隔,可以确定每个采样点的坐标。将采样点坐标纳入三角网,即可拟合出它的水深。
1)确认水深点所属三角形
遍历三角网中所有的三角形,采用经典的射线法判断水深点是否在三角形内。其积分思路是,设三角形顶点分别为A、B、C,待判断点为P,在右侧无穷远的地方找一点Q,作射线PQ,计算PQ和线段AB、BC、CA的交点个数,个数为奇数则P在三角形内,为偶数则在三角形外。为了避免PQ通过A或B或C时产生误判,需要减去重合的交点。该方法可以扩展到任意多边形,且在实际计算中,为了便于计算一般会让PQ为水平线。
图5 点与多边形拓扑关系判断示意图
图5a中,水平射线与多边形各边累计有1个(奇数)交点,因此在多边形内;图5b中,水平射线与多边形各边累计有0个(偶数)交点,因此在多边形外;图5c中,水平射线与多边形各边累计有2个(偶数)交点,因此在多边形外;图5d中,水平射线与多边形各边累计有2个交点,但是有一个重复,只能算作1个(奇数)交点,因此在多边形内。
通过这个方法,可以查看采样点是否在某个三角形内,如果在则认为该采样点隶属于这个三角形。如果采样点不在任何三角形内,则放宽隶属检测条件,不再要求点必须在三角形内,而是通过计算采样点与各个三角形几何中心的距离,来找出几何中心与采样点最近的三角形。同时,认为该采样点隶属于这个三角形。
2)根据三角形确定的平面拟合计算水深
经过步骤1)可以确定采样点P对应的三角形ABC。为方便描述,设点A的坐标为(Ax,Ay,Az),点B的坐标为(Bx,By,Bz),点C的坐标为(Cx,Cy,Cz),点P的坐标为(Px,Py,Pz),其中Pz为待求水深值,其他为已知。
利用空间解析几何的方法,推导出Pz的计算公式如下:
2.4 断面图绘制
单个断面图主要分成坐标轴、断面线、注记三个部分。为了便于查看,坐标轴用纵横的网格线表示,根据指定的比例尺来调整间隔。格网范围中,横向范围和断面线长度相关,纵向范围和水深极值有关;断面线用折线来表示,将采样点展点到断面图上后,用折线连接起来即可,无需拟合;注记用于描述断面图的名称、横轴纵轴含义、比例尺等信息。单张断面图实例如图6所示。
图6 单张断面图示例
在单张断面图绘制基础上,遍历所有的断面线成果数据,然后循环绘制,即可批量绘制断面图。
3 结 语
断面图批量自动绘制软件可方便地解析AutoCAD中的水深点数据,按照指定的断面位置分析计算水下地形情况,自动化批量绘制所需的水道断面图。已广泛应用于长江航道日常数据生产以及其他相关的数据处理中。软件处理速度快,使用方便,大大提高了数据成果的转换速度和再利用率,显著提高了工作效率。
[1] 李长勋.AutoCAD ObjectARX程序开发技术[M].北京:国防工业出版社, 2005
[2] 王强,郑逢斌,乔保军,等.一种改进的Delaunay三角网生成算法[J].计算机应用与软件,2010, 27(8):138-140
[3] 汤泉,刘铮. 构建Delaunay三角网的改进算法[J].计算机应用,2007(增刊):158-159
[4] 余杰,吕品,郑昌文.Delaunay三角网构建方法比较研究[J].中国图像图形学报,2010, 15(8):1 158-1 164
[5] 马春秋.利用CASS成图系统绘制河道断面图的方法[J].矿山测量,2010(1):22-23
[6] 李晓东,郭恒茂.浅淡利用CASS7.0软件绘制地形图和断面图[J].矿山测量,2010(9):24-26
[7] 沈诚学.GPS RTK技术在水下地形测量中的应用[J].甘肃水利水电技术,2008,44(5):327-331
P208
B
1672-4623(2014)03-0162-03
10.11709/j.issn.1672-4623.2014.03.055
柯广恒,硕士,主要从事地理信息服务研发工作。
2012-12-27。