【摘 要】AutoCAD在應(yīng)用方面可能需要根據(jù)自身不同的需求,量身定制不同功能,來強(qiáng)化CAD的功能,以便于開發(fā)設(shè)計人員降低工作強(qiáng)度,提升效率。本文依托Visual Lisp編輯器,以AutoLisp語言為基礎(chǔ),對AutoCAD在非標(biāo)件自動化設(shè)備開發(fā)中的常用的命令程序二次開發(fā),組立圖的拆分零件圖,做到自動拆分圖面,這樣可以有效降低工作符合,提升工作效率。
【關(guān)鍵詞】AutoCAD AutoLisp 二次開發(fā) Visual Lisp
一、引言
計算機(jī)輔助設(shè)計(CAD)[1]是指利用計算機(jī)及圖形設(shè)備輔助設(shè)計人員完成設(shè)計工作。作為設(shè)計人員,不僅需要對非標(biāo)件自動化設(shè)備整體布局與規(guī)化,還要在規(guī)定的時間內(nèi)完成總裝圖和零件圖的輸出。因此,整個項(xiàng)目對時間進(jìn)度的管控顯得尤為重要。
在實(shí)際工作中,非標(biāo)件自動化設(shè)備的設(shè)計通常是采用自下而上的設(shè)計方式來完成設(shè)備的整體開發(fā)。當(dāng)完成設(shè)計總圖后需要將裝配圖拆分成零件圖,拆分后的圖面需逐個編輯和完善零件圖的圖框參數(shù),完善零件圖細(xì)節(jié)的設(shè)計并完成標(biāo)注。這些工作重復(fù)性高,操作步驟繁瑣,價值低,同時會耗費(fèi)設(shè)計人員大量時間和精力。
基于這樣的背景下,依托公司現(xiàn)有的一些資源,結(jié)合實(shí)際工作的需求,開發(fā)AutoCAD的二次開發(fā)命令尤其重要。這樣不僅可以有效減輕設(shè)計人員工作負(fù)荷,而且可以大大提高工作效率。由簡單快捷的AutoCAD二次開發(fā)命令就可以取代原來人工大量重復(fù)性的工作,使AutoCAD的二次開發(fā)必要性凸顯出來。
圖1 拆分組立圖流程圖
二、AutoLisp語言
AutoLISP[2]是專門為二次開發(fā)AutoCAD而設(shè)計的編程語言,它繼承了LISP語言的特點(diǎn),并內(nèi)置在AutoCAD軟體中,是LISP語言和AutoCAD有機(jī)結(jié)合的產(chǎn)物。
在VisualLISP環(huán)境中兼容以前的AutoLISP程序。在VisualLISP集成環(huán)境下編寫AutoLISP程序,改變了原來編輯、調(diào)試、查看變量和修改的模式,不需要在另外的文本編輯程序編寫程序代碼。VisualLISP編輯器下,可以直接新建文本,可以編譯、調(diào)試和查看變量。文本中字體顏色區(qū)分程序類別,使程序的閱讀與查找變得更加方便。在調(diào)試功能下中,增加了跟蹤命令、立即停止、出錯時中斷等,這些極大方便程序的調(diào)試。
使用AutoLISP語言可以完成各種工程分析與計算、繪制復(fù)雜的圖形,還可以新增的AutoCAD快捷命令、驅(qū)動對話框和命令菜單。同時能夠使AutoCAD具有一定智能化、參數(shù)化的功能,還可以有助于設(shè)計人員將精力和時間用于產(chǎn)品的創(chuàng)新設(shè)計上,實(shí)現(xiàn)計算機(jī)輔助設(shè)計的目的。
三、AutoCAD二次命令開發(fā)
在非標(biāo)件自動化設(shè)備設(shè)計中,當(dāng)完成設(shè)計總圖后需要將每個零件圖拆分出來,這就是重復(fù)性高,步驟繁瑣,價值低的工作對于非標(biāo)件自動化設(shè)備,我們通常是先完成組立圖。一般來說,組立圖包含眾多圖層,每個圖層上有一個零件的三視圖。下面我們的工作是將每一個零件提取、拆分出來。這樣可以逐一將零件圖提取出來,但是這工作耗時耗力。我們希望改進(jìn)、完善程序,最終達(dá)到一鍵完成自動拆分目標(biāo)。下面我們通過流程圖分析作業(yè)步驟,如圖1所示。
Fig 1 Split Assembly Flowchart Of FIG.
經(jīng)流程圖的規(guī)劃后,我們有了明確的思路,并過程并復(fù)雜。所需要注意的是同一圖層中的實(shí)體集合,在復(fù)制移動后,還需要將它們從集合中逐一刪除。另一點(diǎn)是設(shè)置復(fù)制移動的動點(diǎn)。將這兩點(diǎn)解決就能完成該程序,具體應(yīng)用代碼[3]及注解如下:
(defun c:be (/ wor pt1 pt2 oce wide ss num fn lay ss1 pt num1 nam)
……
(setq pt1 (getpoint \"\n請選要拆分組立圖的左下角:\")
pt2 (getpoint \"\n請選要拆分組立圖的右上角:\")
ss (ssget \"W\" pt1 pt2)
wide (* 1.2 (abs (- (car pt1) (car pt2))));//計算出整個組圖寬度
)
……
(while (>= (sslength ss) 1)
(progn
(setq fn (entget(ssname ss 0))) ;//取\"ss\"集合中第一個實(shí)體名
(setq lay (cdr (assoc 8 fn))) ;//取上述實(shí)體所在層名
(setq ss1 (ssget \"x\" (list (cons 8 lay)))) ;//所有\(zhòng)"lay\"層實(shí)體加入集合\"ss1\"中
(setq pt (list (+ (* num wide) (car pt1)) (cadr pt1))) ;//設(shè)置實(shí)體置放點(diǎn)
(command \"copy\" ss1 \"\" pt1 pt) ;//復(fù)制移動
(setq num1 0)
(repeat (sslength ss1) ;//以ss1選擇集中對象的數(shù)量作為循環(huán)的次數(shù).
(progn
(setq nam (ssname ss1 num1))
(ssdel nam ss) ;//刪除ss1選擇集中的實(shí)體nam.
(setq num1 (+ num1 1))
) ;//將被分解的實(shí)體從\"ss\"集合中清除
)
……
)
通過努力,完成自動拆分組立圖的程序,經(jīng)應(yīng)用效果很好。這不但豐富了AutoCAD的快捷命令,而且給繪圖人員帶來極大便利,工作效率大幅提升,工作負(fù)荷反而減輕。同時,使設(shè)計人員看到AutoLISP功能的強(qiáng)大,增強(qiáng)設(shè)計人員繼續(xù)深入學(xué)習(xí)的信心。
工作中還有大量的工作可以實(shí)現(xiàn)程序化,程序的開發(fā)帶來的效益是巨大的。這就是設(shè)計人員今后工作努力的方向,不僅方便自己,還可以橫向推廣,促使廣大同仁共同進(jìn)步。
四、結(jié)束語
本文是以AutoCAD自帶的VisualLISP為開發(fā)工具,運(yùn)用語法簡單、編寫便捷的AutoLISP語言,非常適合大部分初識繪圖的設(shè)計人員。因?yàn)椴灰笕藛T具備高深的軟件知識體系,只要通過快速學(xué)習(xí),可以自行編寫高效實(shí)用的程序,提升自我能力的同時,也提高了工作效率。
參考文獻(xiàn):
[1] 彭時礦, 計算機(jī)輔助設(shè)計軟件在建筑設(shè)計中的研究與應(yīng)用[D], 上海交通大學(xué),2009
[2] 趙興柱, 關(guān)于AtuoLISP在CAD繪制采礦設(shè)計圖中的應(yīng)用[J],有色礦冶,2011(4)
[3] 吳永進(jìn),林美櫻, AutoCAD程序設(shè)計魔法書基礎(chǔ)篇 [M],北京:中國鐵道出版社,2003