胡志強(qiáng),楊海成
1.吉林省地礦測(cè)繪院,吉林 長春 130062; 2.核工業(yè)航測(cè)遙感中心, 河北 石家莊050002
AUTOLISP 是為二次開發(fā)AUTOCAD 而專門設(shè)計(jì)的編程語言,它起源于LISP 語言,嵌入CAD用戶的程序設(shè)計(jì)語言,運(yùn)行于CAD 環(huán)境,是CAD提供的用戶功能應(yīng)用開發(fā)手段中最常用、最實(shí)效的一種,是我們?cè)贑AD 應(yīng)用開發(fā)中最主要的工具。它與人工智能程序語言COMMANDLISP 有許多相同的語法和約定,但它又帶有為CAD 服務(wù)的、獨(dú)特的一些功能函數(shù),這在CAD 應(yīng)用上具有其他語言無法相比的優(yōu)秀功能。LISP 又是符號(hào)—函數(shù)式語言,數(shù)據(jù)和函數(shù)都用符號(hào)表達(dá)。就連函數(shù)也是一種數(shù)據(jù),這使得程序設(shè)計(jì)及其靈活,程序進(jìn)程也很容易把握。
利用AUTOLISP 語言可以進(jìn)行各種分析計(jì)算、自動(dòng)執(zhí)行重復(fù)的命令,還可以定義新的AUTOCAD 命令、驅(qū)動(dòng)對(duì)話框、控制菜單。為AUTOCAD 擴(kuò)充具有一定智能化、參數(shù)化的功能,可以使繪圖人員的主要精力用于地形圖的繪制,實(shí)現(xiàn)真正意義上的計(jì)算機(jī)輔助設(shè)計(jì)。
數(shù)字測(cè)圖中地形點(diǎn)的描繪必須具備三類信息:測(cè)點(diǎn)的三維坐標(biāo)、測(cè)點(diǎn)的屬性即地形點(diǎn)的特征信息、測(cè)點(diǎn)的連接關(guān)系。測(cè)點(diǎn)的屬性一般采用地形編碼表示,地形編碼是一種約定,是聯(lián)接內(nèi)外業(yè)的紐帶。采用編碼法測(cè)圖,在內(nèi)業(yè)編輯的過程中只需要查看草圖中測(cè)點(diǎn)的連接關(guān)系就可以編繪地形圖。
外業(yè)測(cè)量的數(shù)據(jù)一般都是利用測(cè)量編圖軟件本身的程序展點(diǎn),外業(yè)編碼與點(diǎn)號(hào)需要切換顯示,所展點(diǎn)均在同一圖層,內(nèi)業(yè)編繪中需要進(jìn)行仔細(xì)辨認(rèn)。如果在AUTOCAD 展點(diǎn)的過程中,利用數(shù)據(jù)的編碼進(jìn)行分層展點(diǎn),編繪過程中按照需求只顯示其中一層。圖面簡明清晰,提高內(nèi)業(yè)制圖效率。本人利用ATUOCAD 軟件的LISP 語言進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)在ATUOCAD 環(huán)境下批量進(jìn)行外業(yè)數(shù)據(jù)的自動(dòng)分層展繪。主要思路如下:讀取坐標(biāo)數(shù)據(jù)文件,設(shè)計(jì)坐標(biāo)數(shù)據(jù)文件常用格式。取得坐標(biāo)點(diǎn)的點(diǎn)號(hào)、編碼、坐標(biāo)信息,利用程序語言,自動(dòng)建立圖層,根據(jù)編碼自動(dòng)分層。設(shè)置高程點(diǎn)位數(shù),展點(diǎn)時(shí)高程點(diǎn)位數(shù)自動(dòng)保留為所需位數(shù)。這樣生成的圖元就在所對(duì)應(yīng)的編碼的圖層里。主程序如下:
選擇文件:
(setq filename (getfiled "選擇坐標(biāo)數(shù)據(jù)文件" """" 8)) ;
(setq file_id (open filename "r"))
讀取數(shù)據(jù):
(progn (setq aa1 (read-line file_id))
(while (/= aa1 nil)
(setq i 0)
(setq aa1 (vl-string-translate "," " " aa1))
(setq aa1 (read (strcat "(" aa1 ")")))
讀取圖層等相關(guān)信息:
(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 編輯程序?qū)υ捒騀ig.1 Programming dialog box
對(duì)話框編輯程序如圖1。程序加載的方法有兩種,一是在 CAD 里面輸入命令 appload,加載zd.lsp 一個(gè)是把zd.lsp 的圖標(biāo)用鼠標(biāo)左鍵按住直接拖動(dòng)到 CAD 繪圖區(qū),也可以實(shí)現(xiàn) lsp 文件的加載。加載后輸入命令ZD,回車后啟動(dòng)程序。通過自定義展點(diǎn)類別、比例尺、字體類型、字高、字高寬比例等相關(guān)信息,單擊選擇數(shù)據(jù)按鈕,選擇cass 格式數(shù)據(jù)文件,在文本框中顯示讀取文件的坐標(biāo)信息。觀察坐標(biāo)格式是否正確。點(diǎn)擊確定,完成展點(diǎn)。
程序運(yùn)行主菜單如圖2。
展點(diǎn)后效果圖,所展的點(diǎn)均在各自編碼的圖層(見圖3)。繪圖時(shí)只需按打開相關(guān)層即可,減少其他點(diǎn)干擾,提高編繪速度。
上述展點(diǎn)方法在本單位外業(yè)數(shù)字化成圖的項(xiàng)目中得到廣泛應(yīng)用,內(nèi)業(yè)編輯的過程中,通過圖層開關(guān)控制逐層進(jìn)行連線編輯,節(jié)省了時(shí)間。利用AUTOCAD 強(qiáng)大的定制和開發(fā)功能,為準(zhǔn)確無誤、高效的完成內(nèi)業(yè)編繪做出了巨大的貢獻(xiàn)。在一定程度上提高了內(nèi)業(yè)成圖的速度。操作簡單、方便,界面友好,得到單位內(nèi)部的廣泛應(yīng)用。
圖2 程序運(yùn)行主菜單Fig.2 Program run main menu
圖3 展點(diǎn)后效果圖Fig.3 Effect drawing after plotting
AUTOLISP 語言是AUTOCAD 軟件包中的一個(gè)重要組成部分,也是AUTOCAD 二次開發(fā)者的主要工具??梢岳盟鼘?duì)AUTOCAD 軟件進(jìn)行擴(kuò)展。以滿足項(xiàng)目的一些特殊需求。
[1] 梁雪春 崔洪斌,等. AutoCAD實(shí)用教程[M].北京:人民郵電出版社,1998.
[2] 郭平平,梁 帆. AutoLISP R13 & DCL從入門到精通[M].北京:科學(xué)出版社,1997.
[3] 肖祥紅,雷宇斌. lisp語言在數(shù)字化測(cè)繪方面的應(yīng)用探討[J].國土資源導(dǎo)刊, 2007,3.