Lisp đo tổng chiều dài các đoạn thẳng là tiện ích cộng dồn độ dài của nhiều đối tượng cùng lúc rồi báo về một con số duy nhất. Tên lệnh của nó là TL. Đó chính là chỗ bài cũ của trang bỏ trống, khiến người tải về xong không biết phải gõ gì. Bài này viết lại theo đúng mã nguồn nằm trong tệp tải về, kèm những chỗ dễ làm sai con số.
Tóm tắt. Tệp tải về tên tl.lsp, đúng 607 byte, ghi rõ nguồn là diễn đàn CADViet. Mật khẩu giải nén: xaydungso.vn. Lệnh cần gõ là TL. Lisp nhận bảy loại đối tượng và bỏ qua mọi thứ còn lại. Kết quả hiện trong một hộp thoại nhỏ nên không sao chép được. Bốn chỗ hay làm lệch con số: vòng tròn bị cộng cả chu vi, số lẻ ăn theo thiết lập đơn vị của bản vẽ, đường nằm trong block hay trên lớp đóng băng không được đếm, và kết quả nằm trong hộp thoại nên phải gõ tay lại.
Lisp đo tổng chiều dài các đoạn thẳng làm được gì
Công việc mà nó thay bạn làm rất đơn giản mà lại rất hay phải làm. Bạn quét chọn một mớ đường, nó cộng độ dài từng đường rồi báo tổng. Người bóc khối lượng dùng nó để tính chiều dài tường, chiều dài ống cấp thoát nước, chiều dài tuyến điện, chiều dài lan can. Nói chung là mọi cấu kiện tính đơn giá theo mét dài.
Cách nó đo là lấy độ dài đường cong theo tham số, chứ không phải khoảng cách hai đầu mút. Nghĩa là một cung tròn được tính theo chiều dài cung thật, một polyline gấp khúc được tính theo tổng các đoạn. Nếu bạn chỉ cần biết độ dài của riêng một đối tượng thì không cần tới bài này, dùng lisp đo chiều dài của Line và Pline gọn hơn.
Toàn văn mã nguồn nằm trong tệp, để bạn biết mình nạp cái gì vào máy:
;; free lisp from cadviet.com
(defun Length1 (e) (vlax-curve-getDistAtParam e
(vlax-curve-getEndParam e)))
(defun C:TL ( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,
LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(alert (strcat "Total length = " (rtos L)))
)
Hình 1. Bảy loại đối tượng bên trái được cộng, mọi thứ khác bị bỏ qua trong im lặng. Vòng tròn nằm bên trái nhưng bị cộng cả chu vi, đây là bẫy hay gặp nhất khi quét chọn cả bản vẽ.
Tên lệnh là TL, chỗ mà bài cũ bỏ trắng
Bản viết năm 2018 ghi ba bước dùng lisp, trong đó bước hai chỉ có mỗi chữ Command rồi bỏ trống. Người đọc nạp tệp xong đứng nhìn dòng lệnh mà không biết gõ gì. Tên lệnh thật nằm ngay dòng khai báo trong tệp, là (defun C:TL …), nên bạn gõ TL rồi Enter.
Tên này an toàn. Tệp acad.pgp của AutoCAD 2026 bản R25.1 có TA, TB, TH, TI, TO, TP, TR, TS và TM, nhưng không có TL. Vậy lệnh TL không cướp mất lệnh tắt nào có sẵn. Đây là điều đáng kiểm với mọi lisp lấy từ diễn đàn, vì tên lệnh hai chữ cái rất dễ đụng.
Tải tệp và nạp vào AutoCAD 2026
tl.lsp — lisp cộng tổng chiều dài, lệnh TL
Một tệp lisp duy nhất, 607 byte, nguồn ghi trong tệp là diễn đàn CADViet.
- Số tệp 1
- Dung lượng 607 byte
- Lệnh TL
Mật khẩu giải nén: xaydungso.vn
Nạp tệp bằng lệnh APPLOAD rồi chọn tl.lsp. Nếu muốn lệnh còn dùng được ở lần mở AutoCAD sau thì thêm tệp vào Startup Suite, các bước có trong bài cách load lisp trong CAD một lần dùng mãi mãi.
Chỗ chặn người dùng nhiều nhất trên bản 2026 không nằm ở lisp mà nằm ở thiết lập bảo mật. Biến SECURELOAD mặc định bằng 1 và danh sách thư mục tin cậy TRUSTEDPATHS thì rỗng. Nạp một tệp chưa ký từ thư mục lạ sẽ bung hộp thoại dưới đây. Bấm nhầm nút Do Not Load là lisp không chạy, mà AutoCAD không nhắc lại lần nữa.
Hình 2. Hộp thoại chặn tệp lisp chưa ký. Chọn Load Once để chạy một lần, hoặc Always Load nếu bạn tin nguồn tệp.
Bản 2026 còn một kiểu chặn khó chịu hơn. Khi thư mục chứa tệp bị coi là không tin cậy ở mức cao hơn, AutoCAD bỏ qua tệp mà không báo gì cả. Người dùng tưởng tệp hỏng hoặc tải thiếu. Cách xử lý là đưa thư mục chứa lisp vào Trusted Locations trong hộp thoại Options.
Bốn chỗ làm con số sai
Vòng tròn bị cộng cả chu vi
Bộ lọc trong mã có chữ CIRCLE. Với vòng tròn thì phép đo trả về chu vi trọn vẹn. Quét chọn cả bản vẽ để đo chiều dài tường mà trong đó có vài chục vòng tròn của ren bu lông hay của cây xanh thì tổng sẽ phồng lên mà bạn không hay. Muốn chắc thì đừng quét cả bản vẽ, hãy lọc theo lớp trước rồi mới chọn.
Cung tròn thì ngược lại, được tính đúng theo chiều dài cung. Nếu chỉ có vài cung cần đo thì không cần lisp, AutoCAD có sẵn kiểu ghi kích thước riêng cho việc này, xem bài lệnh ARC LENGTH đo chiều dài cung tròn.
Số lẻ ăn theo thiết lập đơn vị của bản vẽ
Dòng cuối của mã gọi hàm đổi số sang chữ mà không truyền tham số nào. Nghĩa là kiểu hiển thị và số chữ số lẻ lấy thẳng theo hai biến LUNITS và LUPREC của bản vẽ. Bản vẽ nào đặt độ chính xác bằng 0 sẽ thấy tổng bị làm tròn thành số nguyên. Bản vẽ đặt đơn vị kiểu kiến trúc theo hệ inch sẽ thấy kết quả hiện ra dạng feet và inch, trông như lisp bị hỏng.
Con số cũng luôn là đơn vị bản vẽ, không phải mét. Bản vẽ vẽ theo milimét thì tổng 85899 nghĩa là gần 86 mét, phải tự chia cho một nghìn.
Đường trong block và trên lớp đóng băng không được đếm
Tập chọn của AutoCAD không đi vào bên trong block hay xref. Một tuyến ống được gói thành block sẽ không góp gì vào tổng, dù nhìn trên màn hình vẫn thấy nó. Tương tự, đối tượng nằm trên lớp đang đóng băng cũng không lọt vào tập chọn. Đây là lý do phổ biến khiến hai người đo cùng một bản vẽ ra hai con số khác nhau.
Nên soát lớp trước khi đo, và nổ block ra một bản sao riêng nếu buộc phải đếm phần bên trong. Cùng nhóm việc này còn có lisp tính tổng diện tích các hình trong CAD, dùng chung một cách nạp và dính đúng những cái bẫy vừa kể.
Kết quả nằm trong hộp thoại nên không sao chép được
Mã dùng hộp thoại để báo kết quả. Bạn phải nhìn rồi gõ tay con số sang bảng tính, và đó là chỗ sinh sai sót khi làm dự toán. Bản gốc cũng không nói đã cộng bao nhiêu đối tượng, nên bạn không có cách nào tự soát xem mình có chọn thiếu hay không.
Nếu muốn con số bám luôn vào bản vẽ và tự cập nhật khi hình đổi thì hướng khác hẳn là dùng trường dữ liệu, xem ứng dụng Field đo chiều dài đoạn thẳng trong CAD. Cách đó chỉ theo được từng đối tượng một, bù lại con số không bao giờ cũ.
Bản sửa lại cho người bóc khối lượng
Bốn nhược điểm trên của lisp đo tổng chiều dài các đoạn thẳng sửa được bằng vài dòng. Bản dưới đây bỏ CIRCLE khỏi bộ lọc, ép số về dạng thập phân bốn chữ số lẻ, in ra dòng lệnh để bôi đen sao chép, đếm luôn số đối tượng đã cộng, và không văng lỗi khi bạn bấm Enter mà chưa chọn gì. Tên lệnh đặt là TLD để dùng song song với tệp gốc.
(vl-load-com)
(defun c:TLD ( / ss i e L n )
(setq L 0.0 n 0)
(setq ss (ssget '((0 . "LINE,ARC,LWPOLYLINE,
POLYLINE,ELLIPSE,SPLINE"))))
(if ss
(progn
(setq i 0)
(while (< i (sslength ss))
(setq e (ssname ss i)
L (+ L (vlax-curve-getDistAtParam e
(vlax-curve-getEndParam e)))
n (1+ n) i (1+ i)))
(princ (strcat "\nDa cong " (itoa n)
" doi tuong, tong = " (rtos L 2 4))))
(princ "\nChua chon doi tuong nao")
)
(princ)
)
Bản này không đổi biến hệ thống nào, nên bấm Esc giữa chừng cũng không để lại hậu quả. Bạn chép vào một tệp văn bản thuần, lưu đuôi lsp, rồi nạp như tệp gốc.
Xem người ta dùng lisp này để bóc khối lượng
Đoạn phim dưới đây có từ bản bài cũ. Người quay dùng đúng lisp đo tổng chiều dài các đoạn thẳng này để bóc khối lượng, nên bạn thấy được nhịp làm việc thật lúc đưa số sang bảng dự toán.
Hình 3. Ảnh gốc của bài năm 2018, vẫn đúng với mã hiện tại. Dòng chữ Total length trong hộp thoại khớp từng chữ với lệnh alert trong tệp lisp.
Câu hỏi thường gặp
Gõ TL mà AutoCAD báo Unknown command thì sao
Soát theo thứ tự này. Đã APPLOAD tệp chưa, hộp thoại Security có hiện ra và bạn có lỡ bấm Do Not Load không, thư mục chứa tệp đã nằm trong Trusted Locations chưa. Nếu bạn tắt AutoCAD rồi mở lại thì lệnh mất là bình thường, phải nạp lại hoặc thêm vào Startup Suite.
Đã chọn đủ đường rồi mà tổng vẫn thiếu
Ba nghi can quen thuộc là block, xref và lớp đóng băng. Ngoài ra Mline không nằm trong bộ lọc, mà Mline lại hay được dùng để vẽ tường hai nét. Hãy chọn thử một đoạn nghi ngờ rồi xem bảng Properties để biết nó thuộc loại gì.
Tổng ra lớn hơn thực tế nhiều lần thì do đâu
Thường là vòng tròn lọt vào vùng chọn và bị cộng cả chu vi, hoặc bạn quét trúng cả khung tên và các đường trục. Cách chắc ăn là tắt bớt lớp không liên quan rồi mới quét chọn.
AutoCAD LT có chạy được không
Được, nếu là LT bản 2024 trở lên trên Windows, vì từ bản đó LT mới có AutoLISP. Tệp này không gọi hàm nào của Express Tools nên không vướng chỗ đó. LT các bản cũ hơn thì chịu.
Còn lisp nào khác cùng nhóm việc này không
Có, và nên gom lại một chỗ thay vì tải lẻ từng tệp. Trang có một bộ đã liệt kê sẵn tên lệnh của từng tệp trong bài lisp CAD tổng hợp, tìm ở đó nhanh hơn là lục diễn đàn.




















