欢迎来到天天文库
浏览记录
ID:32534252
大小:74.20 KB
页数:5页
时间:2019-02-11
《autolisp程序生成cad断面图》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、利用AutoLisp、MicrosoftVBA程序语言实现批量生成断面图及断面电子表格数据蒋济飞赵新萍(广西第二测绘院广西柳州545006)【摘 要】 本文主要讨论如何利用AutoCAD的二次开发语言AutoLisp和Excel中的MicrosoftVBA语言技术,利用地形图上的高程点数据批量生成断面图和断面数据表格。【关键字】 断面图AutoLispMicrosoftVBA 1引言 VisualBasic作为一个集成的开发环境,能够使AutoCAD数据与其它的VisualBasic应用程序,如MicrosoftExcel软件,直接共享,实现无缝连接,交换数据。 在没有
2、专业软件辅助的情况下,绘制纵横断面图是很繁琐的事,需要进行大量的、重复的操作,既劳神,又容易出错。我们在完成老挝南塔河1#水电站进站道路测绘项目中,利用地形图上的高程点数据,通过AutoLisp、VisualBasic编程建立AutoCAD与Excel的通信,实现数据交换,快速绘制公路纵横断面及相关成果表,大大的提高了工作效率。 2应用程序的开发 在实现对地形图上的高程点数据批量生成断面图和断面数据表格处理的程序代码编写过程中,主要分以下步骤: (1)注记纵、横断面交点的里程和高程并生成纵断面曲线,输出断面数据。 首先我们取得纵断面线折点的坐标集合(XY-List)。
3、如果纵断面线图元为LWPOLYLINE,则只要依次取出纵断面线图元数据中群码为10的数据即可;如果纵断面线图元为POLYLINE,则只要依次取出纵断面图元之后SEQEND之前的所有VERTEX图元数据中群码为10的数据即可。 取得纵断面线上所有高程点和横断面图元。代码如下: (SETQALL-DATA(SSGET"F"XY-List'((-4."") (-4."") (-4."or>"))))
4、取得高程点和横断面图元数据之后,对数据进行区分。如果是INSERT图元,则取得其插入点XYZ坐标,存入纵断面坐标数据表(ZDM-XYZ-List)中;如果是线型图元,则存入横断面图元数据表(HDM-Entity-List)中。 求得纵、横断面的交点,并生成一个表。Autolisp给我们提供了一个求线段交点的函数(INTERS<线段1起点><线段1终点><线段2起点><线段2终点>[实体相交标记]),我们就利用这个函数求得纵断面与所有横断面交点的坐标表(JD-XY-LIST)。代码如下: (setqjd-xy-list(list));_初始化交点坐标表 (setqBEI-
5、xy-listXY-List);_生成一个备用的中线二维坐标表 (setqi0) (repeat(lengthHDM-Entity-List) (setqdm-entity(nthiHDM-Entity-List));_取出第i+1个横断面 (setqHDM-xy-list(Q-XY-LISTdm-entity)) ;;;;Q-XY-LIST是求线状二维坐标的函数。 (setqdm-start-xy(list(car(nth0HDM-xy-list))(cadr(nth0HDM-xy-list)))) (setqdm-end-xy(list(car(nth1HD
6、M-xy-list))(cadr(nth1HDM-xy-list)))) (setqint-bjnil);_清空交点标记 (while(and(=int-bjnil)(/=(lengthBEI-xy-list)1)) (setqm-xy(nth0BEI-xy-list));_线段的第一个坐标 (setqn-xy(nth1BEI-xy-list));_线段的第二个坐标 (if(setqint-xy(intersdm-start-xydm-end-xym-xyn-xyt)) (setqint-bj1));_如果有交点,则设交点标记(int-bj)为1,用于退出循环
7、(setqb-xy-list(cdrb-xy-list)));_结束while (setqxy(list(carint-xy)(cadrint-xy)));_取得交点二维坐标XY (setqjd-xy-list(appendjd-xy-list(listxy)));_加交点坐标到交点坐标表中 (setqi(1+i)) );_结束Repeat 求两个数据表,一个为输出断面电子表格所需要的数据——累距、高程、坐标表(LeiJu-GaoCheng-list);另一个为绘制断面曲线所需要的数据——累距
此文档下载收益归作者所有