趙龍
摘 要:在地圖上無(wú)法按照比例表示的一些地物,統(tǒng)稱為獨(dú)立地物。它一般高出于其他建筑物,具有明顯的方位意義,對(duì)地圖定向、判斷方位等意義較大。獨(dú)立地物因無(wú)法依真型顯示,所以大都用幾何符號(hào)來(lái)表示。在地圖上,獨(dú)立地物符號(hào)必須精確的表示地物位置,符號(hào)要規(guī)定定位點(diǎn),便于定位。AutoLISP語(yǔ)言是嵌套在AutoCAD內(nèi)部,將LISP語(yǔ)言和AutoCAD有機(jī)結(jié)合的產(chǎn)物。它具有強(qiáng)大的開(kāi)發(fā)功能,運(yùn)用AutoLISP語(yǔ)言編寫(xiě)程序可以方便、快捷的繪制自己所需要的獨(dú)立地物符號(hào)。
關(guān)鍵詞:AutoLISP;AutoCAD;編程;獨(dú)立地物符號(hào)
LISP(List Processing Language)語(yǔ)言是人工智能領(lǐng)域中廣泛采用的一種程序設(shè)計(jì)語(yǔ)言,是一種計(jì)算機(jī)表處理語(yǔ)言。LISP語(yǔ)言處理的對(duì)象是符號(hào)表達(dá)式,因此也被成為符號(hào)式語(yǔ)言。LISP語(yǔ)言的程序和數(shù)據(jù)都是以符號(hào)表達(dá)式的形式來(lái)表示的,因此,一個(gè)LISP程序可以把另一個(gè)LISP程序作為它的數(shù)據(jù)來(lái)處理。LISP語(yǔ)言語(yǔ)法簡(jiǎn)單,數(shù)據(jù)類型豐富,編寫(xiě)程序比較方便,靈活性較高。LIPS語(yǔ)言的內(nèi)部數(shù)據(jù)結(jié)構(gòu)非常適合用表來(lái)表示,并且表中還可以嵌套其他的表,這種構(gòu)成表的符號(hào)表達(dá)式放在一對(duì)括號(hào)中。利用LISP語(yǔ)言很容易定義和調(diào)用用戶編寫(xiě)的函數(shù),這使得LISP語(yǔ)言的編程十分靈活。AutoLISP語(yǔ)言嵌套于AutoCAD內(nèi)部,它是LISP語(yǔ)言和AutoCAD有機(jī)結(jié)合的產(chǎn)物。AutoLISP是為二次開(kāi)發(fā)AutoCAD專門設(shè)計(jì)的編程語(yǔ)言。AutoLISP語(yǔ)言嵌入AutoCAD之后,AutoCAD不再只是交互式的圖形繪制軟件,而成為了真正能夠進(jìn)行計(jì)算機(jī)輔助設(shè)計(jì)、繪圖的CAD軟件。
AutoLISP具有以下顯著特點(diǎn):
(1)在普通LISP語(yǔ)言的基礎(chǔ)上,AutoLISP語(yǔ)言擴(kuò)充了許多適用于CAD應(yīng)用的特殊功能,它是一種只能以解釋方式運(yùn)行于AutoCAD內(nèi)部的程序設(shè)計(jì)語(yǔ)言。
(2)在AutoLISP語(yǔ)言中,許多成分都是以函數(shù)的形式給出的,其中沒(méi)有語(yǔ)句概念或其他語(yǔ)法結(jié)構(gòu)。執(zhí)行AutoLISP程序?qū)嵸|(zhì)上就是執(zhí)行一些函數(shù),再調(diào)用另一些函數(shù)。
(3)AutoLISP把數(shù)據(jù)和程序統(tǒng)一表達(dá)為表結(jié)構(gòu),就可以把程序當(dāng)做數(shù)據(jù)來(lái)處理,也可以把數(shù)據(jù)當(dāng)做程序來(lái)執(zhí)行。
(4)AutoLISP語(yǔ)言中的程序運(yùn)行過(guò)程就是對(duì)函數(shù)的求值過(guò)程,是在對(duì)函數(shù)的求值過(guò)程中實(shí)現(xiàn)了函數(shù)的功能。
(5)AutoLISP語(yǔ)言的功能函數(shù)強(qiáng)大,除了具有一般性的功能函數(shù)外,還有為數(shù)不少的控制配合AutoCAD的特殊函數(shù)。而且AutoLISP可執(zhí)行所有的AutoACD指令,并使用所有的AutoCAD系統(tǒng)變量。
(6)AutoLISP語(yǔ)言是一種解釋型語(yǔ)言,程序不需要再做編譯,“即寫(xiě)即測(cè)”,“即測(cè)即用”,可以立即在AutoCAD中得到相應(yīng)的成果。
(7)AutoLISP語(yǔ)言的主要控制結(jié)構(gòu)采用遞歸方式。遞歸方式的使用,使得程序設(shè)計(jì)簡(jiǎn)單易懂。
使用AutoLISP語(yǔ)言編制一些實(shí)用繪圖程序,可以保障繪圖的精度、提高繪圖效率。獨(dú)立地物是地形圖(尤其大比例地形圖)的重要地物元素,在地形圖繪制中獨(dú)立地物的數(shù)量往往較多,獨(dú)立地物精確合理的繪制是地形圖繪制基本要求。一般情況下,繪圖軟件往往能夠提供多數(shù)獨(dú)立地物符號(hào)的繪制方法,但對(duì)一些較為特殊或生僻的獨(dú)立地物符號(hào),繪圖軟件有時(shí)沒(méi)有繪制這種符號(hào)的功能。
下面介紹用AutoLISP語(yǔ)言編程,繪制《中國(guó)海圖圖式》中“海港航標(biāo)燈樁”的方法,該程序?qū)⒗L制一個(gè)外接圓直徑為3mm的紅色實(shí)心五角星,定位點(diǎn)在五角星中心。
(1)新建一個(gè)記事本文件,文件名改為HGDZ.lsp(注意:擴(kuò)展名必須為.lsp),保存該文件;
(2)將下列代碼輸入到該文件中:
(defun C:wjx()
(setq pt0 (getpoint "\n插入點(diǎn):"))
(setq sc (getint "\n輸入比例因子:"))
(setq pt1 (polar pt0 (angtof "90") (* sc 1.5)))
(setq pt2 (polar pt1 (angtof "-108") (* sc 1.0898)))
(setq pt3 (polar pt2 pi (* sc 1.0898)))
(setq pt4 (polar pt3 (angtof "-36") (* sc 1.0898)))
(setq pt5 (polar pt4 (angtof "-108") (* sc 1.0898)))
(setq pt6 (polar pt5 (angtof "36") (* sc 1.0898)))
(setq pt7 (polar pt6 (angtof "-36") (* sc 1.0898)))
(setq pt8 (polar pt7 (angtof "108") (* sc 1.0898)))
(setq pt9 (polar pt8 (angtof "36") (* sc 1.0898)))
(setq pt10 (polar pt9 pi (* sc 1.0898)))
(command "color" "T" '(255,0,0))
(command "pline" pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 pt10 "c")
(setq s1 (entlast))
(command "_bhatch" "p" "solid" "s" s1 "" "")
)
(3)在AutoCAD中選擇菜單欄“工具”→“AutoLISP” →“加載應(yīng)用程序”菜單命令,彈出“加載/卸載應(yīng)用程序”對(duì)話框,找到步驟(1)創(chuàng)建的HGDZ.lsp,單擊“加載”按鈕,此時(shí)AutoCAD顯示已成功加載HGDZ.lsp。
(4)AutoCAD加載上述代碼文件后,在命令行輸入:wjx,命令行提示“插入點(diǎn):”,在這個(gè)提示下輸入坐標(biāo)或單擊鼠標(biāo)左鍵在圖中拾取定位點(diǎn)坐標(biāo),按回車后命令行提示“輸入比例因子:”,輸入比例因子并回車,同時(shí)繪制“海港航標(biāo)燈樁”,如下圖所示:
結(jié)論
AutoLISP語(yǔ)言具有強(qiáng)大的開(kāi)發(fā)功能,可以將復(fù)雜的繪圖操作編寫(xiě)成程序,并通過(guò)用戶命令的形式實(shí)現(xiàn)參數(shù)化繪圖功能,有助于繪圖人員更精確、高效的完成繪圖工作。
參考文獻(xiàn)
[1]周樂(lè)來(lái),馬婧.AutoCAD 2008 VisualLISP二次開(kāi)發(fā)入門到精通[M].北京:機(jī)械工業(yè)出版社,2008.4.