Đi tìm lisp cắt dim là chuyện gần như ai vẽ bản vẽ kỹ thuật cũng làm một lần. Chân đường gióng dài ngắn lộn xộn, đâm cả vào hình, nhìn bản vẽ mất gọn. Viện viết sẵn một tệp cho việc ấy, chạy thử trên AutoCAD 2027 rồi mới đưa lên, và in nguyên mã nguồn ở đây để bạn đọc trước khi chạy.
Bài cũng nói nốt phần mà các trang khác bỏ qua: AutoCAD có sẵn hai lệnh làm được hai việc người ta hay đi tìm lisp. Muốn học trọn khâu ghi kích thước và trình bày bản vẽ thì xem khóa AutoCAD Xây Dựng.
Cắt dim trong CAD là hai việc khác nhau
Hai yêu cầu rất khác nhau cùng được gọi chung một tên, nên lời khuyên trên mạng hay trật.
Việc thứ nhất: chân đường gióng dài ngắn lộn xộn vì mỗi kích thước bám vào một chỗ cao thấp khác nhau trên hình. Người vẽ muốn chúng dừng lại ở cùng một mức. Đây mới là việc mà tệp lisp giải quyết.
Việc thứ hai: đường kích thước chạy đè lên nét vẽ khác, và người vẽ muốn chừa một khe hở đúng chỗ hai nét giao nhau. Việc này AutoCAD làm sẵn, không cần tệp ngoài nào.
Chúng tôi gõ thử trên AutoCAD 2027 tại Viện. Cả hai tên lệnh mà các bài hướng dẫn hay nhắc đều không phải của phần mềm:
Unknown command "CUTDIM". Press F1 for help.
Unknown command "BD". Press F1 for help.
Chúng là tên hàm trong một tệp lisp của cộng đồng. Không nạp tệp thì gõ vào chỉ nhận câu trên.
Chúng tôi đọc hết ba trang đầu bảng tìm kiếm cho cụm lisp cắt dim trong CAD. Cả ba dạy đúng cùng ba bước bấm nút: gõ tắt AP, trỏ tới tệp, bấm Load. Không trang nào nói tệp ấy làm gì bên trong, cũng không trang nào nhắc rằng phần mềm có sẵn lệnh cho việc thứ hai. Người đọc tải về, chạy được thì mừng, không chạy được thì bỏ đi tìm tệp khác.
Tệp lisp cắt dim của Viện: mã đầy đủ, tải về dùng ngay
Tải tệp CD-IIC.lsp — 3 KB, một lệnh CD. Mã để nguyên trong bài, vì chạy mã lạ trên máy mình là việc đáng cẩn thận.
(vl-load-com)
(defun IIC-GIOI-THIEU ()
(princ "\nLisp được lập trình bởi RDSIC - Viện Tin học Xây dựng")
(princ "\nwebsite: https://iic.huce.edu.vn")
(princ "\nTel: 0989 427 809")
)
;; Doc cac ghi de kieu kich thuoc dang co cua mot dim, tra ve danh sach (ma . cap-gia-tri).
(defun IIC-DOC-GHIDE (el / cu i c ds)
(setq cu (cdr (assoc "ACAD" (cdr (assoc -3 el)))) ds nil i 0)
(while (< i (length cu))
(setq c (nth i cu))
(if (= (car c) 1070)
(progn (setq ds (cons (cons (cdr c) (nth (1+ i) cu)) ds)) (setq i (+ i 2)))
(setq i (1+ i))
)
)
(reverse ds)
)
;; Ghi de DIMFXLON (290) va DIMFXL (49) cho RIENG mot dim.
;; GOP vao cac ghi de dang co chu khong thay het: dim thuong da mang san ghi de
;; ti le (DIMSCALE), co chu hay mau, thay het la mat sach nhung thu ay.
(defun IIC-DAT-CHAN (e dai / el ds ra)
(regapp "ACAD")
(setq el (entget e (list "ACAD")))
(setq ds (IIC-DOC-GHIDE el))
(setq ds (vl-remove-if (function (lambda (x) (member (car x) (list 290 49)))) ds))
(setq ds (append ds (list (cons 290 (cons 1070 1)) (cons 49 (cons 1040 dai)))))
(setq ra (list (cons 1000 "DSTYLE") (cons 1002 "{")))
(foreach x ds (setq ra (append ra (list (cons 1070 (car x)) (cdr x)))))
(setq ra (append ra (list (cons 1002 "}"))))
(entmod
(append (vl-remove-if (function (lambda (x) (= (car x) -3))) el)
(list (list -3 (cons "ACAD" ra)))))
)
;; CD - chon cac dim roi chon MOT diem; moi chan dim se dung lai o ngang diem ay.
;; Con so do duoc KHONG doi, chi doi cho chan dim ket thuc.
;; Gop ca luot sua thanh MOT buoc hoan tac. Khong co cap StartUndoMark/EndUndoMark
;; thi moi lan entmod la mot buoc rieng: bam U mot cai chi tra lai duoc MOT dim,
;; phan con lai van bi doi. Do ngay 20/09/2026 bang cach so anh truoc/sau/hoan tac.
(defun c:CD ( / ss p i e el p10 ang v dai ti n tl )
(IIC-GIOI-THIEU)
(setq tl (vla-get-ActiveDocument (vlax-get-acad-object)))
(if (setq ss (ssget (list (cons 0 "DIMENSION"))))
(progn
(setq p (getpoint "\nDiem cat chan dim: ") i 0 n 0)
(if p
(progn
(vla-StartUndoMark tl)
(while (< i (sslength ss))
(setq e (ssname ss i)
el (entget e (list "ACAD"))
p10 (cdr (assoc 10 el))
ang (+ (cond ((cdr (assoc 50 el))) (0.0)) (/ pi 2.0))
v (mapcar (function -) p p10)
dai (abs (+ (* (car v) (cos ang)) (* (cadr v) (sin ang)))))
;; DIMFXL bi NHAN voi ti le dim (DIMSCALE), nen phai chia truoc khi ghi.
;; Ban ve dung DIMSCALE 100 ma quen chia thi dat 150 hoa ra 15000 don vi,
;; dai hon ca chan dim, va lenh nhu khong lam gi ca.
(setq ti (vla-get-ScaleFactor (vlax-ename->vla-object e)))
(if (<= ti 0.0) (setq ti 1.0))
(if (> dai 1e-6) (progn (IIC-DAT-CHAN e (/ dai ti)) (setq n (1+ n))))
(setq i (1+ i))
)
(vla-EndUndoMark tl)
(princ (strcat "\nDa cat chan cua " (itoa n) " dim."))
)
)
)
)
(princ)
)
Ý tưởng gọn thế này. Mỗi kích thước có một ô đặt riêng tên là chiều dài đường gióng cố định. Lệnh đo khoảng cách từ đường kích thước tới điểm bạn chọn, rồi ghi con số ấy vào ô đó cho từng dim. Đường gióng ngắn lại đúng bằng khoảng ấy, còn con số đo thì không ai đụng vào.
Hướng dẫn dùng lệnh cắt dim, từng bước một
Bước 1 — Nạp tệp vào AutoCAD
- Gõ
APPLOADrồi Enter. HộpLoad/Unload Applicationsmở ra. - Ô
Files of typecứ để nguyênAutoCAD Apps, vì tệp.lspnằm trong nhóm này. - Trỏ tới thư mục vừa tải tệp về, chọn
CD-IIC.lsp, rồi bấm nútLoad. - Bấm
Close. Tệp đã nạp cho phiên làm việc này.
Muốn khỏi phải nạp lại mỗi lần mở máy thì vẫn trong hộp ấy, nhìn khung Startup Suite ở góc dưới bên phải, bấm Contents... rồi thêm tệp vào danh sách. Từ đó AutoCAD tự nạp lúc khởi động.
Bước 2 — Chọn các kích thước cần sửa
Gõ CD rồi Enter. Ba dòng giới thiệu của Viện hiện ra, rồi tới dòng nhắc:
Select objects:
Chọn bằng cách nào bạn quen cũng được: bấm từng cái, kéo cửa sổ, kéo cắt ngang. Chọn trùm cả nét vẽ khác cũng không sao, lệnh chỉ nhận đối tượng kích thước. Chọn xong thì Enter.
Một lưu ý khi kéo cửa sổ từ trái sang phải: AutoCAD chỉ nhận vật nằm trọn trong khung. Chân đường gióng chạy tới tận chỗ nó bám trên hình, nên khung phải trùm qua cả chỗ ấy. Không thì máy báo 0 found và bạn tưởng lệnh hỏng.
Bước 3 — Chỉ mức muốn chân dừng lại
Diem cat chan dim:
Bấm một điểm ở đúng cao độ bạn muốn mọi chân dừng lại. Không cần bấm trúng vật gì cả, máy chỉ lấy khoảng cách từ đường kích thước tới điểm ấy. Xong, máy báo:
Da cat chan cua 3 dim.
Lỡ tay thì gõ U
Gõ U một lần là trả lại hết. Cả lượt sửa được gộp thành một bước hoàn tác, nên không phải bấm nhiều lần. Chúng tôi đếm số kích thước đang mang ghi đè ở ba thời điểm: trước khi chạy 0, sau khi chạy 3, sau khi gõ U về lại 0.
Kiểm thêm một việc sau khi chạy bất kỳ tệp lisp nào loại này: chọn một kích thước, mở bảng Properties và đọc lại ô giá trị đo. Con số phải y như trước. Nếu nó đổi thì tệp đang kéo lại điểm gốc chứ không phải cắt chân, và bạn nên hoàn tác ngay trước khi lưu.
Điểm đáng chú ý nằm ở ba con số. Trước và sau khi chạy, phép đo vẫn là 1800, 1200 và 1200. Lệnh chỉ đổi chỗ vẽ chân đường gióng, không đổi giá trị. Đó là khác biệt giữa cắt chân dim và việc kéo lại điểm gốc, vốn làm sai cả bảng khối lượng.
Ba chỗ tệp lisp cutdim tải về hay hỏng
Chỗ thứ nhất là tỉ lệ. Ô chiều dài đường gióng cố định ứng với biến DIMFXL, và con số trong đó bị nhân với tỉ lệ kích thước DIMSCALE. Bản vẽ đặt tỉ lệ 100 mà lệnh ghi thẳng 150 thì hóa ra 15.000 đơn vị, dài hơn cả chân dim, nên lệnh chạy xong trông như không làm gì. Chúng tôi mắc đúng lỗi này khi thử, và chỉ tìm ra vì đem ảnh trước sau ra so từng điểm ảnh.
Chỗ thứ hai nguy hơn: ghi đè. Mọi thiết lập riêng của một dim nằm chung trong một khối dữ liệu. Viết đè cả khối là mất luôn cỡ chữ, màu và tỉ lệ đang đặt riêng cho dim ấy. Bản thử đầu của chúng tôi làm thế, và chữ số cùng mũi tên biến mất sạch khỏi bản vẽ. Tệp phát hành ở trên đọc khối cũ ra, bỏ đúng hai mục cần đổi, rồi ghép lại.
Chỗ thứ ba là bảo mật. Nếu máy hiện hộp Security - Unsigned Executable File rồi báo ; error: File load canceled: thì tệp không hỏng. Đó là biến SECURELOAD chặn nạp mã từ thư mục chưa khai báo tin cậy. Cách xử lý và cơ chế đầy đủ nằm trong bài tính diện tích trong CAD.
DIMBREAK: cắt đường kích thước ngay chỗ nó đè lên hình
Đây là việc thứ hai, và AutoCAD làm sẵn. Trang DIMBREAK của Autodesk mô tả lệnh trong một câu: "Breaks or restores dimension and extension lines where they cross other objects".
Gõ DIMBREAK, dòng nhắc trên bản 2027 chép nguyên văn từ màn hình:
Select dimension to add/remove break or [Multiple]:
Chọn kích thước, rồi chọn nét vẽ cắt qua nó. Khe hở sinh ra bám theo hình: dời hình hay dời kích thước thì khe dời theo, xóa hình thì khe tự mất. Không tệp lisp nào làm được chuyện bám theo ấy.
Cùng họ với nó là DIMSPACE, lệnh dóng các đường kích thước song song cho đều nhau. Dòng nhắc đầu của nó là Select base dimension:. Đây chính là việc mà lệnh BD trong các tệp lisp cộng đồng làm.
Cắt chân dim mà không cần lisp nào
Nếu mọi kích thước trong bản vẽ đều nên có chân dài bằng nhau, bạn không cần lệnh nào cả. Mở bảng kiểu kích thước, thẻ Extension lines, tích ô Fixed length extension lines rồi đặt số vào ô Length. Từ đó mọi dim mang kiểu ấy đều có chân dài đúng bằng số bạn đặt.
Chọn cách nào thì tùy việc. Cả hồ sơ theo một quy cách thì sửa kiểu kích thước gọn hơn, vì sau này thêm dim mới cũng tự đúng. Chỉ vài chỗ cần ngắn lại, hoặc mỗi chỗ một mức khác nhau, thì tệp lisp nhanh hơn hẳn.
Tệp lisp chỉ hơn ở một chỗ: nó đặt riêng cho từng nhóm dim bạn chọn, theo một mức bạn chỉ bằng chuột, thay vì đổi cả kiểu. Cách làm bằng bảng, kèm cái bẫy khiến ô ấy trông như hỏng, nằm ở bài dim trong CAD.
Ba điều hay nghe nhưng không đúng
| Điều hay nghe | Thực tế trên bản 2027 |
|---|---|
CUTDIM là một lệnh của AutoCAD | Gõ vào ra Unknown command "CUTDIM". Đó là tên hàm trong một tệp lisp |
| Cắt chân dim làm sai con số đo | Chúng tôi đo trước và sau: vẫn 1800, 1200, 1200. Lệnh chỉ đổi chỗ vẽ |
| Muốn ngắt đường kích thước chỗ giao nhau thì phải có lisp | DIMBREAK làm sẵn, và khe hở còn bám theo hình khi bạn dời |
Câu hỏi thường gặp
Lisp cắt dim có làm sai kích thước không?
Không, nếu tệp làm đúng cách. Tệp của Viện chỉ ghi vào ô chiều dài đường gióng của từng dim. Chúng tôi đo lại ba giá trị trước và sau khi chạy, cả ba giữ nguyên.
Tải lisp cắt dim về mà nạp không được thì làm sao?
Xem máy có hiện hộp Security - Unsigned Executable File không. Đó là cơ chế chặn mã lạ của AutoCAD, không phải tệp hỏng. Khai thư mục chứa tệp vào danh sách tin cậy là nạp được.
Lệnh CD chạy xong mà không thấy gì đổi?
Gần như chắc là bản vẽ đang dùng tỉ lệ kích thước khác 1 và tệp lisp quên chia. Thử lại bằng tệp ở bài này, nó đọc tỉ lệ của từng dim rồi mới ghi.
Có cần cắt chân dim cho từng bản vẽ không?
Không. Nếu cả bản vẽ cùng một quy cách thì đặt một lần trong kiểu kích thước là xong. Tệp lisp hợp với trường hợp chỉ một nhóm dim cần ngắn lại.
CD và BD khác nhau thế nào?
CD cắt chân đường gióng, BD dóng các đường kích thước cho thẳng hàng. Cả hai đều là tên trong tệp lisp cộng đồng. AutoCAD có DIMSPACE làm việc của BD.
Tệp lisp này dùng được cho AutoCAD LT không?
Bài này đo trên bản AutoCAD đầy đủ 2027. Các bản rút gọn có chính sách riêng về việc chạy mã, nên hãy thử trên đúng bản bạn đang dùng trước khi đưa vào việc thật.