胡志強,楊海成
1.吉林省地礦測繪院,吉林 長春 130062; 2.核工業航測遙感中心, 河北 石家莊050002
AUTOLISP 是為二次開發AUTOCAD 而專門設計的編程語言,它起源于LISP 語言,嵌入CAD用戶的程序設計語言,運行于CAD 環境,是CAD提供的用戶功能應用開發手段中最常用、最實效的一種,是我們在CAD 應用開發中最主要的工具。它與人工智能程序語言COMMANDLISP 有許多相同的語法和約定,但它又帶有為CAD 服務的、獨特的一些功能函數,這在CAD 應用上具有其他語言無法相比的優秀功能。LISP 又是符號—函數式語言,數據和函數都用符號表達。就連函數也是一種數據,這使得程序設計及其靈活,程序進程也很容易把握。
利用AUTOLISP 語言可以進行各種分析計算、自動執行重復的命令,還可以定義新的AUTOCAD 命令、驅動對話框、控制菜單。為AUTOCAD 擴充具有一定智能化、參數化的功能,可以使繪圖人員的主要精力用于地形圖的繪制,實現真正意義上的計算機輔助設計。
數字測圖中地形點的描繪必須具備三類信息:測點的三維坐標、測點的屬性即地形點的特征信息、測點的連接關系。測點的屬性一般采用地形編碼表示,地形編碼是一種約定,是聯接內外業的紐帶。采用編碼法測圖,在內業編輯的過程中只需要查看草圖中測點的連接關系就可以編繪地形圖。
外業測量的數據一般都是利用測量編圖軟件本身的程序展點,外業編碼與點號需要切換顯示,所展點均在同一圖層,內業編繪中需要進行仔細辨認。如果在AUTOCAD 展點的過程中,利用數據的編碼進行分層展點,編繪過程中按照需求只顯示其中一層。圖面簡明清晰,提高內業制圖效率。本人利用ATUOCAD 軟件的LISP 語言進行程序設計,實現在ATUOCAD 環境下批量進行外業數據的自動分層展繪。主要思路如下:讀取坐標數據文件,設計坐標數據文件常用格式。取得坐標點的點號、編碼、坐標信息,利用程序語言,自動建立圖層,根據編碼自動分層。設置高程點位數,展點時高程點位數自動保留為所需位數。這樣生成的圖元就在所對應的編碼的圖層里。主程序如下:
選擇文件:
(setq filename (getfiled "選擇坐標數據文件" """" 8)) ;
(setq file_id (open filename "r"))
讀取數據:
(progn (setq aa1 (read-line file_id))
(while (/= aa1 nil)
(setq i 0)
(setq aa1 (vl-string-translate "," " " aa1))
(setq aa1 (read (strcat "(" aa1 ")")))
讀取圖層等相關信息:
(setq dianmhao(vl-prin1-to-string (nth 0 aa1))
lay (vl-prin1-to-string(nth 1 aa1))
y (nth 3 aa1)
x (nth 2 aa1)
h (nth 4 aa1))
判斷圖層是否存在,不存在則新建圖層:
(if (=(tblsearch "layer" lay)nil) (command "-layer""n" lay"") )
建立圖元:
(entmake (list '(0 . "TEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
'(62 . 1)
'(40 . 2.4)
'(50 . 0.0)
(cons 8 LAY)
(cons 1 lay)
(cons 10 (LIST Y X H)) ) )
(entmake (list '(0 . "TEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
'(62 . 2)
'(40 . 2.4)
'(50 . 0.0)
(cons 8 "zdh")
(cons 1 dianmhao)
(cons 10 (LIST Y X H))))
(entmake (list '(0 . "POINT")
'(100 . "AcDbEntity")
'(100 . "AcDbPoint")
'(62 . 2)
(cons 8 LAY)
(cons 10 (LIST Y X H)))

圖1 編輯程序對話框Fig.1 Programming dialog box
對話框編輯程序如圖1。程序加載的方法有兩種,一是在 CAD 里面輸入命令 appload,加載zd.lsp 一個是把zd.lsp 的圖標用鼠標左鍵按住直接拖動到 CAD 繪圖區,也可以實現 lsp 文件的加載。加載后輸入命令ZD,回車后啟動程序。通過自定義展點類別、比例尺、字體類型、字高、字高寬比例等相關信息,單擊選擇數據按鈕,選擇cass 格式數據文件,在文本框中顯示讀取文件的坐標信息。觀察坐標格式是否正確。點擊確定,完成展點。
程序運行主菜單如圖2。
展點后效果圖,所展的點均在各自編碼的圖層(見圖3)。繪圖時只需按打開相關層即可,減少其他點干擾,提高編繪速度。
上述展點方法在本單位外業數字化成圖的項目中得到廣泛應用,內業編輯的過程中,通過圖層開關控制逐層進行連線編輯,節省了時間。利用AUTOCAD 強大的定制和開發功能,為準確無誤、高效的完成內業編繪做出了巨大的貢獻。在一定程度上提高了內業成圖的速度。操作簡單、方便,界面友好,得到單位內部的廣泛應用。

圖2 程序運行主菜單Fig.2 Program run main menu

圖3 展點后效果圖Fig.3 Effect drawing after plotting
AUTOLISP 語言是AUTOCAD 軟件包中的一個重要組成部分,也是AUTOCAD 二次開發者的主要工具。可以利用它對AUTOCAD 軟件進行擴展。以滿足項目的一些特殊需求。
[1] 梁雪春 崔洪斌,等. AutoCAD實用教程[M].北京:人民郵電出版社,1998.
[2] 郭平平,梁 帆. AutoLISP R13 & DCL從入門到精通[M].北京:科學出版社,1997.
[3] 肖祥紅,雷宇斌. lisp語言在數字化測繪方面的應用探討[J].國土資源導刊, 2007,3.