【摘 要】采用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年畢業于太原理工大學工程測量專業,工程師,主要從事工程測量、攝影測量等方面的工作。