l 前言
隨著科學(xué)技術(shù)的發(fā)展,計算機技術(shù)已不僅僅應(yīng)用于科學(xué)計算,已逐漸發(fā)展成為和許多科學(xué)技術(shù)部門建立各不相同的計算機輔助系統(tǒng)(Computer Aided Design,簡稱CAD)。目前,CAD技術(shù)的應(yīng)用大致可以分為兩大應(yīng)用領(lǐng)域:一類是產(chǎn)品設(shè)計,如飛機、汽車、船舶、機械、電子產(chǎn)品;另一類是工程設(shè)計,如土木、建筑、水利、礦山、鐵路、石油、化工等各種類型的工程。CAD技術(shù)在產(chǎn)品設(shè)計領(lǐng)域的發(fā)展尤為迅速,已經(jīng)證明在采礦設(shè)計中引進CAD技術(shù)無論計算、繪圖,質(zhì)量還是速度都使設(shè)計工作上一個臺階。
但是,目前各設(shè)計部門大多只能應(yīng)用AutoCAD軟件包,工程設(shè)計人員大部分時間花費在繁瑣的計算、繪圖中,大部分設(shè)計人員尚不能對AutoCAD進行開發(fā),對引進的CAD軟件進行修改,編制出一些實用的小軟件。筆者以開發(fā)“測量繪圖系統(tǒng)”軟件為例,簡單介紹了AutoLISP在開發(fā)測繪工程CAD方面的應(yīng)用,供工程設(shè)計人員在AutoCAD二次開發(fā)中作為參考。
2 AutoLISP語言簡介
LISP語言是List Processing language的縮寫,它產(chǎn)生于20世紀50年代后期,是一種資格最老的程序設(shè)計語言之一。AutoLISP是嵌入在AutoCAD內(nèi)部的LISP語言,該語言可以給AutoCAD系統(tǒng)增添以高級語言編寫程序的能力,而且非常適合于圖形的應(yīng)用。
2.1 源程序編輯
AutoLISP程序文件代碼實際上是以ASCII文本文件的格式存儲的,其文件名的擴展名是木.LSP或幸.MNL,因此,AutoLISP的程序文件可以采用任何一種文本編輯軟件來編寫,如:EDIT、wPS、WORD等。
2.2 語法結(jié)構(gòu)
AutoLISP語言書寫指令所用的語法結(jié)構(gòu)與普通的口語化語言相比要簡單得多,但限制卻相當(dāng)嚴格,幾乎不能有絲毫的疏忽。
2.3 程序加載
盡管AutoLISP代碼可以使用鍵盤錄入到命令行上,但通常這只是調(diào)試程序的一種輔助手段。對于實用的AutoLISP程序,就需要將它編排成一個文本文件,然后從AutoCAD編輯器環(huán)境把它加載到內(nèi)存,進行測試和排錯,最后形成一個可重復(fù)使用的AutoLISP程序。可以使用LOAD函數(shù)在命令行加載,也可在ACAD.LSP文件中定義,以使每次啟動AutoCAD時自動加載。
2.4 程序運行
如果程序文件中定義了一個形如C:XXX的函數(shù),那么就能在COMMAND:提示符下通過鍵入該函數(shù)全名來運行該函數(shù),就像執(zhí)行標準的內(nèi)建式AutoCAD命令一樣。
過去的AutoCAD版使用的AutoLISP至多只能使用45K內(nèi)存,因此,在使用上常常會遇到結(jié)點空間不夠的情況,而且運行速度很慢,影響處理工作。AutoCAD從R9版起提供了擴充AutoLISP功能,可使用計算機的全部擴充內(nèi)存,最多可達14M。
擁有比原先大得多的工作空間運行AutoLISP大程序,并將騰出45K空間分給AutoCAD作為1/O分頁存取作業(yè)之用,使內(nèi)存與硬盤的交換次數(shù)減少而加快處理速度。
3 AutoLISP語言在開發(fā)礦山測繪工程CAD方面的應(yīng)用
AutoLISP語言提供了各種數(shù)據(jù)類型、預(yù)定義函數(shù)、特殊功能,可自動生成SCR接口文件,利用輸入輸出功能,讀寫函數(shù)實現(xiàn)與高級語言的數(shù)據(jù)交換。在AutoLISP語言編輯中,增加了AutoCAD繪圖命令,是設(shè)計和繪圖溶為一體,將求值器、運算程序直接裝入源程序,實現(xiàn)對當(dāng)前數(shù)據(jù)庫的直接訪問和修改,對屏幕圖形的適時修改,實現(xiàn)交互設(shè)計,為在繪圖領(lǐng)域中應(yīng)用人工智能提供了方便。
AutoCAD從R12版開始,引入了可編程對話框(Programmable Dialog Box,簡稱PDB),改進了圖形用戶接口(Graphics Users Interface,簡稱GUI),使用戶能夠更加容易、直觀地進行操作。通過一些簡單的手段,用戶便可以創(chuàng)建自己的對話框,從而為操作提供了一個友好的圖形界面。
創(chuàng)建一個對話框至少要兩種不同的語言來編寫兩個程序段。一個是對話框控制語言(Dialog Cont101Language,簡稱DCL)編制的對話框定義程序;另一個是用AutoLISP語言或ADS編寫的對話框驅(qū)動程序,文中采用的是AutoLISP語言。DCL文件是一個ASCII文本文件,用來定義對話框中的各種元素及其排列方式,如果用戶不指定元素的大小,AutoCAD會根據(jù)各平臺的現(xiàn)狀為元素設(shè)置一個缺省的值。對話框驅(qū)動程序能夠為對話框提供一個操作主控制函數(shù),用于啟動對話框并控制流程的運行。以“測量繪圖系統(tǒng)”軟件開發(fā)的部分源程序為例,對AutoLISP語言在開發(fā)中的應(yīng)用以及DCL文件的結(jié)構(gòu)和語法進行簡單陳述。
3.1 對話框定義程序
//;;;一一一一一一一一一一一一
//;;;文件名:CLCAD.DCL
//;;;功能:定義測繪工程CAD主菜單的各種控
件及排列
//;;;時間:2005年12月
//;;;一一一一一一一一一一一一
clcadss//對話框名
:dialog//對話框開始
fixed—width=true;//指定控件的寬度保持固定
width=45;//指定控件的寬度為45個字符
alignment=centered;//本簇中控件中心對齊
//對話框的標題
label=”測量繪圖系統(tǒng)(開敞式)V1.0”
:boxed.IOW{//定義一個加框行
children.alignment=centered;//所有子控件中心對齊
initial.focus=qx"http://光標初始定位為“LX”控件
:retirment.butto^a{//定義一個按鈕
key="Ix”;//該控件標識號為“Lx”
label=”展點”;//該控件的文本標題
}//一個控件定義結(jié)束
}//加框行定義結(jié)束
:column{//定義一個空白列
fixed.width=true;//指定控件的寬度保持固定
fixed.height=true;//指定控件的高度保持固定
height=13;//指定控件的高度為45個字符
}//空白列定義結(jié)束
:text{//定義一個控件
key="textl”;//該控件標識號為“textl”
label=”此處顯示出錯信息!W該控件的文本標題
}//控件定義結(jié)束
ok.cancel.help;//選用標準“OK-取消一幫助”控件
}//對話框定義結(jié)束
3.2 對話框驅(qū)動程序
;;;一一一一一一一一一一一一
;;;文件名:coordin.LSP
;;;功能:調(diào)用測量繪圖系統(tǒng)主菜單
;;;時間:2005年12月
;;;一一一一一一一一一一一一
;;;定義一個函數(shù),函數(shù)名為C:clcad
(defun c:clcad()
;;;JJo載DCL文件
(if;︱if1︳;(and(not dcl-id)(<(setq dcl·id(10addialog”
C:/acadwin/clcad.dcl”))O))(exit));endifl
;;;激活出對話框
(if;︱if2︳;(not new—dialog”clcadss”dcl—id))(exit);endif2
(setq what—next 4)
(while(<2 what—next);設(shè)置循環(huán)
(action—tile“l(fā)x”(C:lx)”);接受在lx按鈕上的操作
(action—tile“jkd(C:jkd)”);接受在jkd按鈕上的操作
(action-tile”zhsh””(e: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:jkdlIshr) 。
(setq what—next 4)
(if(not(new-dialog1"clcadss"dcl—id))(exit)))
((=what.next 3)
(C:help)
(setq what-next 4)
(if(not(new—dialog“clcadss”dcl—id))(exit)))
);cond
);while
(unload·dialog dcl—id);卸載DCL文件
(princ)
);defun;函數(shù)結(jié)束
;;;一一一一一一一
4 結(jié)語
上述源程序僅是“測量繪圖系統(tǒng)”軟件的主菜單調(diào)用情況,內(nèi)部功能函數(shù)的實現(xiàn)尚有許多內(nèi)容,在此不一一贅述了。以上為筆者在開發(fā)過程中的點滴體會,僅供工程設(shè)計人員參考,希望能起到拋磚引玉的作用。
相關(guān)文章
- 2021-09-08BIM技術(shù)叢書Revit軟件應(yīng)用系列Autodesk Revit族詳解 [
- 2021-09-08全國專業(yè)技術(shù)人員計算機應(yīng)用能力考試用書 AutoCAD2004
- 2021-09-08EXCEL在工作中的應(yīng)用 制表、數(shù)據(jù)處理及宏應(yīng)用PDF下載
- 2021-08-30從零開始AutoCAD 2014中文版機械制圖基礎(chǔ)培訓(xùn)教程 [李
- 2021-08-30從零開始AutoCAD 2014中文版建筑制圖基礎(chǔ)培訓(xùn)教程 [朱
- 2021-08-30電氣CAD實例教程AutoCAD 2010中文版 [左昉 等編著] 20
- 2021-08-30電影風(fēng)暴2:Maya影像實拍與三維合成攻略PDF下載
- 2021-08-30高等院校藝術(shù)設(shè)計案例教程中文版AutoCAD 建筑設(shè)計案例
- 2021-08-29環(huán)境藝術(shù)制圖AutoCAD [徐幼光 編著] 2013年P(guān)DF下載
- 2021-08-29機械A(chǔ)utoCAD 項目教程 第3版 [繆希偉 主編] 2012年P(guān)DF