CAD批量處理工具是基於AutoCAD二次開發的批處理插件。將程序加載到CAD中,使用自定義的Lisp代碼就可對多個文檔進行批量操作。
1.文件說明
CAD批量處理工具批處理程序包含兩個文件:一是基於VBA的程序,二是基於Lisp的程序。
2.安裝運行
(1)將程序拷入CAD安裝路徑下的Support文件夾下,如E:\Program Files\AutoCAD 2007\Support;
(2)運行CAD,在命令行中鍵入"APPLOAD",在彈出的選擇對話框中選擇上一步中Support文件下的.lsp,點擊"加載",關閉對話框;
(3)如果加載成功,命令行中輸出"已成功加載.lsp",輸入命令BAT即可運行程序。程序主界面如下:
注意:如果需要CAD啟動時即自動加載此工具,需要修改CAD安裝路徑E:\Program Files\AutoCAD 2007\Support下acad2007.lsp
(arxload"vel.arx") (if (not (= (substr (ver) 1 11) "Visual LISP")) (load "acad2007doc.lsp"); ) ;; Silent load. (princ)可在代碼中的任何地方用下列常數代替實際值:
3.工具說明
本程序具體操作流程如下:
(1)【添加文件】或【添目錄】來選擇要進行批量處理的Dwg文件,也可以通過【刪除】和【全清】按鈕來操作清除文件列表中的文件;
(2)單擊【編輯】按鈕,彈出編輯代碼窗口,如圖3-2所示。用戶可編輯、打開、保存代碼,編輯完成后,單擊【關閉】,程序會自動保存編輯內容,並更新顯示在代碼窗口(如果使用腳本語言,請選擇【Script代碼】);
(3)點擊【開始批處理】,程序將對文件列表中的文件分別打開,並按代碼窗口中的代碼操作(如果勾選"處理完成后自動存盤",操作結果文件將覆蓋原始數據)
4.代碼分析
本程序的測試用例是兩幅宗地圖,現在的要求是:
- 將JZD和JZP層的所有文字字體改為宋體;
- 將HZ樣式改為txt.shx、hztxt.shx(大字體);
- 將JZD、JZP和JMD層所有對象顏色改為紅色。
測試代碼為測試用例文件夾下的"宗地圖修改20140820.lsp",現對其中比較關鍵的代碼進行說明:
(1)獲取某層的文字
-
(setq ss (ssget "x" (list (cons 0 "*TEXT") (cons 8 "JZD"))));
使用了ssget建立選擇要素集,其中"x"代表選擇所有,0和8表示不同的組,*TEXT是過濾選擇文本,JZD要進行選擇的圖層。
(2)新建或更改文本樣式
-
(command "_STYLE" "ST" "SimSunb.ttf" "0" "1" "" "" "")
-
(command "_style" "hztxt" "txt.shx,hztxt.shx" 0 0.8 0 "n" "n" "n")
新建樣式使用了_style命令,"ST"表示樣式名稱,"SimSunb.ttf"字體名稱;如果要使用大字體的樣式,字體參數設置為如"txt.shx,hztxt.shx";如果樣式名已存在命令將人修改參數,如果不存在,則會新建立。
(3)將某層的顏色改為指定的顏色
-
(vla-put-color layer color_no)
調用系統中的函數來修改層顏色,其函數原型如上所示,它在Express Tools中,注意要確保安裝程序安裝了此組件。其中顏色參數使用枚舉值:
常數 |
值 |
描述 |
vbBlack |
0x0 |
黑色 |
vbRed |
0xFF |
紅色 |
vbGreen |
0xFF00 |
綠色 |
vbYellow |
0xFFFF |
黃色 |
vbBlue |
0xFF0000 |
藍色 |
vbMagenta |
0xFF00FF |
紫紅色 |
vbCyan |
0xFFFF00 |
青色 |
vbWhite |
0xFFFFFF |
白色 |
(4)將層對象中的顏色隨層
-
(command "_.chprop" "_all" "" "_color" "_bylayer" "")
將圖層的顏色修改,並不能將已有的對象的顏色改掉,需要將圖層對象的顏色設置為隨層。
5.常見問題
(1)打開文件是提示選擇字體
CAD的字體中缺少這種字段,要么使用另一個字體,要么去下載缺失的字體,並放在CAD安裝路徑下的Fonts文件夾下,如E:\Program Files\AutoCAD 2007\Fonts
(2)添加某一個圖形時,不能加載到列表中
本程序的目的是進行批量處理,至少要同時選擇兩個圖形文件才能正確加載到文件列表,如果只選擇一個文件時,則不能正確添加。
(3)運行時報錯,保存文檔時出錯
一般地,在批處理時,都需要勾選"處理完成后自動存盤",但如果處理之前此圖形已打開,保存時就會報錯,所以,在批處理時圖形不會打開。
(4)怎樣驗證操作是否失敗?
驗證操作最主要的方式是通過對比測試案例中的錯誤是否修正,如果執行的代碼,會彈出CAD的幫助窗口,建議在批量處理之前,測試好Lisp代碼。
(5)命令行報錯:沒有定義vlax-get-acad-object
在測試Lisp代碼中,使用了vlax-get-acad-object這個對象,而它是屬性Express Tools中的,所以在安裝軟件時,要選擇安裝Express Tools
(6)單獨測試lisp通過,批處理失敗
只要單獨測試lisp代碼能夠達到目的,批量處理一般能達到目的。需要注意的是,如果lisp代碼中定義了無參的函數,只需將函數里的內容復制到BatchProc的代碼窗口,而無需整個函數;如果lisp代碼中定義了帶參的函數,需要將整個函數復制進去,並將調用的命令復制在后面。
(7)出現異常: 0xC0000005 (訪問沖突)
調用BAT命令出現"出現異常: 0xC0000005 (訪問沖突)", 一般在調用command時候會出現這種情況,只能重裝CAD了。
(8)報錯"info或'info透明調用 ***是否垂直?"
調用系統打印命令(-plot)批量打印宗地圖,在測試機上測試通過,但在客戶機上報錯:"使用命令:info或'info透明調用 ***是否垂直? <N>",只能打印第一個文件。
CAD中,有許多的命令時可以透明使用的,透明命令其實就是可以讓用戶在使用另一個命令時,依然能夠在命令行中輸入這些命令的功能。所以透明命令會經常被用於更改圖形的設置或顯示。當系統完成了透明命令后,就會恢復執行原命令了。
測試機上能通過說明是客戶機環境問題,我嘗試把CASS環境關閉后,即可實現批量打印。