(常州機(jī)電職業(yè)技術(shù)學(xué)院,常州 213164)
Autolisp是美國(guó)Autodesk公司開發(fā)的lisp語(yǔ)言,該語(yǔ)言因語(yǔ)法簡(jiǎn)單、函數(shù)強(qiáng)大、編寫環(huán)境寬、直譯等特點(diǎn),而在AUTOCAD軟件的二次開發(fā)方面得到廣泛應(yīng)用,特別是在機(jī)械行業(yè),其影響及普及程度處于最重要地位。為了進(jìn)一步擴(kuò)充該軟件的功能和應(yīng)用行業(yè),專業(yè)人士應(yīng)用AutoLISP技術(shù)對(duì)AUTOCAD進(jìn)行二次開發(fā)的研究一直沒有停止過(guò),也取得了較豐碩的成果。謝中梅等[1]用Auto LISP和Visual Basic開發(fā)的程序,完成了AUTOCAD軟件圖表的設(shè)計(jì);張勇[2]研究了基于特定設(shè)計(jì)對(duì)象,AutoCAD的二次開發(fā)系統(tǒng);張洪雷[3]應(yīng)用AutoLISP技術(shù),就如何制定產(chǎn)品結(jié)構(gòu)和生產(chǎn)方案進(jìn)行了研究;邱林[4]等用AutoLISP編程,對(duì)漸開線弧齒圓柱齒輪實(shí)現(xiàn)了參數(shù)化建模。本研究以銷軸為例詳細(xì)介紹AutoCAD軟件AutoLISP二次開發(fā)的方法與步驟。
AutoLISP是AutoCAD內(nèi)部解釋型的API語(yǔ)言,它適用于交互式程序的二次開發(fā),它不是面向?qū)ο蟮恼Z(yǔ)言,而是一種人工智能語(yǔ)言。嵌入到AutoCAD里的AutoLISP語(yǔ)言是COMMON LISP語(yǔ)言的一個(gè)子集,它擁有強(qiáng)大的可進(jìn)行圖形處理的函數(shù),以一般高級(jí)語(yǔ)言結(jié)構(gòu)形式實(shí)現(xiàn)圖形處理。其程序可被用來(lái)進(jìn)行重復(fù)操作,以完成圖形的重復(fù)性處理任務(wù),軟件可通過(guò)定制化的開發(fā)和程序編寫,在AutoCAD 軟件上生成相應(yīng)的命令。
針對(duì)AutoCAD軟件的二次開發(fā),AutoLISP增加了許多功能,使AutoLISP程序與AutoCAD繪圖命令融為一體;利用AutoLISP語(yǔ)言程序編寫功能,可實(shí)時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)、修改,以達(dá)到交互式設(shè)計(jì)的目的。Visual LISP是AutoLISP的衍生產(chǎn)物,至Visual LISP引入到AutoCAD后,它擴(kuò)展了AutoLISP語(yǔ)言功能,具備了Active X自動(dòng)化API與對(duì)象交互技術(shù),同時(shí),擴(kuò)展了AutoLISP反饋事件的能力。與AutoLISP相比,VisualLISP還提供了一個(gè)集成開發(fā)環(huán)境(IDE),通過(guò)利用Active X/COM自動(dòng)化API等技術(shù),使AutoLISP程序開發(fā)周期縮短,源程序泄密性得到有效擬制,同時(shí),Visual LISP因避免了LISP程序繁鎖的調(diào)試過(guò)程,因而其效率明顯提高,編譯后程序的運(yùn)行效率比解釋型AutoLISP程序快幾倍[5,6]。
圖1為本次AutoLISP二次開發(fā)實(shí)例零件—銷軸工程圖。表1為該銷軸尺寸表。從圖表中可知,該零件為機(jī)械零件設(shè)計(jì)手冊(cè)中的標(biāo)準(zhǔn)零件,其由一系列尺寸組成,在實(shí)際工程繪圖中,若對(duì)每一尺寸進(jìn)行繪制,則其工作效率很低,而采用AutoLISP編程驅(qū)動(dòng)銷軸尺寸值,則可及時(shí)完成零件工程圖的繪制。其二次開發(fā)步驟按圖2所示流程進(jìn)行。
圖1 銷軸工程圖
圖2 二次開發(fā)流程
表1 銷軸尺寸表
零件結(jié)構(gòu)尺寸分析主要是研究零件的形狀、尺寸和角度值,列出尺寸值或角度值的換算公式,為AutoLISP程序編寫做好前期準(zhǔn)備工作。建立dat文件是要建立零件尺寸數(shù)據(jù)庫(kù),如表1所示,即建立AutoLISP可以讀取的數(shù)據(jù)庫(kù)文件,dat文件的輸入要與原始數(shù)據(jù)一一對(duì)應(yīng),列項(xiàng)名稱可以變換,但一定要與AutoLISP程序中的名稱相一致,從而避免CAD軟件在讀取數(shù)據(jù)時(shí)出現(xiàn)誤讀現(xiàn)象。AutoLISP程序的編寫是在Visual LISP集成開發(fā)環(huán)境下完成的,在調(diào)用AutoLISP內(nèi)置函數(shù)的基礎(chǔ)上,編程人員定義自定義函數(shù),以此完成程序的編寫,該過(guò)程是二次開發(fā)中最重要的環(huán)節(jié)。AutoLISP程序調(diào)試主要是為了檢驗(yàn)程序的對(duì)與錯(cuò),修改或調(diào)整部分源程序,以便當(dāng)程序?qū)氲紸utoCAD中時(shí),AutoLISP程序能夠順利運(yùn)行,以達(dá)到預(yù)期繪圖之目的。圖3為AutoLISP程序編寫與調(diào)試流程,由圖可知,在完成了零件尺寸分析的基礎(chǔ)上,即進(jìn)入程序編寫階段,當(dāng)程序載入到AutoCAD系統(tǒng)中后,開始進(jìn)行程序調(diào)試判斷,若程序無(wú)誤,則程序編寫結(jié)束,若所撰寫的程序存在錯(cuò)誤,則重新進(jìn)入程序編寫與調(diào)試流程,最終獲得正確的AutoLISP程序。
圖3 AutoLISP程序編寫與調(diào)試流程
圖4 自定義CAD菜單步驟
自定義CAD菜單的目的是為了在CAD繪圖界面中可以方便地調(diào)取程序,及時(shí)繪制出零件工程圖。其具體操作步驟如圖4所示,在CAD繪圖界面中點(diǎn)擊菜單“工具”,選擇“自定義”—“界面”,出現(xiàn)圖5(a)所示的“自定義用戶界面”對(duì)話框,在“主CUI中的定義”界面中選擇“custom.cui”,點(diǎn)擊“菜單”項(xiàng),按鼠標(biāo)右鍵“新建”菜單,名稱取為“機(jī)械零件”如圖5(b)所示。在命令列表對(duì)話框中,選類別為“自定義命令”,點(diǎn)擊“新建命令”,在信息對(duì)話框中將命令改成“銷軸”。按住“銷軸”并拖放到“機(jī)械零件”下,如圖5(c)所示。在圖5(d)所示“宏”中載入AutoLISP程序,其格式為“^C^C(load "銷軸.lsp")銷軸”。最后在CAD界面中出現(xiàn)如圖6所示的菜單。
圖5 自定義CAD菜單操作流程
圖6 自定義命令菜單
AutoLISP語(yǔ)言將函數(shù)共分成兩大類:一類是AutoLISP語(yǔ)言所具有的如數(shù)學(xué)功能運(yùn)算、關(guān)系邏輯判斷等內(nèi)部函數(shù),每個(gè)函數(shù)均有特定功能;另一類是defun自定義函數(shù)。內(nèi)部函數(shù)與defun自定義函數(shù)間作某種調(diào)用與組織,就可編寫出某一程序,此應(yīng)用程序以純文本文件方式保存,調(diào)用該程序即可完成指定功能操作,從而能在電腦中快速、方便地繪制出圖形。
AutoLISP中的defun自定義函數(shù)編寫格式是:
(defun C:<函數(shù)名>([實(shí)參變量名表[/局部變量名表]]<表達(dá)式>…),自定義函數(shù)名為一字符串。
以下是用記事本編輯器編寫的AutoLISP程序,存盤路徑為 C: / cadprograms/ PIN.LSP/ ,調(diào)用自定義函數(shù)時(shí),按以下格式執(zhí)行:
(函數(shù)名 <實(shí)參1> <實(shí)參2> …),該程序已在AutoCAD 2010 中調(diào)用過(guò)[7]。
在Visual LISP編輯器下編寫的銷軸部分程序代碼是:
由圖6可知,當(dāng)點(diǎn)擊機(jī)械零件下拉菜單“銷軸”時(shí),在“命令”對(duì)話框下將出現(xiàn)如圖7(a)所示的“輸入銷軸插入點(diǎn)<退出>:”命令,輸入插入點(diǎn)后,命令對(duì)話框?qū)⒁筝斎脘N軸直徑、長(zhǎng)度和旋轉(zhuǎn)角度,如圖7(b)~圖7(d)所示。將以上數(shù)值確定后,在AutoCAD繪圖界面中將繪制出銷軸二維視圖,如圖8所示。圖9為某一尺寸用AutoCAD軟件生成的銷軸三維實(shí)體圖[8]。
從圖6所示的自定義命令菜單中可知,點(diǎn)擊自定義命令菜單中的某零件后,即可調(diào)用所需要的零件對(duì)話框,在圖7所示的命令菜單后輸入相應(yīng)尺寸,就可實(shí)現(xiàn)對(duì)某零件圖形的調(diào)用。
從以上銷軸二次開發(fā)的結(jié)果可知,AutoLISP程序相對(duì)較為簡(jiǎn)潔,初學(xué)者容易理解與掌握,軟件開發(fā)后使用起來(lái)也很方便。修改與調(diào)用也非常容易,通過(guò)AutoLISP的二次開發(fā),擴(kuò)展了AutoCAD的功能,達(dá)到了軟件使用效率高、準(zhǔn)確性高的目的。
圖7 銷軸調(diào)用程序
圖8 銷軸工程圖
圖9 銷軸三維實(shí)體圖
本文以銷軸零件的二次開發(fā)為例,詳細(xì)介紹了應(yīng)用Autolisp對(duì)AutoCAD進(jìn)行二次開發(fā)的過(guò)程[9]。從結(jié)果看,采用該方法進(jìn)行二次開發(fā),可快速開發(fā)出各類零件的命令集,這將大大提高AutoCAD的繪圖效率和準(zhǔn)確性;可在一定程度上減輕工程技術(shù)人員查閱手冊(cè)的繁鎖工作,從而使得AutoCAD輔助設(shè)計(jì)效能得到進(jìn)一步發(fā)揮。開發(fā)者可基于項(xiàng)目需要選擇Autolisp開發(fā)工具,實(shí)現(xiàn)對(duì)AutoCAD的定向開發(fā),制作出企業(yè)定制的AutoCAD系統(tǒng)。