利用VLISP開發(fā)AutoCAD下的批量圖紙?zhí)幚砜蚣躝第1頁
利用VLISP開發(fā)AutoCAD下的批量圖紙?zhí)幚砜蚣躝第2頁
利用VLISP開發(fā)AutoCAD下的批量圖紙?zhí)幚砜蚣躝第3頁
利用VLISP開發(fā)AutoCAD下的批量圖紙?zhí)幚砜蚣躝第4頁
利用VLISP開發(fā)AutoCAD下的批量圖紙?zhí)幚砜蚣躝第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、利用Visual LISP開發(fā)AutoCAD下的圖紙批量處理程序張子引摘要 本文介紹了如何用Visual LISP語言編制AutoCAD下的圖紙批量處理程序的框架及其應(yīng)用實例。關(guān)鍵詞 Visual LISP 圖紙批量處理 Active X在工程設(shè)計各專業(yè)中,AutoCAD以其強大的圖形支撐能力和開放的結(jié)構(gòu)體系,無可爭辯地成為CAD市場的龍頭,幾乎在工程設(shè)計的每個專業(yè)都有應(yīng)用。隨著時間的積累,每一個工程制圖人員手上都積累了大量的圖紙,對圖紙批量處理的需求日顯迫切,隨著AutoCAD 2000 及2002版的推出,AutoCAD全面支持多文檔處理,autoLISP語言也升級為Visual LISP

2、,增加了對Active X的支持,大大增強了autoLISP語言的處理能力,為批量圖形處理的編程實現(xiàn)創(chuàng)造了條件。我參考多方的資料和Active X幫助文檔編制了圖紙批量處理框架,該框架在AutoCAD的多文檔支持下,利用Active X技術(shù)打開圖形并獲得圖形對象,對其進行處理,處理完成后將圖形關(guān)閉再打開下一張圖形,依次進行完成批量處理。上述處理過程中應(yīng)注意在批量處理框架內(nèi)打開的圖形不能激活為當前圖形,否則會造成自動化過程失敗(automation failed),因為Visual LISP程序本身不能跨圖檔執(zhí)行,實現(xiàn)批量處理的實質(zhì)是利用Active X技術(shù)將其它圖形作為對象進行處理。下面為框架

3、的代碼:(arxload acetutil.arx NIL) ;需要相應(yīng)版本的ET(Express Tools)工具支持 (vl-load-com)(defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent );主程序定義(setq OLDECHO (getvar cmdecho);保存系統(tǒng)變量值(setvar cmdecho 0)(setq path(strcat(vl-string-right-trim(strcase (acet-ui-pickdir選擇目錄(vl-string-right-trim (ge

4、tvar dwgprefix) 批量修改)(setq OLDLSP (getvar ACADLSPASDOC);保存系統(tǒng)變量值(setvar acadlspasdoc 0)(setq dwgname (vl-directory-files path *.DWG)(setq num 0)(if (/= dwgname NIL)(progn(setq APP (vlax-get-acad-object);獲得Acad 對象(repeat (length dwgname)(setq DWGNAME2 (strcase (strcat path (nth num dwgname)(setq doc (

5、vla-open (vla-get-documents APP) DWGNAME2);打開圖形并獲得其對象;以下用省略號代表具體處理程序,用戶可在此處添加自己所需的處理的代碼。 ; ; (vla-close doc :vlax-false);關(guān)閉圖形(不檢查是否保存)(setq num (1+ num)(vlax-release-object doc)(vlax-release-object APP)(prompt n所選目錄中未有任何圖形!)(setvar acadlspasdoc OLDLSP);恢復(fù)系統(tǒng)變量值(setvar cmdecho OLDECHO) ;恢復(fù)系統(tǒng)變量值(princ)

6、應(yīng)用實例:1將框架中的省略號換為如下三行即可實現(xiàn)圖紙的批量清理(repeat 5 (vla-purgeall DOC)(vla-save DOC);保存圖形(prompt (strcat n DWGNAME2 !)2將框架中的省略號換為如下幾行即可實現(xiàn)圖紙中圖層顏色的批量修改(vlax-for ENT_LAY (vla-get-layers DOC)(vla-put-color ENT_LAY COL)(vla-save DOC)(prompt (strcat n DWGNAME2 !)其中COL為要修改的顏色代碼變量,可將其作為主程序的參數(shù)。主程序的定義行改為:(defun CHCOLOR

7、(COL)用法: (CHCOLOR (acad_colordlg 7)或 (CHCOLOR 7)3將框架中的省略號換為如下幾行即可實現(xiàn)圖紙中字符串的替換,可用于批量工程名稱的修改。(setq msp (vla-get-ModelSpace doc)(vlax-for ENT msp(if (and (vlax-property-available-p ENT TEXTSTRING)(wcmatch (setq STR (vla-get-textstring ENT)(strcat * OLDTXT *)(progn(setq STR (vl-string-subst NEWTXT OLDTXT

8、 STR)(vla-put-textstring ENT STR)(vla-save DOC)(prompt (strcat n DWGNAME2 !)其中NEWTXT OLDTXT分別為的新舊文字,可將其作為主程序的參數(shù)。主程序的定義行改為:(defun CH_TXT(NEWTXT OLDTXT)用法: (CH_TX AAA BBB)4將框架中的省略號換為如下代碼,實現(xiàn)將圖形種特定層(本例為“DATA”層)的字符串按順序?qū)懭胛募ext.txt中,該程序用于我單位的一個材料統(tǒng)計軟件中,可將圖形中的材料表內(nèi)容寫入文本文件中。(setq msp (vla-get-ModelSpace doc)(

9、vlax-for ent msp(if (and (= DATA (vla-get-layer ent)(vlax-property-available-p ENT TEXTSTRING)(progn(setq text (vla-get-TextString ent)(setq pt(list(vlax-safearray-get-element(vlax-variant-value (vla-get-Insertionpoint ent)(vlax-safearray-get-element(vlax-variant-value (vla-get-Insertionpoint ent)1)

10、(vlax-safearray-get-element(vlax-variant-value (vla-get-Insertionpoint ent)2)(setq tlist (append tlist (list (append pt (list text)(setq l (length tlist)(setq i 1)(while ( i l)(setq j i)(while ( j l)(setq y1 (cadr (nth (1- i) tlist)(setq y2 (cadr (nth j tlist)(if (and ( (abs (- y2 y1) 1)(progn(setq

11、m 0)(setq tlist2 nil)(while ( m l)(if (= m (1- i)(setq tlist2 (append tlist2 (list (nth j tlist)(progn(if (= m j)(setq tlist2 (append tlist2 (list (nth (1- i) tlist) (setq tlist2 (append tlist2 (list (nth m tlist) )(setq m (1+ m)(setq tlist tlist2)(progn(setq x1 (car (nth (1- i) tlist)(setq x2 (car

12、(nth j tlist)(if(and ( (abs (- x1 x2) 2) ( (abs (- y2 y1) 1) (progn(setq m 0)(setq tlist2 nil)(while ( l 0)(progn(setq fn (open (strcat (getvar dwgprefix) text.txt) r) (if fn(progn(close fn)(setq fn (open (strcat (getvar dwgprefix) text.txt) a) )(setq fn (open (strcat (getvar dwgprefix) text.txt) w)

13、 )(setq i 0)(while ( i l)(setq one )(setq str (cadddr (nth i tlist)(princ str fn)(if ( i (1- l) (princ , fn)(setq i (1+ i)(princ n fn)(close fn)(setq tlist nil)(prompt n該圖中的data層的數(shù)據(jù)已寫入文件text.txt中!)從上面的這些例子可看出利用該批量處理框架可以完成許多工作,用戶可編制自己的處理程序?qū)崿F(xiàn)所需的功能,極大的提高工作效率。這是本人的一點編程心得,供大家參考。注:本文程序的執(zhí)行需先安裝AutoCAD相應(yīng)版本的Express tools 工具。參考文獻孫江宏 丁立偉 著 Visual LISP R142000編程與應(yīng)用 科學(xué)出版社 1999二代龍震工作室 編著 AutoCAD LISP/VLISP 函數(shù)庫查詢詞典 中國鐵道出版社 2003文件說明:Visual L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論