?、苎h(huán)語句:
求100! (while(<=i 100)
(setq sum (+sum i))
(setq i(+i 1)
?、葺斎胼敵稣Z句:
把輸入的點坐標賦值給Pt (setq Pt(getpoint “To input point:”))
輸出變量X的值 (princ X)
2.3 注釋方法
?、儆?#8220;;”注釋,從“;”開始作用至行尾;
?、谟?#8220;;|……|;”注釋,注釋文本可以延續(xù)成多行。
2.4 程序加載
盡管AutoLISP代碼可以使用鍵盤錄入到命令行上,但通常這只是調(diào)試程序的一種輔助手段。對于實用的AutoLISP程序,就需要將它編排成一個文本文件,然后,從AutoCAD編輯器環(huán)境把它加載到內(nèi)存,進行測試和排錯,最后形成一個可重復使用的AutoLISP程序。加載時可以使用LOAD函數(shù)在命令行加載,也可在ACAD.LSP文件中定義,以使每次啟動AutoCAD時自動加載。
例:COMMAND:(load“[path]<文件名>(.LSP)”)
2.5 程序運行
如果程序文件中定義了一個形如C:xxx的函數(shù),那么它就能在COMMAND:提示符下通過鍵入該函數(shù)全名來運行該函數(shù),就像執(zhí)行標準的內(nèi)建式AutoCAD命令一樣。如:
COMMAND:(C:CSCAD)
過去的AutoCAD版使用的AutoLISP至多只能使用45K內(nèi)存,因此,它在使用上常常會遇到結(jié)點空間不夠的情況,而且運行速度很慢而影響處理工作。AutoCAD從R9版起提供了擴充AutoLISP功能,它可使用計算機的全部擴充內(nèi)存,最多可達14M。這樣它將擁有比原先大得多得工作空間而能運行AutoLISP大程序,并將騰出45K空間分給AutoCAD作為I/O分頁存取作業(yè)之用,使內(nèi)存與硬盤的交換次數(shù)減少而加快處理速度。
3 AutoLISP語言在開發(fā)水工CAD方面的應(yīng)用
AutoLISP語言作為嵌入在AutoCAD內(nèi)部的具有智能特點的編程語言,是開發(fā)應(yīng)用AutoCAD不可缺少的工具。它提供了各種數(shù)據(jù)類型、預(yù)定義函數(shù)、特殊功能,可自動生成SCR接口文件,利用輸入輸出功能,讀寫函數(shù)實現(xiàn)與高級語言的數(shù)據(jù)交換。在AutoLISP語言編輯中,增加了AutoCAD繪圖命令,是設(shè)計和繪圖溶為一體,將求值器、運算程序直接裝入源程序,實現(xiàn)對當前數(shù)據(jù)庫的直接訪問和修改,對屏幕圖形的適時修改,實現(xiàn)交互設(shè)計,為在繪圖領(lǐng)域中應(yīng)用人工智能提供了方便。
AutoCAD從R12版開始,引入了可編程對話框(Programmable Dialog Box,簡稱PDB)。PDB的引入是對AutoCAD的一項最大的革新,它改進了圖形用戶接口(Graphics Users Interface,簡稱GUI),使用戶能夠更加容易、直觀地進行操作。通過一些簡單的手段,用戶便可以創(chuàng)建自己的對話框,從而為操作提供了一個友好的圖形界面。
創(chuàng)建一個對話框至少要兩種不同的語言來編寫兩個程序段。一個是對話框控制語言(Dialog Control Language,簡稱DCL)編制的對話框定義程序;另一個是用AutoLISP語言或ADS編寫的對話框驅(qū)動程序,本文采用的是AutoLISP語言。DCL文件是一個ASCII文本文件,用來定義對話框中的各種元素及其排列方式,如果用戶不指定元素的大小,AutoCAD會根據(jù)各平臺的現(xiàn)狀為元素設(shè)置一個缺省的值。對話框驅(qū)動程序能夠為對話框提供一個操作主控制函數(shù),用于啟動對話框并控制流程的運行。
本文僅以“寒區(qū)水閘計算機輔助設(shè)計支持系統(tǒng)”軟件開發(fā)的部分源程序為例,對AutoLISP語言在開發(fā)中的應(yīng)用以及DCL文件的結(jié)構(gòu)和語法進行簡單陳述。
3.1 對話框定義程序
//;;;— — — — — — — — — — — —
//;;;文件名:CSCAD.DCL
//;;;功 能:定義寒區(qū)水閘CAD支持系統(tǒng)主菜單的各種控件及排列
//;;;開發(fā)者:汪恩良(東北農(nóng)業(yè)大學96級碩士研究生)
//;;;時 間:1998年5月15日—1998年11月
//;;;— — — — — — — — — — — —
cscadss ?。瘜υ捒蛎?
:dialog?。瘜υ捒蜷_始
fixed-width=true;//指定控件的寬度保持固定
width=45;//指定控件的寬度為45個字符
alignment=centered;//本簇中控件中心對齊
//對話框的標題
label=″ 寒區(qū)水閘計算機輔助設(shè)計支持系統(tǒng)(開敞式) V1.0″
:boxed-row{//定義一個加框行
children-alignment=centered;//所有子控件中心對齊
initial-focus=″lx″//光標初始定位為“LX”控件
:retirment-button{//定義一個按鈕
key=″lx″;//該控件標識號為“LX”
label=″開敞閘型″;//該控件的文本標題
}//一個控件定義結(jié)束
}//加框行定義結(jié)束
:column{//定義一個空白列
fixed-width=true;//指定控件的寬度保持固定
fixed-h(huán)eight=true; ?。付丶母叨缺3止潭?
height=13;//指定控件的高度為45個字符
}//空白列定義結(jié)束
:text{//定義一個控件
key=″text1″;//該控件標識號為“text1”
label=″此處顯示出錯信息!″//該控件的文本標題
}//控件定義結(jié)束
ok-cancel-h(huán)elp;//選用標準“OK-取消-幫助”控件
}//對話框定義結(jié)束
3.2 總體思路框圖
圖1 對話框驅(qū)動程序流程圖
3.3 對話框驅(qū)動程序
;;;— — — — — — — — — — — —
;;;文件名:CSCAD.LSP
;;;功 能:調(diào)用寒區(qū)水閘CAD支持系統(tǒng)主菜單
;;;開發(fā)者:汪恩良(東北農(nóng)業(yè)大學96級碩士研究生)
;;;時 間:1998年5月15日—1998年11月
;;;— — — — — — — — — — — —
;;;定義一個函數(shù),函數(shù)名為C:cscad
(defun c:cscad()
;;;加載DCL文件
(if;|if1|;(and (not dcl-id)(<(setq dcl-id(load-dialog″c:/acadwin/cscad.dcl″))0))(exit));endif1
;;;激活出對話框
(if;|if2|;(not new-dialog ″cscadss″dcl-id))(exit);endif2
(setq what-next 4)
(while (<2 what-next) ??;設(shè)置循環(huán)
(action-tile″lx″ ′(c:lx)″);接受在lx按鈕上的操作
(action-tile″jkd″ ″(c:jkd)″);接受在jkd按鈕上的操作
(action-tile″zhsh″ ″(c:zhsh)″);接受在zhsh按鈕上的操作
(action-tile″ckd″ ″(c:ckd)″);接受在ckd按鈕上的操作
(action-tile″fd″ ″(c:fd)″);接受在fd按鈕上的操作
(action-tile″output″ ″(c:output)″);接受在output按鈕上的操作
(action-tile″accept″ ″(done-dialog 1)″);接受在OK按鈕上的操作
(action-tile″help″ ″(done-dialog 3)″);接受在HELP按鈕上的操作
(setq what-next (start-dialog));啟動對話框
(cond
((=what-next 1)
(c:jkd11shr)
(setq what-next 4)
(if(not(new-dialog″cscadss″dcl-id))(exit)))
((=what-next 3)
(c:help)
(setq what-next 4)
(if(not(new-dialog ″cscadss″dcl-id))(exit)))
);cond
);while
(unload-dialog dcl-id) ??;卸載DCL文件
(princ)
);defun ??;函數(shù)結(jié)束
;;;— — — — — — —
3.4 運行結(jié)果
圖2 運行結(jié)果(主菜單)(Result of Running)
4 結(jié)束語
上述源程序僅是“寒區(qū)水閘計算機輔助設(shè)計支持系統(tǒng)”軟件的主菜單調(diào)用情況,內(nèi)部功能函數(shù)的實現(xiàn)尚有許多內(nèi)容,在此不一一贅述了。