Ghi kích thước xong một mặt bằng, các đường kích thước nằm cao thấp lộn xộn: cái cách tường 300, cái 450, cái 380. Kéo từng cái bằng điểm móc thì mất cả buổi. Lisp dóng thẳng hàng dim của Viện làm việc ấy trong một lệnh: chọn cả loạt, bấm một điểm, mọi đường kích thước về cùng một hàng.
DHD. Mã in nguyên trong bài để bạn đọc trước khi chạy. Muốn học trọn khâu ghi kích thước, Viện có khoá AutoCAD cho ngành xây dựng.Dóng thẳng hàng dim trong CAD: AutoCAD có sẵn hai cách
Trước khi dùng lisp, nên biết AutoCAD đã có sẵn gì, vì với nhiều trường hợp hai lệnh có sẵn là đủ.
| Cách | Gọi thế nào | Cần kích thước gốc | Dim đứng lẫn dim ngang |
|---|---|---|---|
DIMSPACE giá trị 0 | Gõ DIMSPACE | Có | Không |
Lựa chọn aliGn của DIM | Gõ DIM rồi G | Có | Không |
Lisp DHD của Viện | Gõ DHD | Không, bấm thẳng một điểm | Có, cùng một lượt |
Để so sánh cho công bằng, cả ba cách chạy trên cùng một bộ kích thước. Ba kích thước ngang đo 1000, 1500 và 800, đường kích thước nằm cách chân 300, 450 và 380. Thêm một kích thước đứng đo 1200, đường kích thước ở hoành độ 4300.
Lệnh dimspace trong CAD: giá trị 0 là dóng, số dương là giãn
Tài liệu Autodesk tóm lệnh này: "Adjusts the spacing between linear dimensions or angular dimensions." Và nói rõ cách dóng thẳng hàng: "You can also make the dimension lines of a series of linear or angular dimensions line up by using a spacing value of 0."
Dòng nhắc nguyên văn của bản 2027.
| Bước | Máy hỏi | Bạn làm |
|---|---|---|
| 1 | Select base dimension: | Bấm kích thước làm chuẩn |
| 2 | Select dimensions to space: | Bấm các kích thước còn lại, Enter |
| 3 | Enter value or [Auto] <Auto>: | Gõ 0 để dóng thẳng hàng |
Chọn kích thước 1000 làm gốc, bấm ba cái kia, nhập 0. Kết quả: cả ba kích thước ngang về đúng độ cao 300 của kích thước gốc. Riêng kích thước đứng thì nhận vào lựa chọn nhưng không dời, và máy không báo gì cả.
Lý do nằm trong trang DIMSPACE của Autodesk: "Spacing is applied only to parallel linear dimensions or to angular dimensions that share a common vertex." Chỉ kích thước song song với kích thước gốc mới được đụng tới.
Giãn đều dim trong CAD bằng cùng lệnh ấy
Nhập một số dương thay cho 0 thì lệnh chuyển sang giãn đều. Ba kích thước chồng tầng, đo 1000, 2000 và 3000, đường kích thước đang ở 300, 350 và 900. Chọn cái 1000 làm gốc, nhập 250.
Kết quả: kích thước gốc giữ ở 300, hai cái kia xếp lại ở 550 và 800. Các tầng cách nhau đều đúng 250.
Cái bẫy của lựa chọn Auto
Ở câu hỏi thứ ba, máy đề nghị sẵn <Auto>. Nhiều người cứ thế nhấn Enter.
Autodesk mô tả Auto là "The resulting spacing distance is twice the height of the dimension text." Nhưng chiều cao ấy là con số ghi trong kiểu kích thước, chưa nhân tỉ lệ DIMSCALE. Trên bản vẽ thử có DIMTXT bằng 0,18 và DIMSCALE bằng 40, lựa chọn Auto chỉ giãn 0,36 đơn vị giữa các tầng. Ba kích thước gần như chồng khít lên nhau.
Vậy trên bản vẽ có tỉ lệ, đừng nhấn Enter ở câu ấy. Nhập thẳng khoảng cách mong muốn tính bằng đơn vị bản vẽ.
Lệnh dim align trong CAD: lựa chọn aliGn của lệnh DIM
Lệnh DIM gộp nhiều kiểu ghi kích thước vào một lệnh, và có sẵn lựa chọn dóng hàng. Dòng nhắc đầu của nó liệt kê đủ: Select objects or specify first extension line origin or [Angular/Baseline/Continue/Ordinate/aliGn/Distribute/Layer/Undo]:
Gõ G để vào aliGn. Máy hỏi Select base dimension:, rồi Select dimensions to align:. Chọn giống như trên: gốc là kích thước 1000, rồi ba cái kia.
Ba kích thước ngang về đúng 300. Kích thước đứng lần này bị từ chối thẳng, máy báo nguyên văn Parallel, concentric, or same datum dimensions required. rồi 1 was filtered out.
Chọn xong nhớ nhấn Enter thêm một lần để thoát. Lệnh DIM không tự kết thúc mà quay lại dòng nhắc đầu, chờ bạn ghi kích thước tiếp.
Căn thẳng hàng kích thước trong CAD bằng lisp DHD
Hai lệnh có sẵn cùng vướng hai chỗ. Chúng cần một kích thước gốc nằm sẵn ở đúng độ cao mong muốn. Và chúng chỉ xử lý kích thước song song với gốc, nên dim ngang và dim đứng phải làm hai lượt.
Lisp DHD bỏ cả hai chỗ vướng ấy. Bạn không chọn gốc, mà bấm thẳng một điểm. Mỗi đường kích thước được đẩy theo phương vuông góc với chính nó, cho tới khi đi qua điểm ấy.
Cách dùng: nạp tệp bằng APPLOAD theo bài lệnh appload trong CAD, rồi gõ DHD.
| Bước | Máy hỏi | Bạn làm |
|---|---|---|
| 1 | Chọn các kích thước cần dóng thẳng hàng: | Quét chọn cả vùng, kể cả nét khác; lisp chỉ lấy kích thước |
| 2 | Bấm điểm mà các đường kích thước phải đi qua: | Bấm một điểm |
Chạy trên cùng bộ kích thước, lần này thêm một kích thước theo cạnh xiên và một kích thước bán kính. Quét chọn cả vùng, bấm điểm (4600, 700).
| Kích thước | Trước | Sau |
|---|---|---|
| Ba kích thước ngang | 300 · 450 · 380 | 700 · 700 · 700 |
| Kích thước đứng | x = 4300 | x = 4600 |
| Kích thước theo cạnh xiên | nằm lệch | đường kích thước đi qua đúng điểm bấm |
| Kích thước bán kính | — | bỏ qua |
Có một điều phải để ý khi dùng trên mặt bằng thật. Mọi kích thước ngang được chọn đều về cùng một cao độ, và mọi kích thước đứng về cùng một hoành độ. Nếu quét chọn cả chuỗi kích thước phía trên lẫn chuỗi phía dưới công trình trong một lượt, chuỗi dưới sẽ bị kéo lên nằm chung hàng với chuỗi trên. Vì vậy mỗi lượt chỉ chọn các kích thước ở một phía: chạy một lần cho phía trên, một lần cho phía dưới, rồi lần lượt hai bên hông.
Máy báo Đã dóng thẳng hàng 5 kích thước. Bỏ qua 1 kích thước không phải kích thước thẳng. Kích thước bán kính, đường kính, góc và toạ độ không có "đường kích thước" để dóng, nên lisp đếm và để yên.
Con số đo của mọi kích thước không đổi: vẫn 1000, 1500, 800, 1200 và 1.414,21. Lisp chỉ dời vị trí đường kích thước và chữ đi cùng, không đụng tới hai điểm gốc.
Cả lệnh gộp thành một bước hoàn tác. Thử trên bộ ba kích thước chồng tầng đang nằm ở 300, 350 và 900: chạy DHD đưa cả ba về một hàng, rồi gõ U một lần, cả ba trở về đúng 300, 350 và 900.
Mã nguồn lisp căn dim thẳng hàng
Tên lệnh DHD đã kiểm không trùng lệnh gốc nào của AutoCAD 2027, không trùng lệnh tắt nào trong acad.pgp, và không trùng lệnh nào trong bộ lisp của Viện. Mọi hàm phụ đều mang tiền tố iic-dhd-, để nạp cùng lúc với các tệp lisp khác mà không đè lên nhau.
;;; ==================================================================
;;; DHD-IIC.LSP - dong thang hang cac duong kich thuoc
;;; Vien Tin hoc Xay dung (IIC) - Truong Dai hoc Xay dung Ha Noi
;;; https://iic.huce.edu.vn - Tel: 0989 427 809
;;; ------------------------------------------------------------------
;;; Lenh:
;;; DHD chon mot loat kich thuoc, bam MOT diem. Moi duong kich
;;; thuoc duoc day theo phuong vuong goc voi chinh no cho toi
;;; khi di qua diem ay. Kich thuoc ngang ve cung mot cao do,
;;; kich thuoc dung ve cung mot hoanh do, trong CUNG MOT lan.
;;;
;;; Khac voi DIMSPACE va lua chon aliGn cua lenh DIM co san:
;;; - khong can mot kich thuoc goc, ban bam thang vi tri muon dong;
;;; - chon lan ca kich thuoc ngang, dung va xien cung mot luc.
;;;
;;; Chi dong kich thuoc thang (ngang, dung, xoay goc, theo canh xien).
;;; Kich thuoc ban kinh, duong kinh, goc, toa do bi bo qua va dem lai.
;;; Con so do (khoang cach hai diem goc) KHONG doi, chi doi vi tri
;;; duong kich thuoc va chu.
;;;
;;; Nap tep: go APPLOAD, chon tep nay, bam Load.
;;; Tep luu bang ma UTF-8. Sua bang Notepad thi nho luu lai dung UTF-8.
;;; ==================================================================
(vl-load-com)
;;; ------------------------------------------------------------------
;;; Phan chung - moi ham phu deu mang tien to iic-dhd- de khong de
;;; len ham cung ten cua tep lisp khac dang nap trong cung ban ve.
;;; ------------------------------------------------------------------
(defun iic-dhd-bang-ten ()
(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")
(princ)
)
(defun iic-dhd-tai-lieu () (vla-get-ActiveDocument (vlax-get-acad-object)))
(defun iic-dhd-cong (a b) (mapcar '+ a b))
(defun iic-dhd-tru (a b) (mapcar '- a b))
(defun iic-dhd-nhan (v k) (mapcar '(lambda (x) (* x k)) v))
(defun iic-dhd-cham (a b) (apply '+ (mapcar '* a b)))
;; Goc cua duong kich thuoc. Tra ve nil neu khong phai kich thuoc thang.
;; kieu 0: kich thuoc ngang / dung / xoay goc -> goc nam o ma 50
;; kieu 1: kich thuoc theo canh xien -> goc tu diem 13 toi 14
(defun iic-dhd-goc (d / kieu)
(setq kieu (logand (cdr (assoc 70 d)) 7))
(cond
((= kieu 0) (cdr (assoc 50 d)))
((= kieu 1) (angle (cdr (assoc 13 d)) (cdr (assoc 14 d))))
(t nil)
)
)
;; Day duong kich thuoc theo phap tuyen cua no cho toi khi di qua p.
;; Dich ca diem dinh duong kich thuoc (ma 10) lan diem giua chu (ma 11)
;; cung mot vec to, nen chu di theo duong kich thuoc.
(defun iic-dhd-doi (en p / d g n p10 p11 dl)
(setq d (entget en)
g (iic-dhd-goc d))
(if g
(progn
(setq n (list (- (sin g)) (cos g) 0.0)
p10 (cdr (assoc 10 d))
p11 (cdr (assoc 11 d))
dl (iic-dhd-nhan n (iic-dhd-cham (iic-dhd-tru (list (car p) (cadr p) (caddr p10)) p10) n)))
(setq d (subst (cons 10 (iic-dhd-cong p10 dl)) (assoc 10 d) d))
(if p11 (setq d (subst (cons 11 (iic-dhd-cong p11 dl)) (assoc 11 d) d)))
(entmod d)
(entupd en)
T
)
nil
)
)
;;; ------------------------------------------------------------------
;;; Lenh DHD
;;; ------------------------------------------------------------------
(defun c:DHD (/ *error* ss p i n bo)
(defun *error* (m)
(vla-EndUndoMark (iic-dhd-tai-lieu))
(if (not (wcmatch (strcase m) "*CANCEL*,*QUIT*,*BREAK*"))
(princ (strcat "\nLỗi: " m))
)
(princ)
)
(iic-dhd-bang-ten)
(princ "\nChọn các kích thước cần dóng thẳng hàng:")
(setq ss (ssget '((0 . "DIMENSION"))))
(if ss
(progn
(setq p (getpoint "\nBấm điểm mà các đường kích thước phải đi qua: "))
(if p
(progn
(setq p (trans p 1 0))
(vla-StartUndoMark (iic-dhd-tai-lieu))
(setq i 0 n 0 bo 0)
(while (< i (sslength ss))
(if (iic-dhd-doi (ssname ss i) p)
(setq n (1+ n))
(setq bo (1+ bo))
)
(setq i (1+ i))
)
(vla-EndUndoMark (iic-dhd-tai-lieu))
(princ (strcat "\nĐã dóng thẳng hàng " (itoa n) " kích thước."))
(if (> bo 0)
(princ (strcat " Bỏ qua " (itoa bo) " kích thước không phải kích thước thẳng."))
)
)
)
)
(princ "\nKhông chọn được kích thước nào.")
)
(princ)
)
(princ "\nĐã nạp DHD-IIC: gõ DHD để dóng thẳng hàng kích thước.")
(iic-dhd-bang-ten)
Bản dòng nhắc tiếng Anh: dhd-iic-en.lsp.
Nên dùng cách nào
| Tình huống | Nên dùng |
|---|---|
| Đã có một kích thước nằm đúng chỗ, chỉ cần kéo mấy cái song song về theo | DIMSPACE giá trị 0, hoặc DIM → G |
| Muốn các tầng kích thước cách đều nhau | DIMSPACE với khoảng cách cụ thể, đừng dùng Auto |
| Muốn cả dim ngang lẫn dim đứng về một vị trí bấm tự do | Lisp DHD |
| Muốn cắt chân đường gióng cho gọn | lisp cắt dim |
Muốn ghi cả chuỗi kích thước trong một lượt cho khỏi phải dóng về sau, xem lisp dim nhanh.
Ba điều hay nghe nhưng không đúng
| Hay nghe | Bản 2027 thực sự làm gì |
|---|---|
DIMSPACE dóng được mọi kích thước đã chọn | Chỉ kích thước song song với gốc; dim đứng bị bỏ qua mà không báo |
Cứ Enter chọn Auto là giãn vừa đẹp | Auto lấy chiều cao chữ chưa nhân DIMSCALE; bản vẽ tỉ lệ 40 chỉ giãn 0,36 |
| Dóng lại vị trí dim làm sai con số đo | Số đo giữ nguyên, chỉ vị trí đường kích thước đổi |
Câu hỏi thường gặp
Lisp dóng thẳng hàng dim dùng thế nào?
Nạp tệp dhd-iic.lsp, gõ DHD, quét chọn các kích thước, rồi bấm một điểm mà các đường kích thước phải đi qua.
Không có lisp thì dóng thẳng hàng dim bằng gì?
Gõ DIMSPACE, chọn kích thước gốc, chọn các kích thước còn lại, nhập 0. Chỉ các kích thước song song với gốc được dóng.
Vì sao dim đứng không chịu dóng theo dim ngang?
DIMSPACE và DIM → aliGn chỉ xử lý kích thước song song với kích thước gốc. Lisp DHD thì xử lý cả hai loại trong cùng một lượt.
Dóng xong có làm sai số đo không?
Không. Số đo giữ nguyên, chỉ vị trí đường kích thước và chữ thay đổi.
Giãn đều các tầng dim thế nào?
DIMSPACE, chọn gốc, chọn các tầng còn lại, rồi nhập khoảng cách, ví dụ 250. Đừng nhấn Enter nhận Auto trên bản vẽ có tỉ lệ.
Lỡ dóng sai thì sao?
Gõ U một lần. Cả lệnh DHD được gộp thành một bước hoàn tác.