王晟磊
(上海市政工程設計研究總院(集團)有限公司武漢分公司,武漢 430000)
工程設計文件一般由多個獨立的圖形文件組成。圖紙打印時需要逐個手動打開文件,再重復設置打印樣式,才能進行打印。此外,工作中常需多次將所有設計圖紙生成一份PDF文件,這樣還需進行PDF合并工作。圖紙打印工作內容重復,嚴重影響設計人員的工作效率。筆者結合工作實踐,基于AutoCAD圖紙集功能和二次開發(AutoLISP),摸索出一種圖紙快速批量打印方案,能夠有效地提升工作效率。
AutoCAD圖紙集提供簡潔的圖紙管理功能,可以方便地進行圖紙組織、打印。使用圖紙集功能時,需將指定圖形文件的布局輸入到圖紙集中,但每一個布局只能包含一張圖紙。使用圖紙集打印前,需設置好輸入到圖紙集中的布局的頁面設置,頁面設置包括選擇打印機、打印范圍、圖紙尺寸、打印樣式等內容,與AutoCAD打印設置類似。
1)使用AutoCAD圖紙集功能進行圖紙批量打印,需要重復進行的工作包括:
(1)對每一個布局進行頁面設置以使打印效果符合預期;
(2)將每一張圖紙拆分成一個布局以便輸入到圖紙集。
2)對于市政道路專業而言,還細分為兩種情況:
(1)將模型空間中的圖紙拆分成單個布局,如縱斷面設計圖、橫斷面設計圖、附屬構筑物結構詳圖等一般在模型空間繪制,這類圖紙在模型空間需拆分成單個布局;
(2)將布局空間中的圖紙拆分成單個布局,如平面設計圖、交通設施平面布置圖等一般先使用道路專業設計軟件在模型空間繪制,然后在布局空間進行分圖,這類圖紙在布局空間需拆分成單個布局。
AutoLISP是Autodesk公司開發的一種Lisp語言,內嵌于AutoCAD軟件中。使用AutoLISP進行AutoCAD二次開發,能夠大大減少設計工作中的重復內容,有效提升設計效率。使用AutoLISP對AutoCAD進行二次開發,可以將前述重復工作進行簡化,使之基本完全由AutoCAD自動完成。
由此,結合AutoCAD圖紙集功能和二次開發,可以實現設計圖紙快速批量打印。
頁面設置控制每個新建布局的頁面布局、打印設備、圖紙尺寸和其他設置。可以在“模型”選項卡或某個布局選項卡上單擊鼠標右鍵,然后單擊“頁面設置管理器”打開頁面設置管理器[1],如圖1所示。

圖1 頁面設置管理器
道路專業圖幅一般為A3,為方便二次開發程序編寫,這里將頁面設置名稱設置為“A3”。程序執行過程中會自動將“A3”頁面設置應用到由程序生成的每一個布局中,這樣就不必單獨設置布局的頁面設置。
自動應用頁面設置到布局的代碼如下:

點擊“頁面設置管理器”對話框中的“新建”按鈕,彈出“新建頁面設置”對話框,為新建頁面設置輸入名稱,然后點擊“確定”進行頁面設置。打印范圍設置為左下角坐標為(0,0)、右上角坐標為(420,297)的A3圖幅范圍,打印比例選1:1。其他設置與AutoCAD打印設置類似,不再贅述。設置完成后,在頁面設置管理器可以看到頁面設置列表框內將出現名稱為“A3”的頁面設置如圖1所示。
再次修改該頁面設置后,軟件可以將修改后的頁面設置全部應用到使用該頁面設置的布局中,不須另外單獨修改布局設置。
筆者工作中,每一個圖框對應一張圖紙。而圖框是帶有屬性的圖塊,圖框中“圖號”屬性值因圖紙而異,圖紙的圖號兩兩不同,以此區分同一工程中不同的圖紙。因此,可以借“圖號”屬性值來命名布局,使每一個布局與每一張圖紙對應和方便核對。
獲取圖塊屬性值函數的代碼如下:


獲取“圖號”屬性值并將其命名新建布局的代碼如下:

將模型空間中的每一張圖紙拆分成單個布局的原理是使用視口將每一張圖單獨顯示在一個布局中,具體思路如下:
1)運行程序。使用appload命令加載程序,在AutoCAD模型空間界面運行程序。
2)獲取對象。點取一個圖框塊對象,程序根據選擇對象的特性自動選擇模型空間中所有圖框塊對象。
3)獲取信息。對于每一個圖框塊對象,程序會獲取圖號屬性值和圖框左下角、右上角坐標。
4)新建布局。程序會新建布局并按圖號命名布局。
5)清空布局。此步驟是為方便同一圖形文件再次運行本程序時能對之前創建的布局內容進行“覆蓋”。
6)新建視口。程序在布局中新建視口,視口范圍為左下角坐標(0,0)、右上角坐標(420,297)的A3圖幅范圍,與頁面設置中的打印范圍一致。
7)滿布圖紙。程序根據圖框左下角、右上角坐標將圖紙完整顯示并布滿于視口。
8)頁面設置。將名稱為“A3”的頁面設置應用到新建布局。
9)重復操作。模型空間中有多少個圖框塊對象,程序就重復執行3)~8)操作多少次,以此達到將模型空間中的每一張圖紙拆分成單個布局的目的。
實際操作步驟則簡化為:輸入命令運行程序、選擇圖框塊對象,然后等待程序執行完成即可。
頁面設置代碼見前文“2新建頁面設置”,新建布局并按圖號命名布局的代碼見前文“3.1新建布局命名規則”,其他主要代碼如下:
(1)獲取對象


程序運行效果實例如圖2所示,每一個布局顯示一張圖紙,并且布局名為圖號。

圖2 將模型空間中的圖紙拆分成單個布局
將布局空間中的每一張圖紙拆分成單個布局的原理是使用帶基點復制與粘貼功能,將布局空間中每張圖紙的內容復制到單獨的布局中,具體思路如下:
1)運行程序
使用appload命令加載程序,在AutoCAD布局空間界面運行程序。
2)獲取對象
3)獲取信息
4)基點復制
通過框選選擇一個圖框范圍內的所有圖元,然后以圖框左下角為基點復制選中圖元。框選范圍較圖框稍小以避免當相鄰圖框緊貼時,選中相鄰圖框。
5)新建布局
6)清空布局
7)原點粘貼
將復制圖元粘貼到新布局原點,以使粘貼的圖元處于前述頁面設置的打印范圍內。
8)頁面設置
9)重復操作
布局空間中有多少個圖框塊對象,程序就重復執行3)~8)操作多少次,以此達到將布局空間中的每一張圖紙拆分成單個布局的目的。
上述2)、3)、5)、6)、8)步同“3.2將模型空間中的圖紙拆分成單個布局”。
實際操作步驟則簡化為:輸入命令運行程序、選擇圖框塊對象,然后等待程序執行完成即可。程序運行效果與圖2類似。
主要代碼如下:

1)使用程序將布局空間中的圖紙拆分成單個布局后,如果后續在原布局中進行修改,再次打印前,需重新進行布局拆分。
2)需使用公制單位繪圖,圖框大小為420×297(A3圖幅)。
圖紙集啟動命令為SHEETSET,快捷鍵為Ctrl+4[1]。圖紙集對話框如圖3所示。

圖3 圖紙集對話框
新建圖紙集的步驟為:點擊“圖紙集”對話框上部的下拉菜單,選擇“新建圖紙集…”,按照“創建圖紙集向導”對話框的提示選擇“現有圖形”,點擊“下一步”,輸入圖紙集名稱,選擇圖紙集保存位置,再點擊兩次“下一步”,最后點擊“完成”即可創建圖紙集。
在“圖紙集”對話框中右擊圖紙集名稱,再點擊“新建子集(U)…”,可創建子集。可將同類圖紙放在一個子集內,方便管理。
在“圖紙集”對話框中右擊圖紙集或子集名稱,點擊“將布局作為圖紙輸入(L)…”,彈出“按圖紙輸入布局”對話框如圖4所示,再點擊“瀏覽圖形”,選擇需要輸入圖紙集的圖形文件(可多選),再在“按圖紙輸入布局”對話框中勾選需要輸入的布局。點擊“布局名稱”,可以按布局名稱(即圖號)對輸入的圖紙進行排序,此順序即為圖紙集中圖紙順序,也是圖紙批量打印的順序,圖紙順序還可以在圖紙集對話框中調整。
圖紙輸入圖紙集后在圖紙集窗口顯示效果如圖4所示。

圖4 將圖紙輸入布局對話框
按照上述“4.2 輸入圖紙”步驟將所有設計圖紙輸入到圖紙集之后,即可按照如下步驟批量打印圖紙(以生成PDF文件為例):在“圖紙集”對話框中右擊圖紙集或子集名稱,依次點擊“發布”、“發布為PDF”,即可一鍵將所有設計圖紙或子集內所有圖紙打印成一份PDF文件,無需額外操作。
本文梳理了頁面設置和圖紙集操作流程,并使用AutoLISP對AutoCAD二次開發,實現將模型空間或布局空間中的每一張圖紙拆分成單個布局的功能。本文給出了一種圖紙快速批量打印方案,主要優點有:
1)自動將設置好的頁面設置應用到每一個新建布局中,無需手工操作。
2)自動將模型空間或布局空間中的每張圖紙拆分成單個布局,操作簡潔準確。
3)在模型空間中對圖形文件進行任何修改,不需要再次拆分布局或者重新創建圖紙集,仍可以使用之前創建好的圖紙集直接打印圖紙。做到“一次設置,反復使用”。
4)本方案不僅適用于道路專業,橋梁、排水、建筑、結構、景觀等專業均可以使用。
因此,本文提出的批量打印方案能夠極大提升設計文件成圖和打印效率。