Tài liệu cad

Lỗi không cắt được chân dim trong CAD: nguyên nhân và cách sửa

Lỗi không cắt được chân dim trong CAD gần như luôn do hai chân dim lệch cao độ Z. Bài chỉ cách nhận mặt, lisp Z0 kèm mật khẩu và lệnh FLATTEN thay thế.

  • autocad123.vn
  • 25/09/2023

Bạn dim xong một cấu kiện, gọi lisp cắt chân dim, lệnh chạy trơn tru và không báo lỗi gì. Nhưng chân dim vẫn thò nguyên như cũ. Lỗi không cắt được chân dim này gần như luôn có chung một thủ phạm, và thủ phạm đó không nằm ở lisp.

Tóm tắt. Hai điểm bạn bắt vào lúc đo đang ở hai cao độ Z khác nhau, nên dim nằm nghiêng trong không gian chứ không nằm bẹp trên mặt phẳng vẽ. Lisp cắt chân dim chỉ làm việc trên mặt phẳng ngang, nên nó không cắt được chân dim đó. Cách chữa nhanh là lisp Z0, gói tải có trong bài, mật khẩu giải nén xaydungso.vn. AutoCAD bản đầy đủ còn sẵn lệnh FLATTEN làm được việc tương tự mà không phải nạp gì thêm. Muốn khỏi tái phát thì đặt biến OSNAPZ bằng 1.

Vì sao lisp không cắt được chân dim

Cái mà dân vẽ quen gọi là chân dim, tài liệu Autodesk gọi là đường gióng, tiếng Anh là extension line. Khi bạn ghi kích thước, AutoCAD lưu lại hai điểm gốc bạn đã bắt vào, kèm đầy đủ cả toạ độ Z của chúng.

Rắc rối bắt đầu khi hai toạ độ Z ấy khác nhau, hoặc cùng khác 0. Dim lúc này là một đối tượng nằm nghiêng trong không gian ba chiều. Nhìn thẳng từ trên xuống thì mắt không phân biệt nổi, vì hình chiếu vẫn rơi đúng chỗ.

Bộ lisp quen dùng, tức lisp cắt dim với lệnh CD, giả định dim nằm trên mặt phẳng ngang của hệ toạ độ World. Gặp một dim treo lơ lửng, nó tính ra điểm mới sai chỗ hoặc bỏ qua luôn. Không có dòng báo lỗi nào hiện ra. Đó là toàn bộ lý do lisp không cắt được chân dim, chứ tệp lisp của bạn không hỏng.

Ban ve co chan dim tho dai ra ngoai, khong cat duoc

Hình 1. Chân dim của các kích thước 1500 và 730 thò dài quá thân hình. Gọi lisp cắt bao nhiêu lần chúng cũng đứng yên.

Có ba nguồn sinh ra cao độ lạ, xếp theo thứ tự hay gặp:

  • Truy bắt điểm rơi vào đỉnh của một khối 3D, hoặc vào một polyline có cao độ.
  • Dán hình từ bản vẽ khảo sát địa hình, nơi mỗi điểm mang cao độ thật.
  • Biến ELEVATION khác 0 lúc vẽ, thường do mở lại một tệp mẫu cũ.

Nhận mặt lỗi trong ba mươi giây

Cách thứ nhất là gõ ID rồi bắt vào đúng điểm gốc của chân dim. AutoCAD in ra ba số X, Y, Z ngay dòng lệnh. Số thứ ba khác 0 là trúng bệnh. Làm với cả hai chân, thấy hai số khác nhau thì càng chắc.

Cách thứ hai nhanh hơn khi bản vẽ rối: xoay góc nhìn sang một hướng nghiêng bất kỳ. Những dim lành vẫn nằm bẹp trên cùng một mặt phẳng, còn dim hỏng tách hẳn ra và treo lơ lửng. Nhìn xong nhớ trả góc nhìn về hướng từ trên xuống.

NHIN TU TREN XUONG: khong thay gi la 2000 hai chan dim trong nhu nhau XOAY NGHIENG: mot chan treo lo lung mat phang Z = 0 Z = 0 Z = 1200 Dim nam nghieng, lisp 2D khong voi toi

Hình 2. Cùng một cái dim. Hình chiếu từ trên xuống vẫn đẹp, nhưng chân bên phải đang ở cao độ 1200.

Đừng lẫn bệnh này với lỗi nhảy dim, khi con số tự đổi sau lúc kéo hình. Đó là chuyện của tính liên kết và của tỉ lệ, không dính gì tới cao độ.

Lisp Z0 kéo mọi cao độ về không

Gói mà trang đang giữ là một lisp rất ngắn, đúng 684 byte, lấy từ diễn đàn CADViet. Toàn văn mã nguồn như sau, để bạn biết mình nạp cái gì vào máy:

(defun c:Z0 ( / acsel elv ) (vl-load-com)
  (if (ssget "_X" (list (cons 410 (getvar 'CTAB))))
    (progn
      (vlax-for obj
        (setq acsel (vla-get-ActiveSelectionSet
          (vla-get-ActiveDocument (vlax-get-acad-object))))
        (foreach elv '(1e99 -1e99)
          (vl-catch-all-apply 'vla-move
            (list obj (vlax-3D-point '(0. 0. 0.))
              (vlax-3D-point (list 0. 0. elv)))))))
      (vla-delete acsel)))
  (princ))

Cách dùng gọn trong ba bước. Nạp tệp bằng APPLOAD, gõ Z0 và đợi máy chạy hết bản vẽ, rồi gọi lại lệnh cắt chân dim như thường lệ.

Mẹo nằm ở hai con số 1e99-1e99. Lisp dời từng đối tượng lên cao 1e99 đơn vị rồi hạ xuống đúng chừng ấy. Máy tính lưu toạ độ bằng số thực dấu chấm động, chỉ giữ được khoảng mười sáu chữ số có nghĩa. Cộng một cao độ vài nghìn vào con số 1e99 thì phần vài nghìn rơi ra ngoài mười sáu chữ số đó và biến mất. Hạ xuống lại thì còn đúng số không.

Vì phép cộng nuốt mất phần lẻ của mọi đỉnh, đối tượng không chỉ bị dời mà bị ép phẳng. Đó chính là lý do nó chữa được cái dim có hai chân lệch nhau: sau khi chạy, cả hai chân cùng nằm ở cao độ 0.

MEO CUA LISP Z0: cong roi tru mot so khong lo Ban dau: chan trai Z = 0, chan phai Z = 1200 hai chan lech nhau nen dim nam nghieng Doi len +1e99: ca hai deu thanh dung 1e99 1200 lot ra ngoai 16 chu so, mat luon Ha xuong -1e99: ca hai cung ve Z = 0 dim nam bep tro lai, lisp cat duoc ngay Mat trai: moi dinh deu bi nuot cao do nen khoi 3D trong ban ve se bi ep bep.

Hình 3. Cơ chế của lisp Z0. Chính chỗ mất mát số học làm nên tác dụng, và cũng chính nó gây ra rủi ro cho hình 3D.

Tên lệnh Z0 có giẫm lên bí danh nào không? Tệp acad.pgp của AutoCAD 2026 trên máy đã được mở ra dò, không có dòng nào khai Z0. Chữ Z đứng một mình là lệnh ZOOM, còn Z0 thì bỏ trống, nạp vào là dùng được ngay.

Tải về

Lisp Z0 — đưa cao độ Z của đối tượng về 0

Mã nguồn đọc được bằng Notepad, dùng để chữa dim lệch cao độ trước khi cắt chân.

  • Định dạng LSP
  • Dung lượng 142 KB gói tải, tệp lisp 684 byte
  • Số tệp 1 tệp LSP, kèm một ảnh hướng dẫn cũ
Tải lisp Z0

Mật khẩu giải nén: xaydungso.vn

Tệp tải về mang tên Z=0 - Thicongnhaxuong - X6.lsp, nhưng ruột nó là một gói nén chứ không phải mã lisp. Nạp thẳng tệp này bằng APPLOAD thì AutoCAD báo lỗi. Hãy đổi đuôi thành .rar, giải nén, rồi mới nạp tệp Z=0.lsp lấy ra được. Trong gói còn kèm một ảnh chỉ đường vòng qua trang khác để xin mật khẩu; bỏ qua ảnh đó, mật khẩu đã in sẵn ở khung tải.

Ba điều lisp Z0 không nói với bạn

Nó đụng mọi đối tượng, không riêng dim

Dòng ssget "_X" trong mã quét sạch đối tượng của tab hiện hành, không kèm bộ lọc kiểu đối tượng nào. Đường, chữ, khối, hatch, tất cả đều bị kéo về cao độ 0. Bản cũ của bài này viết rằng lisp đưa toàn bộ dim trong bản vẽ về Z bằng 0. Câu đó sai ở cả hai vế: không riêng dim, và cũng không phải cả bản vẽ.

Mô hình ba chiều sẽ bị ép bẹp

Đây là chỗ đáng ngại nhất. Với một khối 3D, phép cộng 1e99 nuốt cao độ của mọi đỉnh cùng lúc, nên khối bị ép thành hình dẹt và không dựng lại được. Hãy lưu bản vẽ trước khi gõ Z0. Mã cũng không gọi lệnh đánh dấu nhóm hoàn tác nào, nên một cú Ctrl+Z gỡ lại được tới đâu là chuyện không chắc.

Chỉ tab đang mở, và lớp khoá thì bỏ qua

Bộ lọc (cons 410 (getvar 'CTAB)) giới hạn phạm vi trong tab hiện hành. Dim nằm ở layout khác thì phải mở tab đó lên chạy lại. Mỗi phép dời lại được bọc trong vl-catch-all-apply, nghĩa là đối tượng nào không dời được, điển hình là đối tượng trên lớp đang khoá, sẽ bị bỏ qua lặng lẽ.

Bù lại, mã có hai điểm được. Nó không đổi biến hệ thống nào nên không để lại tác dụng phụ cho phiên làm việc, và có vla-delete dọn tập chọn ở cuối nên không bỏ rác lại trong bản vẽ. Nếu bạn muốn một bộ gọn gồm nhiều tiện ích dim khác thì trang có bộ lisp tổng hợp cho dim.

FLATTEN, cách làm không cần lisp ngoài

AutoCAD bản đầy đủ có sẵn Express Tools, trong đó có lệnh FLATTEN. Tệp flatten.lsp nằm ngay trong thư mục cài đặt của AutoCAD 2026 và mang chữ ký số của Autodesk, nên nạp không bị hộp thoại cảnh báo tệp lạ chặn lại.

Gõ FLATTEN, dòng nhắc đầu tiên là Select objects to convert to 2d.... Chọn xong, máy hỏi Remove hidden lines? với mặc định là No; bản vẽ 2D thì cứ Enter. Khác lisp Z0 ở chỗ bạn chọn đúng vùng cần sửa, không phải cả tab.

Một bẫy đọc được ngay trong mã nguồn của Express Tools. FLATTEN chỉ giữ dim vẫn là dim khi trục Z của nó song song với hướng nhìn hiện hành. Không song song thì lệnh nổ dim thành các nét rời, mất luôn con số tự cập nhật. Vậy nên hãy về hướng nhìn từ trên xuống trước khi gọi lệnh. Lệnh cũng không nhận đối tượng trên lớp bị khoá, và AutoCAD LT thì không có Express Tools nên không có FLATTEN.

Chặn từ gốc bằng biến OSNAPZ

Chữa được một lần rồi thì nên chặn để khỏi tái phát. Biến OSNAPZ quyết định truy bắt điểm có lấy theo cao độ thật của đối tượng hay không.

  • Bằng 0, tức giá trị mặc định: truy bắt giữ nguyên toạ độ Z của điểm bắt được.
  • Bằng 1: mọi điểm truy bắt bị thay Z bằng cao độ hiện hành của UCS, tức biến ELEV.

Đặt bằng 1 trước khi dim một bản vẽ có lẫn hình 3D thì chân dim không còn leo lên cao độ lạ nữa. Tuỳ chọn này cũng nằm trong hộp thoại OPTIONS, thẻ Drafting, ở ô Replace Z value with current elevation.

Có một chi tiết dễ làm người ta mất công. Tài liệu Autodesk ghi rõ OSNAPZ thuộc loại không lưu, nên nó trở lại 0 mỗi lần bạn khởi động lại chương trình. Đặt xong hôm nay thì mai vẫn phải đặt lại. Vài điều đáng nhớ khác lúc ghi kích thước nằm ở bài lưu ý khi dim kích thước trong AutoCAD.

Video minh hoạ trên bản vẽ thật

Đoạn video dưới đây của kênh Nguyen Quang Thuan dựng đúng tình huống này: lisp cắt dim nạp vào máy trót lọt, gõ lệnh vẫn chạy, mà dim thì không nhúc nhích.

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

Chạy Z0 xong vẫn không cắt được chân dim thì sao?

Kiểm hai chuyện. Một, cái dim đó có nằm trong tab bạn vừa chạy lệnh không. Hai, lớp chứa nó có đang khoá không, vì lisp bỏ qua lớp khoá mà chẳng kêu ca gì. Mở khoá lớp rồi chạy lại thường là xong.

Lisp này có làm sai con số kích thước không?

Với bản vẽ 2D thì không. Phép dời chỉ tác động theo phương thẳng đứng, còn khoảng cách đo nằm trong mặt phẳng ngang nên giữ nguyên. Bản vẽ có hình 3D thì khác hẳn: hình bị ép bẹp, và mọi kích thước đo theo phương đứng mất luôn ý nghĩa.

AutoCAD LT chạy được lisp này không?

Từ bản LT 2024 trở đi thì LT đã có AutoLISP. Nhưng mã này gọi các hàm vla- của ActiveX, phần mà LT hỗ trợ hạn chế, nên máy có thể báo hàm lạ. Trên LT cũng không có FLATTEN, vậy cách còn lại là xoá dim hỏng rồi ghi lại.

Nạp lisp xong gõ Z0 mà máy im re, không báo gì cả?

AutoCAD 2026 siết chặt việc nạp tệp nằm ngoài thư mục tin cậy. Ngoài hộp thoại cảnh báo tệp chưa ký quen thuộc, còn một thiết lập chặn hẳn và bỏ qua tệp mà không hiện lời nào. Chép tệp lisp vào một thư mục có trong danh sách đường dẫn tin cậy của Options rồi nạp lại là chạy.

Có cách nào sửa từng dim thay vì cả bản vẽ?

Có. Chọn riêng mấy dim hỏng rồi gọi FLATTEN, vì lệnh này cho phép chọn đối tượng. Cách thủ công là xoá dim rồi ghi lại sau khi đã đặt OSNAPZ bằng 1, chậm nhưng chắc, và chỉ đáng làm khi chỉ có vài cái.

Bản vẽ nhận từ đơn vị khác, dim nào cũng lệch cao độ?

Trường hợp này thường do bản gốc là hình khảo sát hoặc hình 3D. Nên tách phần cần in ra một tệp riêng, chạy FLATTEN cho vùng đó, rồi mới ghi kích thước lại. Ép phẳng cả tệp gốc dễ làm hỏng phần mô hình mà người gửi vẫn còn dùng.

Nói cho gọn lại: gặp cảnh không cắt được chân dim, hãy soi cao độ trước khi đổ tại lisp. Kiểm bằng lệnh ID mất ba mươi giây, chữa bằng Z0 hoặc FLATTEN mất một phút, còn đặt OSNAPZ bằng 1 thì khỏi gặp lại.