论文部分内容阅读
【摘 要】采用AutoLISP(Visual LISP)语言在AutoCAD环境下进行二次开发,设计平面等高线绘制程序,为地形图制图时等高线绘制提供方便易用的工具,从而提高绘图效率,并使AutoCAD真正地起到辅助设计作用。并为基于AutoCAD环境下进行二次开发的应用与研究提供参考。
【关键词】 AutoLISP ; 离散高程点;Delaunay三角网;等高线
The calculate way and program design drawn according to the contour line in maps of Auto CAD
Wang Ri
(Shangxi electric power survey design hospital Taiyuan Shangxi 030001)
【Abstract】Adoption the AutoLISP(Visual LISP) language carry on under the AutoCAD environment two development, design the flat surface contour line in maps draw procedure, for geography diagram graphics the contour line in maps draw to provide convenience easy use of tool, thus exaltation painting efficiency, and make the AutoCAD really have assistance design function.Combine for according to AutoCAD environment bottom carry on two development of application provide reference with research.
【Key words】AutoLISP; Long-lost high point;The Delaunay triangle net;Contour line in maps
1. 引言
Auto CAD是由美国Autodesk公司开发的通用计算机辅助设计软件。由于其使用方便、灵活,尤其是其良好的开放性,使AutoCAD已成为全世界微机CAD系统的主流产品。目前广泛应用于测绘、机械、建筑等行业。由于其是通用软件,所以对于一些专业性功能受到限制,因此在实际的应用中通常要根据专业的需要进行二次开发。AutoLISP语言就是Auto CAD内部的一种二次开发工具。Visual LISP作为AutoLISP的更新换代产品被正式集成其中。Visual LISP给用户提供了一个集成的开发环境,使用户可在易于使用的完全可视化的开发环境下编写、调试代码;经过编译的LISP程序不但提高了运行性能,并可防止他人试图获得用户程序代码;通过Windows的ActiveX与AutoCAD的对象模型接口可与其它软件集成。
2. Auto LISP语言的特点与结构
AutoLISP 基于简单易学而又功能强大的LISP 编程语言。它语法简单,编写程序便捷、灵活、数据类型丰富。AutoLISP应用程序或例程可以通过多种方式与AutoCAD交互。也可以在应用程序中使用对话框语言DCL(Dialog Control Language)、控制菜单,还能够提示用户输入、直接访问内置 AutoCAD命令,以及修改或创建图形数据库中的对象,向 AutoCAD 添加专用命令等。实际上,某些标准AutoCAD命令就是AutoLISP应用程序。
AutoLISP通过VLISP (Visual LISP)进一步得到增强,VLISP提供了一个集成开发环境 (IDE),其中包含编译器、调试器和其他提高生产效率的开发工具。通过IDE用户可以进行试验:在命令提示下输入代码后可立即看到结果。这使AutoLISP语言容易试验,而不管用户的编程经验如何。VLISP 添加了更多的功能,并对语言进行了扩展以与使用 ActiveX 的对象进行交互,也允许AutoLISP通过对象反应器对事件进行响应。因此在IDE下用户可以便捷、高效地开发AutoLISP程序,经过编译得到运行效率高、代码紧凑、源代码受到保护的应用程序,且程序的兼容性很强。
AutoLISP的数据类型丰富,除了具有一般程序设计语言的整型、实型、字符串等数据类型之外,还有表、函数、文件描述符、AutoCAD选择集、AutoCAD图元、VLA(Visual LISP ActiveX)对象、函数分页表和外部函数等数据类型。AutoLISP处理的对象是符号表达式(简称表达式),相当于其他编程语言中的语句。表达式由原子或表构成。这里值得注意的是AutoLISP表达式采用前缀表示法,即将函数放在所有操作数之前(在AutoLISP语言里运算符也属于函数)。利用AUTOLISP(VLISP)表处理语言进行二次开发可以将许多繁琐、易出错的工作简单化、程序化.。这样不但可减少航测制图的出错机率,而且大大提高了其作业效率。
3. 等高线绘制的算法及程序设计
等高线是地面上高程相等点的连线,可以反映地面高程、山体、谷地、坡形、坡度和山脉走向等地貌基本形态。由等高线可以量算地面点的高程、地表面积、地面坡度、和山体的体积。描绘等高线时必须满足下列要求:
(1)等高线通常是连续的曲线,可能是闭合曲线也可能由于区域的限定,从区域的边界开始到区域的边界结束。
(2)给定某一高度时,等高线有时不止一条。
(3)等高线一定不能相交。
等高线绘制的基本流程如图1:
图1
2.1 自动展离散的高程点。首先建立高程点文件,然后程序自动读取文件进行展点。
数据文件格式为:
点号坐标X 坐标Y 高程H
1, 0.000, 8.264, 100.398
2, 4.943, -4.942,98.751
3, 3.163,-6.863,98.288
4, 6.660,-3.872,98.844
5, 7.509,-7.509,97.363
6, 9.757,-5.901,97.528
7, 5.353,-9.353,97.235
8, 10.007, -10.006,96.279
9,8.380,-11.500,96.285
……
展点程序流程如图2,展点后图形如图3。
图2
图3
2.2 由离散的高程点构建三角网。首先根据离散点生成delaunay三角形。Delaunay三角网的定义:有公共边的V-多边形称为相邻的V-多边形。连接所有相邻的V-多边形的生长中心所形成的三角网称为Delaunay三角网(简称D-三角网)。
D-三角网的外边界是一个凸多边形,它由节点集中的凸集形成,通常称为凸壳。D-三角网具有两个非常重要的性质。
(1)空外接圆性质:在由点集V所形成的D-三角网中,其每个三角形的外接圆均不包含点集V中的其他任意点。
(2)最大的最小角度性質:在由点集V所能形成的三角网中,D-三角网中三角形的最小角度是最大的。
由于这两个性质,决定了D-三角网具有极大的应用价值。同时,它也是二维平面三角网中唯一的、最好的。
具体方法步骤如下:
(1)获得所有离散点选择集,并将所有点按照坐标x进行排序后的选择集S。
(2)构造超大三角形,使得所有离散点均落在该三角形的内部;
(3)以该超大三角形作为Delaunay三角形集D的首个成员;
(4)对所有离散点集S里的每个点,搜索D中满足外接圆包含该点的三角形集T;
(5)新点与三角形集T中的所有三角形顶点构成三角形集N,在D中删除T,并加入N;
(6)重復第4、5步;
(7)删除D中所有与超大三角形有关的三角形。
三角网判断流程图如图4,最后绘制的三角网图形如图5。
图4
图5
2.3 根据已构建的三角网生成等高线。首先需要在三角网中的每个三角形的边上插补等值点。要确定某个三角形的边上是否有等值点,需要进行判断和处理。
奇异点处理:如果某原始数据点(离散点)的高程和等高线值相同,将该点的高程值改变一个微量。
判断等高线经过的三角形:
(1)如果一个三角形三顶点的值相同则各边无等值点。
(2)如果一个三角形的任意边两端点(A、B〕的Z值(Za、Zb)满足满足
(Zd-Za)×(Zd-Zb)<0 (1)
则该边必有等值点。(其中:Zd代表等高线的高程值)
等值点的平面位置坐标是:
Xd=Xa+(Xb-Xa) ×(Zd-Za)/(Zd-Za)(2)
Yd=Ya+(Yb-Ya) ×(Zd-Za)/(Zb-Za)(3)
由于经过奇异点处理,不必考虑等值线穿过端点,如果一个三角形的边上存在等值点的话,只可能在某两条边上存在等值点,而不可能三条边上同时都有。也就是说,只要三角形一边上存在等值点,则其余的两条边中必有一边存在等值点。
图6
根据上面的判断条件,我们对每个等高线高程值遍历整个三角网选择集,如果等高线经过该三角网,求得两个等值点,连接这两个等值点,便得到该高程值的等高线的一小部分。将整个三角网选择集遍历完后,我们把所有的这些高程值相等的线段连接起来就构成该高程值的等高线。然后还可以对等高线进行拟合等处理。最后绘制的图形如图6。
3. 结束语
本程序不仅实用于绘制地形等高线图,同样也使用于绘制其他等值线图,因此用途很广。通过利用该程序进行数据读取并绘制图形,首先避免了一般绘图数据输入时的错误,它通过计算机自动计算,省去了人工计算并进行等高线内插的繁琐和错误。使得设计人员有更多的时间和精力来构思和创新设计方案。大大提高了设计人员的工作效率和设计质量。总之,在AutoCAD环境下使用AutoLISP进行二次开发实现图形自动绘制值得我们去学习和研究,能够带来很大的方便,带来可喜的经济效益。
参考文献
[1] 李学志 .Visual LISP 程序设计(AutoCAD 2006).北京:清华大学出版社.2006
[2] 王来生等.大比例尺地形图机助绘图算法及程序.北京:测绘出版社.1993
[3] 电力工程勘测制图(DL/T5156.1~5156.5-2002)北京:中国电力出版社2000
[4] 国家基本比例尺地图图式(GB/T 20257.1-2007)北京:中国标准出版社2007
[5] 王金山 周园等 测量学基础 北京:教育科学出版社 2003
[6] 宁津生等 测绘学概论 武汉: 武汉大学出版社 2008
[7] 蒋围恒等 测量学 北京:测绘出版社.1993
[文章编号]1619-2737(2010)06-08-123
[作者简介]王日(1976-),男,内蒙古化德县人,2000年毕业于太原理工大学工程测量专业,工程师,主要从事工程测量、摄影测量等方面的工作。
【关键词】 AutoLISP ; 离散高程点;Delaunay三角网;等高线
The calculate way and program design drawn according to the contour line in maps of Auto CAD
Wang Ri
(Shangxi electric power survey design hospital Taiyuan Shangxi 030001)
【Abstract】Adoption the AutoLISP(Visual LISP) language carry on under the AutoCAD environment two development, design the flat surface contour line in maps draw procedure, for geography diagram graphics the contour line in maps draw to provide convenience easy use of tool, thus exaltation painting efficiency, and make the AutoCAD really have assistance design function.Combine for according to AutoCAD environment bottom carry on two development of application provide reference with research.
【Key words】AutoLISP; Long-lost high point;The Delaunay triangle net;Contour line in maps
1. 引言
Auto CAD是由美国Autodesk公司开发的通用计算机辅助设计软件。由于其使用方便、灵活,尤其是其良好的开放性,使AutoCAD已成为全世界微机CAD系统的主流产品。目前广泛应用于测绘、机械、建筑等行业。由于其是通用软件,所以对于一些专业性功能受到限制,因此在实际的应用中通常要根据专业的需要进行二次开发。AutoLISP语言就是Auto CAD内部的一种二次开发工具。Visual LISP作为AutoLISP的更新换代产品被正式集成其中。Visual LISP给用户提供了一个集成的开发环境,使用户可在易于使用的完全可视化的开发环境下编写、调试代码;经过编译的LISP程序不但提高了运行性能,并可防止他人试图获得用户程序代码;通过Windows的ActiveX与AutoCAD的对象模型接口可与其它软件集成。
2. Auto LISP语言的特点与结构
AutoLISP 基于简单易学而又功能强大的LISP 编程语言。它语法简单,编写程序便捷、灵活、数据类型丰富。AutoLISP应用程序或例程可以通过多种方式与AutoCAD交互。也可以在应用程序中使用对话框语言DCL(Dialog Control Language)、控制菜单,还能够提示用户输入、直接访问内置 AutoCAD命令,以及修改或创建图形数据库中的对象,向 AutoCAD 添加专用命令等。实际上,某些标准AutoCAD命令就是AutoLISP应用程序。
AutoLISP通过VLISP (Visual LISP)进一步得到增强,VLISP提供了一个集成开发环境 (IDE),其中包含编译器、调试器和其他提高生产效率的开发工具。通过IDE用户可以进行试验:在命令提示下输入代码后可立即看到结果。这使AutoLISP语言容易试验,而不管用户的编程经验如何。VLISP 添加了更多的功能,并对语言进行了扩展以与使用 ActiveX 的对象进行交互,也允许AutoLISP通过对象反应器对事件进行响应。因此在IDE下用户可以便捷、高效地开发AutoLISP程序,经过编译得到运行效率高、代码紧凑、源代码受到保护的应用程序,且程序的兼容性很强。
AutoLISP的数据类型丰富,除了具有一般程序设计语言的整型、实型、字符串等数据类型之外,还有表、函数、文件描述符、AutoCAD选择集、AutoCAD图元、VLA(Visual LISP ActiveX)对象、函数分页表和外部函数等数据类型。AutoLISP处理的对象是符号表达式(简称表达式),相当于其他编程语言中的语句。表达式由原子或表构成。这里值得注意的是AutoLISP表达式采用前缀表示法,即将函数放在所有操作数之前(在AutoLISP语言里运算符也属于函数)。利用AUTOLISP(VLISP)表处理语言进行二次开发可以将许多繁琐、易出错的工作简单化、程序化.。这样不但可减少航测制图的出错机率,而且大大提高了其作业效率。
3. 等高线绘制的算法及程序设计
等高线是地面上高程相等点的连线,可以反映地面高程、山体、谷地、坡形、坡度和山脉走向等地貌基本形态。由等高线可以量算地面点的高程、地表面积、地面坡度、和山体的体积。描绘等高线时必须满足下列要求:
(1)等高线通常是连续的曲线,可能是闭合曲线也可能由于区域的限定,从区域的边界开始到区域的边界结束。
(2)给定某一高度时,等高线有时不止一条。
(3)等高线一定不能相交。
等高线绘制的基本流程如图1:
图1
2.1 自动展离散的高程点。首先建立高程点文件,然后程序自动读取文件进行展点。
数据文件格式为:
点号坐标X 坐标Y 高程H
1, 0.000, 8.264, 100.398
2, 4.943, -4.942,98.751
3, 3.163,-6.863,98.288
4, 6.660,-3.872,98.844
5, 7.509,-7.509,97.363
6, 9.757,-5.901,97.528
7, 5.353,-9.353,97.235
8, 10.007, -10.006,96.279
9,8.380,-11.500,96.285
……
展点程序流程如图2,展点后图形如图3。
图2
图3
2.2 由离散的高程点构建三角网。首先根据离散点生成delaunay三角形。Delaunay三角网的定义:有公共边的V-多边形称为相邻的V-多边形。连接所有相邻的V-多边形的生长中心所形成的三角网称为Delaunay三角网(简称D-三角网)。
D-三角网的外边界是一个凸多边形,它由节点集中的凸集形成,通常称为凸壳。D-三角网具有两个非常重要的性质。
(1)空外接圆性质:在由点集V所形成的D-三角网中,其每个三角形的外接圆均不包含点集V中的其他任意点。
(2)最大的最小角度性質:在由点集V所能形成的三角网中,D-三角网中三角形的最小角度是最大的。
由于这两个性质,决定了D-三角网具有极大的应用价值。同时,它也是二维平面三角网中唯一的、最好的。
具体方法步骤如下:
(1)获得所有离散点选择集,并将所有点按照坐标x进行排序后的选择集S。
(2)构造超大三角形,使得所有离散点均落在该三角形的内部;
(3)以该超大三角形作为Delaunay三角形集D的首个成员;
(4)对所有离散点集S里的每个点,搜索D中满足外接圆包含该点的三角形集T;
(5)新点与三角形集T中的所有三角形顶点构成三角形集N,在D中删除T,并加入N;
(6)重復第4、5步;
(7)删除D中所有与超大三角形有关的三角形。
三角网判断流程图如图4,最后绘制的三角网图形如图5。
图4
图5
2.3 根据已构建的三角网生成等高线。首先需要在三角网中的每个三角形的边上插补等值点。要确定某个三角形的边上是否有等值点,需要进行判断和处理。
奇异点处理:如果某原始数据点(离散点)的高程和等高线值相同,将该点的高程值改变一个微量。
判断等高线经过的三角形:
(1)如果一个三角形三顶点的值相同则各边无等值点。
(2)如果一个三角形的任意边两端点(A、B〕的Z值(Za、Zb)满足满足
(Zd-Za)×(Zd-Zb)<0 (1)
则该边必有等值点。(其中:Zd代表等高线的高程值)
等值点的平面位置坐标是:
Xd=Xa+(Xb-Xa) ×(Zd-Za)/(Zd-Za)(2)
Yd=Ya+(Yb-Ya) ×(Zd-Za)/(Zb-Za)(3)
由于经过奇异点处理,不必考虑等值线穿过端点,如果一个三角形的边上存在等值点的话,只可能在某两条边上存在等值点,而不可能三条边上同时都有。也就是说,只要三角形一边上存在等值点,则其余的两条边中必有一边存在等值点。
图6
根据上面的判断条件,我们对每个等高线高程值遍历整个三角网选择集,如果等高线经过该三角网,求得两个等值点,连接这两个等值点,便得到该高程值的等高线的一小部分。将整个三角网选择集遍历完后,我们把所有的这些高程值相等的线段连接起来就构成该高程值的等高线。然后还可以对等高线进行拟合等处理。最后绘制的图形如图6。
3. 结束语
本程序不仅实用于绘制地形等高线图,同样也使用于绘制其他等值线图,因此用途很广。通过利用该程序进行数据读取并绘制图形,首先避免了一般绘图数据输入时的错误,它通过计算机自动计算,省去了人工计算并进行等高线内插的繁琐和错误。使得设计人员有更多的时间和精力来构思和创新设计方案。大大提高了设计人员的工作效率和设计质量。总之,在AutoCAD环境下使用AutoLISP进行二次开发实现图形自动绘制值得我们去学习和研究,能够带来很大的方便,带来可喜的经济效益。
参考文献
[1] 李学志 .Visual LISP 程序设计(AutoCAD 2006).北京:清华大学出版社.2006
[2] 王来生等.大比例尺地形图机助绘图算法及程序.北京:测绘出版社.1993
[3] 电力工程勘测制图(DL/T5156.1~5156.5-2002)北京:中国电力出版社2000
[4] 国家基本比例尺地图图式(GB/T 20257.1-2007)北京:中国标准出版社2007
[5] 王金山 周园等 测量学基础 北京:教育科学出版社 2003
[6] 宁津生等 测绘学概论 武汉: 武汉大学出版社 2008
[7] 蒋围恒等 测量学 北京:测绘出版社.1993
[文章编号]1619-2737(2010)06-08-123
[作者简介]王日(1976-),男,内蒙古化德县人,2000年毕业于太原理工大学工程测量专业,工程师,主要从事工程测量、摄影测量等方面的工作。