电竞比分网-中国电竞赛事及体育赛事平台

分享

曉東CAD家園網(wǎng) - 淺談AutoLISP在水工CAD方面的應(yīng)用

 hxj 2008-05-12
文章總數(shù): 2630 | 本類文章(含子類): 65
淺談AutoLISP在水工CAD方面的應(yīng)用
提交日期:2003-10-23   瀏覽: 538

  水利科技與經(jīng)濟

WATER CONSERVANCY SCIENCE AND TECHNOLOGY AND ECONOMY

1999年 第5期 第1卷 Vol.5 No.1 1999

--------------------------------------------------------------------------------

淺談AutoLISP在水工CAD方面的應(yīng)用

汪恩良 張菊蓉 任樹坤

[摘 要] AutoLISP語言作為嵌入在AutoCAD內(nèi)部的具有智能特點的編程語言,是開發(fā)應(yīng)用AutoCAD不可缺少的工具。只是大部分設(shè)計人員尚不能對AutoCAD進行二次開發(fā),對引進的CAD軟件進行修改,編制出一些實用的小軟件。本文以開發(fā)“寒區(qū)水閘計算機輔助設(shè)計支持系統(tǒng)”軟件為例,簡單介紹一下AutoLISP在開發(fā)水工CAD方面的應(yīng)用,供工程設(shè)計人員在AutoCAD二次開發(fā)中作為參考。

[關(guān)鍵詞] AutoLISP 水工 CAD DCL

1 前言

  隨著科學技術(shù)的發(fā)展,微型計算機在各行各業(yè)推廣和應(yīng)用越來越普及,計算機技術(shù)已不僅僅應(yīng)用于科學計算,而且逐漸發(fā)展成為和許多科學技術(shù)部門結(jié)合起來建立各不相同的計算機輔助系統(tǒng),計算機輔助設(shè)計(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ā)展尤為迅速,現(xiàn)已成為這些領(lǐng)域研究問題的唯一手段。已經(jīng)證明在水工設(shè)計中引進CAD技術(shù)無論計算、繪圖都使我們的設(shè)計工作上一個臺階,無論是質(zhì)量還是速度,都是令人滿意的。水利部已正式要求各設(shè)計部門在2000年達到所有圖紙均由計算機繪出。但是,目前各設(shè)計部門大多只能應(yīng)用Auto CAD軟件包,一筆一筆地繪出圖形。工程設(shè)計人員大部分時間花費在繁瑣的計算、繪圖中,設(shè)計工作有很大的重復性。只是大部分設(shè)計人員尚不能對AutoCAD進行二次開發(fā),對引進的CAD軟件進行修改,編制出一些實用的小軟件。本文以開發(fā)“寒區(qū)水閘計算機輔助設(shè)計支持系統(tǒng)”軟件為例,簡單介紹一下Auto LISP在開發(fā)水工CAD方面的應(yīng)用,供工程設(shè)計人員在AutoCAD二次開發(fā)中作為參考。

2 AutoLISP語言簡介

  LISP語言是List Processing language的縮寫,它產(chǎn)生于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)與普通的口語化語言相比要簡單得多,但限制卻相當嚴格,幾乎不能有絲毫的疏誤。下面簡單介紹幾種常用語句:

 ?、儋x值語句:

  X=2.345 (setq X 2.34)

  STR=’This is a string!’ (setq STR “This is a string!”)

 ?、谇笾颠\算語句:

  E=Q÷(4.43×M×B×HO-2) (setq E(/Q( 4.43 M B (sqrt HO))))

  ③判斷語句:

  如果T小于0.75執(zhí)行語句1(if(

 ?、苎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)容,在此不一一贅述了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多