周俊,彭勃
(西安市勘察测绘院,陕西西安 710054)
在测绘行业,AutoCAD已经成为主流的绘图软件。数字化地形图作为测绘基础资料,是测绘工作者工作中重要的参考资料。我院的数字化地形图成果并不是以AutoCAD格式保存的,在调用地形图数据之前,需将原有格式转换为AutoCAD格式。但是转换之后的地形图往往存在一些地形符号丢失,主要表现在线状地形符号的缺失。如内部路线型转换成了连续实线、栅栏线型转换成了长虚线等。对于一些简单的线型符号,可以通过编制AutoCAD线型文件加载得到,但是,对于复杂的符号则难以解决。而且笔者发现利用这种方法绘制的线型符号在多线段拐点处丢失了符号的连续性,破坏了图形的美观和质量。本文依据标准线状地形符号的特点,利用ObjectARX开发工具实现了AutoCAD的地形线状符号的自动绘制。
线状符号是地图符号中使用最多的一类,长度按比例表示,宽度不依比例表示。线状符号有一个基本符号段(如图1,栅栏基本符号段),表示线状地形就是根据其定位线由基本符号段循环连接而已。而基本符号段可分解成AutoCAD基本图元,如点、直线、圆弧和圆等。把这些基本图元按一定规律连接起来,就可以实现线状符号的自动生成。
图1 栅栏的基本符号段
算法的核心在于根据定位线的位置及长度将线状符号的基本符号段连续的连接起来,在终点处不足一个基本符号段的部分,则只能绘制这一部分长的基本符号段。由于线状符号的定位线较多为多线段,而栅栏为常用线状符号,且基本符号段含有的元素也多样,具有一定的代表性,故这里以定位线为多线段的栅栏线状符号为例,分析其算法流程。
图2 绘制栅栏符号中圆元素的流程图
如果把栅栏的基本符号段当作一个整体考虑,在多线段折点i和i+1之间绘制出t个完整的基本符号段之后,剩下不足一个基本符号段的长度D使得在折点i+1处需考虑和处理的各种可能情况比较复杂。反之,我们可以把基本符号段的元素分开,把三个元素独立考虑。事实上,沿着定位线方向的长线段、垂直于定位线方向的短线段和圆都是各自按一定间距沿着定位线连接的。例如沿定位线方向,两圆心之间的距离和短线段之间的距离都为LD+2R(LD为基本符号段中长线段的长度,R为圆的半径),长线段之间的间距则为2R。所以,只要能给出沿定位线绘制其中一个元素的算法,其他都可类似处理。这里给出绘制圆的算法流程,如图2所示。
对于定位线为直线或圆弧的线状符号的算法与上述情况类似,且相对更简单,笔者就不再赘述了。
如图3所示,为转换为AutoCAD格式的西安市某地区的地形图局部,从图中可以看出缺失多种线状符号,如围墙、栅栏、行树、陡坎等。运用本文的程序对图形进行编辑后,地形点位精度没有破坏,而且线状符号标准美观,如图4所示。
图3 缺失线状符号的地形图
图4 编辑后的地形图
本文利用ObjectARX开发环境实现了地形图线状符号的自动绘制,不仅没有破坏地形点位精度,而且符号标准美观,节省了工作人员手工绘制地形符号的体力和脑力,提高了工作效率。
[1]张帆.ObjectARX开发实例教程电子图书[M].2007
[2]Charles McAuley著.李世国等译.AutoCAD2000 Object-ARX编程指南[M].北京:机械出版社,2000
[3]邵俊昌,李旭东.AutoCAD ObjectARX2000开发技术指南[M].北京:电子工业出版社,2000
[4]王育坚.Visual C++面向对象编程教程[M].北京:清华大学出版社,2003
[5]吴小芳,杜清运,徐智勇等.复杂线状符号的设计及优化算法研究[J].武汉大学学报(信息科学版),2006,31(7):632~635