BIM

Lisp in hàng loạt trong CAD: tệp mở của Viện, đọc được mã

Lisp in hàng loạt trong CAD in cả tập khung tên ra PDF trong một lượt. Tệp của Viện để mã nguồn mở, kèm chuỗi 17 bước của lệnh in đo trên AutoCAD 2027.

  • TS. Đỗ Quốc Hoàng
  • 10 phút đọc
Bốn khung tên khổ A3 xếp trong model, in ra bốn tệp PDF trong một lượt lệnh Ảnh: Ảnh chụp trên AutoCAD 2027 tại Viện

Một bộ hồ sơ ba chục tờ mà in từng tờ thì mất cả buổi chiều, nên lisp in hàng loạt trong CAD là tệp được tìm nhiều thứ nhì trong mọi loại lisp. Chỉ có điều tệp đang lưu hành rộng rãi nhất lại ở dạng đã biên dịch, tức là bạn không đọc được nó làm gì trước khi nạp vào máy.

Bài này đo chuỗi lệnh in thật trên AutoCAD 2027 tại Viện, chỉ ra vì sao in tay lại lâu đến thế, và đưa ra tệp của Viện với mã nguồn để mở. Muốn học trọn khâu trình bày và in hồ sơ thì xem khóa AutoCAD Xây Dựng.

Lệnh in hàng loạt trong CAD: máy có sẵn, nhưng dài dòng

AutoCAD in được ngay mà không cần lisp nào, bằng lệnh -PLOT. Đây là bản dòng lệnh của lệnh in, và chính nó là thứ mọi tệp lisp in hàng loạt gọi tới ở bên dưới.

Vấn đề nằm ở chỗ nó hỏi nhiều. Chúng tôi chạy một lượt trên AutoCAD 2027 và chép lại nguyên văn từng dòng nhắc, đủ mười bảy câu cho một tờ.

Detailed plot configuration? [Yes/No] <No>:
Enter a layout name or [?] <Model>:
Enter an output device name or [?] <...>:
Enter paper size or [?] <...>:
Enter paper units [Inches/Millimeters] <Inches>:
Enter drawing orientation [Portrait/Landscape] <Portrait>:
Plot upside down? [Yes/No] <No>:
Enter plot area [Display/Extents/Limits/View/Window] <Window>:
Enter lower left corner of window <...>:
Enter upper right corner of window <...>:
Enter plot scale (Plotted Millimeters=Drawing Units) or [Fit] <Fit>:
Enter plot offset (x,y) or [Center] <0.00,0.00>:
Plot with plot styles? [Yes/No] <Yes>:
Enter plot style table name or [?] (enter . for none) <...>:
Plot with lineweights? [Yes/No] <Yes>:
Enter shade plot setting [As displayed/...] <As displayed>:
Enter file name <...>:
Save changes to page setup [Yes/No]? <N>
Proceed with plot [Yes/No] <Y>:

Nhân mười bảy câu ấy với ba chục tờ là ra lý do vì sao người vẽ đi tìm lisp. In xong mỗi tờ, máy còn báo lại vùng in thật sự dùng, chẳng hạn Effective plotting area: 420.00 wide by 297.00 high.

Một chi tiết nhỏ mà hữu ích: tên khổ giấy phải gõ đúng từng chữ. Muốn xem danh sách thì ở câu hỏi khổ giấy gõ dấu hỏi, máy in ra toàn bộ. Ví dụ dòng dành cho khổ A3 nằm ngang là ISO full bleed A3 (420.00 x 297.00 MM). Đó chính là chuỗi bạn phải điền vào tệp lisp.

Tệp lisp đang lưu hành là bản biên dịch

Chúng tôi tải tệp lisp in hàng loạt được chia sẻ rộng rãi nhất về rồi mở ra xem. Nó không phải tệp .lsp mà là .VLX, tức bản đã biên dịch.

Vài con số đo trên chính tệp ấy: 23.964 byte, mở đầu bằng chuỗi nhận dạng VRTLIB-1, và ngay dòng sau có khai báo (:protected . T). Chúng tôi quét toàn bộ tệp tìm chuỗi (defun — chuỗi bắt đầu mọi hàm AutoLISP — và không có một lần nào.

Nói cho công bằng: biên dịch là quyền của tác giả, và không có gì chứng tỏ tệp ấy làm điều xấu. Nhưng hệ quả thì rõ.

Bạn không đọc được nó làm gì. Bạn không sửa được khổ giấy hay kiểu in mặc định. Và khi AutoCAD hiện hộp thoại Security - Unsigned Executable File hỏi có nạp hay không, bạn không có cách nào tự kiểm tra để trả lời. Cách xử lý hộp thoại ấy nằm ở bài lisp đánh số thứ tự trong CAD.

Vì thế tệp của Viện để nguyên dạng .lsp. Mở bằng Notepad là đọc được từng dòng.

Tệp IN-IIC.lsp của Viện

Tải tệp IN-IIC.lsp — 10 KB, ba lệnh, mã nguồn để mở.

LệnhViệc nó làm
INHLin hàng loạt theo khung tên là block, xếp theo hàng rồi từ trái sang phải
INHLCin hàng loạt theo các hình chữ nhật trên một lớp, khỏi cần block
INHL1in thử một khung để kiểm thông số trước khi chạy cả loạt

Cả ba hỏi cùng một bộ bảy thông số: máy in, khổ giấy, kiểu in, hướng giấy, thư mục lưu, tiền tố tên tệp và số bắt đầu. Máy nhớ hết trong phiên làm việc, nên lần sau chỉ cần Enter.

Phần gọi lệnh in nằm gọn trong một hàm, và mỗi dòng có chú thích nó đang trả lời câu hỏi nào:

(defun IIC:in-mot (p1 p2 tep / cu)
  (setq cu (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (command "_.-PLOT"
           "_Y"                                  ; che do chi tiet
           ""                                    ; layout hien hanh
           *iic-may*                             ; may in
           *iic-giay*                            ; kho giay
           "_M"                                  ; don vi milimet
           (if (= *iic-huong* "P") "_P" "_L")    ; huong giay
           "_N"                                  ; khong lat nguoc
           "_W"                                  ; vung in la cua so
           (list (car p1) (cadr p1))             ; goc duoi trai
           (list (car p2) (cadr p2))             ; goc tren phai
           "_F"                                  ; vua khung giay
           "_C"                                  ; can giua
           "_Y"                                  ; co dung kieu in
           *iic-ctb*                             ; ten kieu in
           "_Y"                                  ; in theo be rong net
           ""                                    ; kieu to bong: giu mac dinh
           tep                                   ; ten tep ra
           "_N"                                  ; khong ghi de page setup
           "_Y")                                 ; dong y in
  (setvar "cmdecho" cu)
  ;; Trinh ghi PDF hoan tat SAU khi lenh tra quyen ve: ngay sau lenh, tep chua co tren
  ;; dia (do duoc 20/09/2026). Vi vay khong dung (findfile) de ket luan, ma chi
  ;; bao da gui di; cuoi lenh se dem lai mot lan nua.
  t)

Lệnh INHL1 đáng dùng trước tiên. In thử một khung, mở tệp PDF ra xem tỉ lệ và nét đã đúng chưa, rồi mới chạy cả loạt. Sai ở tờ thử thì sửa một lần; sai ở tờ thứ ba mươi thì phải in lại từ đầu.

Hướng dẫn dùng, từng bước một

Bước 1 — Nạp tệp và khai thư mục tin cậy

Chép tệp vào một thư mục riêng, chẳng hạn C:\Lisp, rồi gõ APPLOAD và nạp. Nếu hộp thoại an toàn hiện ra, hãy khai thư mục ấy là nơi tin cậy trong OPTIONS, thẻ Files, mục Trusted Locations.

Bước 2 — In thử một khung

INHL1. Máy hỏi hai góc vùng in, rồi hỏi bảy thông số. Mở tệp PDF vừa ra để kiểm tỉ lệ và nét.

Bước 3 — Chỉ vào một khung tên mẫu

INHL. Máy hỏi:

Chon MOT khung ten mau (phai la block):

Bấm vào một khung tên bất kỳ. Máy báo lại tên block nó nhận ra, ví dụ Ten block khung ten: IIC-KHUNG.

Bước 4 — Đặt dung sai hàng rồi quét chọn

Dung sai hang (hai khung lech Y nho hon so nay la cung hang) <1000>:

Con số này quyết định thứ tự in. Các khung lệch nhau ít hơn dung sai được coi là cùng một hàng và in từ trái sang phải; xong hàng trên mới xuống hàng dưới.

Chon cac khung ten can in:

Quét chọn cả bộ rồi Enter. Máy báo Se in 4 to, theo thu tu tu trai sang phai, tren xuong duoi. rồi in lần lượt.

Bốn khung tên in một lượt Ảnh: Bốn khung tên khổ A3 xếp hai hàng trong model. Một lệnh INHL cho ra bốn tệp TO-001 đến TO-004, đúng thứ tự trái sang phải rồi trên xuống dưới

Bước 5 — Chờ trình ghi PDF làm nốt

Đây là chỗ dễ tưởng nhầm là hỏng, và chúng tôi bắt được nó ngay trong lúc thử.

Liệt kê thư mục ngay khi lệnh vừa trả về, kết quả là: TO-001.pdf đã đủ 2.142 byte, còn TO-001 tiếp theo mới có tên mà dung lượng bằng 0. Vài giây sau nó mới đủ. Nói cách khác, lệnh đã xong nhưng trình ghi PDF thì chưa.

Để chắc, chúng tôi đọc luôn biến BACKGROUNDPLOT trên máy: nó đang bằng 2. Theo bảng của Autodesk, mức ấy nghĩa là lệnh in chạy ở tiền cảnh còn lệnh xuất bản mới chạy ở nền. Vậy độ trễ này không phải do in nền, mà do chính trình ghi tệp PDF hoàn tất sau khi lệnh đã trả quyền về.

Vì thế tệp của Viện không kết luận bằng cách tìm tệp ngay lập tức — làm thế sẽ báo thiếu. Nó chỉ báo đã gửi đi bao nhiêu tờ, rồi đếm lại số tệp .pdf đang có trong thư mục để bạn đối chiếu.

Khi in xong hẳn, AutoCAD hiện một bong bóng nhỏ ở góc phải dưới: Plot and Publish Job Complete, kèm dòng No errors or warnings found. Thấy dòng ấy là chắc chắn.

In hàng loạt trong CAD: chuẩn bị bản vẽ thế nào

Ba việc làm một lần cho cả đời hồ sơ.

Khung tên phải là block. Đây là điều kiện bắt buộc của mọi tệp lisp in hàng loạt, kể cả tệp của Viện, vì lệnh cần một cách chắc chắn để nhận ra đâu là một tờ. Vẽ khung bằng các đường rời rạc thì máy không có cách nào gom lại. Cách tạo khối nằm ở bài block trong CAD.

Nếu hồ sơ cũ đã lỡ vẽ khung bằng đường thì vẫn còn lối: dùng INHLC, đặt một hình chữ nhật bao quanh từng tờ trên một lớp riêng, chẳng hạn KHUNG-IN, rồi in theo lớp ấy.

Đặt khung thẳng hàng. Lệnh sắp thứ tự theo hàng, nên các khung trong cùng một hàng nên có tung độ gần nhau. Lệch vài trăm đơn vị thì dung sai lo được; lệch cả mét thì máy coi là hai hàng khác nhau.

Chọn sẵn một kiểu in. Tệp .ctb quyết định nét nào in đậm, nét nào in nhạt. Đặt một lần rồi dùng mãi, khỏi phải nhớ mỗi lần in. Cách quản lý nét theo lớp nằm ở bài layer trong CAD.

Ba điều hay nghe nhưng không đúng

Điều hay ngheThực tế đo trên bản 2027
Không có lisp thì không in hàng loạt đượcLệnh -PLOT làm được, chỉ là phải trả lời mười bảy câu cho mỗi tờ
Tệp lisp nào cũng đọc được vì là tệp văn bảnTệp lưu hành rộng nhất ở dạng .VLX đã biên dịch, khai cả (:protected . T)
Lệnh chạy xong là có đủ tệp trong thư mụcĐo được: tệp kế tiếp mới có tên mà còn 0 byte, vài giây sau mới đủ

Câu hỏi thường gặp

Lisp in hàng loạt cad có in được sang PDF không?

Có. Chọn máy in là DWG To PDF.pc3 ở câu hỏi đầu tiên, rồi khai thư mục lưu. Mỗi tờ ra một tệp riêng, đánh số tăng dần.

Tải lisp in hàng loạt trong CAD ở đâu cho an toàn?

Tải từ nơi bạn biết rõ, và ưu tiên tệp .lsp đọc được thay vì .VLX đã biên dịch. Mở bằng Notepad xem qua trước khi nạp.

Máy báo chọn nhầm khi bấm vào khung tên?

Vì khung tên của bạn không phải block. Hãy dùng lệnh INHLC và đặt hình chữ nhật bao quanh từng tờ trên một lớp riêng.

Thứ tự in ra lộn xộn thì sửa thế nào?

Tăng con số dung sai hàng. Nếu các khung trong một hàng lệch tung độ hơn con số ấy, máy sẽ coi chúng là những hàng khác nhau.

Lisp in nhiều bản vẽ trong cad có in được từ layout không?

Tệp này in theo vùng trong model, vốn là cách làm phổ biến của hồ sơ Việt Nam. Hồ sơ dựng theo layout thì dùng lệnh in sẵn có của AutoCAD sẽ gọn hơn.

Vì sao thư mục chưa có đủ tệp dù máy báo xong?

Vì trình ghi PDF hoàn tất sau khi lệnh đã trả quyền về. Chờ vài giây, và xem bong bóng Plot and Publish Job Complete ở góc phải dưới.

Về tác giả

TS. Đỗ Quốc Hoàng — Phó Viện trưởng Viện Tin học Xây dựng – Trường Đại học Xây dựng Hà Nội, chuyên gia lập trình phần mềm trong xây dựng