在AutoCAD2000中应用VBA技术自动绘制等高线.doc_第1页
在AutoCAD2000中应用VBA技术自动绘制等高线.doc_第2页
在AutoCAD2000中应用VBA技术自动绘制等高线.doc_第3页
在AutoCAD2000中应用VBA技术自动绘制等高线.doc_第4页
在AutoCAD2000中应用VBA技术自动绘制等高线.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在AutoCAD2000中应用VBA技术自动绘制等高线王永新福州市土地管理局计算机中心 350004摘要:应用AutoCAD进行地形图的计算机辅助制图能够极大地提高工作效率,但其没有自动生成等高线的功能,本人用VBA技术,将外业采集的离散点通过建立三角网,在三角形边上内插等高点的方式,能够在AutoCAD中实现等高线的自动绘制。内容:VB是最为常用的支持ActiveX Automation技术的开发工具,其语法简单、功能强大。VBA是VB的子集,由于AutoCAD2000的VBA是嵌入在AutoCAD内部的,共享AutoCAD内存空间,可以很好地与AutoCAD沟通。运用VBA技术自动绘制等高线将极大地提高绘图效率,缩短项目的周期。平面等高线自动绘制有很多方法,其中较为简单和比较常用的是三角网法。用三角网方法绘制等高线包括四个主要过程:根据离散分布的数据点(离散点)建立不规则的三角形网;在三角形边上内插等高点;找等高线的起迄点并追踪全部等高点;连接等高点绘成光滑曲线。下面介绍三角网法绘制等高线具体的算法过程。一、 建立三角网假设在AutoCAD模型空间的平面上已经有n个离散点,点的类型为具有3D坐标的Point实体。为了保证等值点内插的精度,要使形成的每个三角形尽可能呈锐角三角形,并保证各个三角形之间互不交叉且不重复。具体联结的方法是:1、确定第一个三角形设L为每次自动连成的三角形编号,K为每次用来扩展的三角形编号。首先设L=1,从n个离散点中找出左下角的点赋给Ver(L,1),作为第一个三角形的第一个顶点,找出距离该点最近的点赋给Ver(L,2),作为第一个三角形的第二个顶点,找出距离这两点连线中点最近且不和这两点在一条直线上的点赋给Ver(L,3),作为第一个三角形的第三个顶点。这样,就形成一号三角形的顶点信息,K=1。2、三角形扩展由第一号三角形向外扩展,直到将全部的离散点连成三角网的过程是:首先从K号三角形的第一条边(Ver(K,1)、Ver(K,2))向外扩展,为了避免三角形的交叉,以第一条边为界,显然,位于顶点Ver(K,3)同侧的离散点必须被排除,(见图1),利用直线判别正负区的原理可以实现这一要求。为此,首先建立正负区判别式: F(X,Y)=YA XB式中: A=(Y2 Y1)/(X2X1)B=(Y1X2Y2X1)/(X2X1)X1、Y1和X2、Y2分别为扩展边两端点的坐标。 0 离散点位于正区显然, F(X,Y)= 0 离散点位于该直线上 图1 直线判别正负区的原理 (斜线部分为不能扩展的点) 0 离散点位于负区将K号三角形的第三个顶点Ver(K,3)的坐标代入F(X,Y),结果赋给M1,然后将其余离散点的坐标也代入F(X,Y),结果赋给M2,凡M1=M2或M2=0的离散点都被排除,对符合判别条件的离散点,利用三角形边角关系的余弦定理:c=a+b-2abcosC,找出与扩展边上的两点组成的角在所有的三角形中为最大,该点就作为新的三角形的第三个顶点Ver(L,3),此时的L=L+1。为了避免三角形的交叉和重复,对该顶点还要进行一次检查判断,其方法是根据三角形的任一边最多只能为两个三角形共用这一条件,进行全等比较。即判断新的三角形的三条边是否已分别被前面形成的三角形共用过两次,如果是,则此三角形无效,此时L=L-1。否则,为有效三角形。K号三角形的第一条边扩展完后,就可转向其它两条边重复上述扩展工作,每当形成一个新的三角形时,必须使L=L+1。直至K号三角形的三条边都做完扩展工作以后,再取出另一个三角形(K=K+1)来继续做新三角形的扩展工作,当K=L并且L1时,表示全部三角形扩展结束,这时三角网就形成了。依据上述原理和方法,自动联结三角网的程序设计流程图见附图1。二、 在三角形边上内插等高点建立了三角网信息后,接着找出位于离散点间等高点的平面位置。显然等高点的内插都是在三角形边上进行的。下面讨论任一三角形的空间情况:平面三角形123对应于空间三角形123,三角形的三个顶点1、2、3的高程值分别为Z1、Z2、Z3,图2中B1B2线为空间等高线,b1b2线为投影等高线,两者之间的距离为等高线的高程值,用Z表示,则有: Z=|B1b1|=|B2b2|平面三角形123上是否有等高点取决于空间三角形123是否与高程为Z的水平面相交。即为了在三角形边上内插等高点,首先采用下式,判别该边有无等高点通过:(Z Z1)(ZZ2)0时,则该边无等高点,否则必有等高点。(Z Z1)(ZZ3)0时,则该边无等高点,否则必有等高点。(Z Z2)(ZZ2)0时,则该边无等高点,否则必有等高点。在确定三角形边上存在等高点后,用下述线性内插公式,求取图2中b1、b2点的平面坐标:图2 内插等高点示意图式中的(X1,Y1,Z1),(X2,Y2,Z2),(X3,Y3,Z3)分别为三角形三顶点的坐标。三、 搜索等高线的起迄点并追踪全部等高点1、搜索等高线的起迄点图3 搜索闭曲线的起迄点为了追踪等高点,以便连结成等高线,首先必须寻找该条等高线的起始等高点和终止等高点,也即线头。对于闭合等高线,如图3所示,等高线由三角形I到三角形IV所经过的a、b、c、d各等高点都属于中间点,任一点都可以作为等高线的起点和终点。对于非闭合等高线,如图4所示,B点既是三角形I的出口点,又是三角形II的入口点,因此将三角形I的B点的坐标同相邻三角形II的B点坐标作比较,两者必定相 图4 搜索开曲线的起迄点等,这时将计数器M=M+1=2的值赋给数组LB(L)。但是,如果等高点位于边界上时(图4的A点和C点),只能自身进行比较时相等,这时将计数器M=M+1=1的值赋给数组LB(L)。(计数器M的值在每个点进行完比较后置为0,即M=0)。所以,根据这个条件可以判别:当M=1时,该高程点位于边界上,即为起迄等高点,当M=2时,该高程点属于中间高程点。2、等高点的追踪在追踪等高点时,先找开曲线的起始等高点(即LB(L)=1的三角形入口等高点),然后根据某一等高点既是某个三角形的出口点,又是相邻三角形的入口点的原理,建立追踪算法,具体方法如下:、首先从LB(L)中找到数值为1的三角形号,将开曲线起始等高点的坐标X、Y赋给Xd0(LD1)、Yd0(LD1),即Xd0(LD1)=Xb(1,L),Yd0(LD1) =Yb(1,L)。LD1为等高点记数,此时LD1=1。接着LD1=LD1+1,Xd0(LD1)=Xb(2,L),Yd0(LD1) =Yb(2,L)。、按照三角形的序号,将Xd0(LD1)、Yd0(LD1)同全部三角形所有等高点进行全等比较,当Xd0(LD1)=Xb(1,J)和Yd0(LD1)=Yb(1,J)时,则LD1=LD1+1,Xd0(LD1)=Xb(2,L),Yd0(LD1) =Yb(2,L);当Xd0(LD1)=Xb(2,J)和Yd0(LD1)=Yb(2,J)时,则LD1=LD1+1,Xd0(LD1)=Xb(1,L),Yd0(LD1) =Yb(1,L)。为了避开已经被追踪过的三角形,须抹去该三角形,即将LB(L)置零。按照这种方法,一直追踪到开曲线的终点,得到开曲线一组有序的等高点Xd0(LD1),Yd0(LD1) ,LD1=1,2,N。然后调用绘制曲线程序,将一组等高点连成曲线。、绘完所有的开曲线,转入追踪闭合等高线。当LB(L)=2时,闭合等高线的起点可以从任一三角形的等高点开始,按上述方法追踪到该点结束并绘制出闭曲线。、当某一高程等高线全部追踪完后,再开始下一个高程等高线的绘制,按上述方法直到全部等高线绘制结束。3、离散点的预处理为了避免离散点的高程与等高线高程值相等,造成在追踪时发生重复使用和追踪混乱的问题,必须对离散点进行预处理,方法是对等于当前高程值的离散点加上一个足够小的数值给予修正。修正值应很小,使其不至于影响到绘图的精度。四、 连接等高点绘成光滑曲线B样条曲线在Aut

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论