Tài liệu cad

Lisp cộng tổng text trong CAD: lệnh TINH cộng trừ nhân chia

Lisp cộng tổng text trong CAD bằng lệnh TINH: link tải, mật khẩu giải nén xaydungso.vn, bốn nhánh phép tính và các loại chữ lệnh bỏ qua.

  • autocad123.vn
  • 16/08/2023

Lisp cộng tổng text là cách cộng nhanh một loạt con số đang nằm rời rạc trên bản vẽ, thay vì gõ lại từng số vào máy tính bỏ túi. Gói tải gắn ở bài này làm được cả bốn phép cộng, trừ, nhân và chia. Bài này cho luôn mật khẩu giải nén, tách rõ bốn nhánh của lệnh, và nói thẳng những trường hợp lệnh trả về con số sai.

Tóm tắt. Tệp tải về mang tên lạ, nhưng bên trong đúng là lisp cần tìm. Mật khẩu giải nén là xaydungso.vn, viết thường hết. Lệnh gọi là TINH. Nhánh cộng và nhân nhận cả một lô chữ quét chọn một lượt. Nhánh trừ và chia thì chỉ nhận đúng hai đối tượng. Kết quả được ghi đè lên một dòng chữ có sẵn mà bạn chỉ vào. Mã chỉ đọc đối tượng TEXT một dòng, nên MTEXT và thuộc tính khối nằm ngoài tầm với.

Gói tải của bài lisp cộng tổng text chứa gì

Gói tải về gồm đúng một tệp lisp và một ảnh JPG. Dung lượng ghi theo số byte.

Hạng mụcNội dung
Tệp trên Google Drive74.327 byte, định dạng RAR 4
Tên tệp khi tải vềTINH-lăng trụ tứ giác đều.rar
Ruột góiMột tệp lisp và một ảnh JPG hướng dẫn 81.356 byte
Mật khẩu giải nénxaydungso.vn
Tệp lispTINH-cong tru nhan chia text.lsp, 1.617 byte
Ngày tệp lisp22 tháng 10 năm 2019
Số dòng mã46 dòng, thuần ký tự ASCII
Tên lệnh khai báo(defun c:tinh …), tức gõ TINH
Nguồn gốc ghi trong mãDiễn đàn cadviet.com, chủ đề số 4077

Hai chi tiết cần nói trước. Thứ nhất, tên tệp trên Google Drive nhắc tới lăng trụ tứ giác đều, chẳng liên quan gì tới CAD. Đừng vì thế mà tưởng tải nhầm. Bên trong đúng là tệp lisp của bài này.

Thứ hai, ảnh JPG kèm trong gói là tờ hướng dẫn bảo bạn mở Google, tra một từ khoá hình học, vào trang đầu tiên rồi kéo xuống chân bài lấy mật khẩu. Bỏ qua tờ đó, không phải đi vòng nữa. Mật khẩu đã in ngay dưới đây.

Tải về

Lisp cộng trừ nhân chia text, lệnh TINH

Một tệp .lsp duy nhất, 46 dòng mã. Cộng hoặc nhân cả một lô chữ số quét chọn một lượt, trừ và chia hai số, rồi ghi kết quả vào dòng chữ bạn chỉ.

  • Định dạng LSP, đóng trong RAR
  • Dung lượng tải 74.327 byte
  • Số tệp lisp 1
  • Lệnh TINH
Tải lisp lệnh TINH

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

Nạp tệp vào AutoCAD 2026

Chép tệp .lsp vào một thư mục cố định, ví dụ D:\CAD\lisp. Đừng để nó nằm trong thư mục Downloads, vì mỗi lần dọn máy là mất.

Sau đó làm ba việc. Gõ OPTIONS, sang thẻ Files, thêm thư mục vừa tạo vào cả Support File Search Path lẫn Trusted Locations. Gõ APPLOAD, trỏ tới tệp rồi bấm Load, các bước kể kỹ ở bài cách dùng lệnh appload. Cuối cùng mở Startup Suite ngay trong hộp thoại đó và thêm tệp vào, để mở bản vẽ nào cũng có sẵn lệnh, đúng như cách làm trong bài cách load lisp trong CAD.

Bước Trusted Locations không bỏ được trên bản 2026. Các bản cũ chỉ hiện hộp thoại cảnh báo tệp chưa ký số, bấm nút là chạy tiếp. Bản 2026 siết chặt hơn: tệp nằm ngoài thư mục tin cậy có thể bị bỏ qua trong im lặng, không báo lỗi gì. Gõ TINH thấy Unknown command dù vừa Load xong thì gần như chắc chắn là vì lý do này, chứ không phải tệp hỏng.

Bốn nhánh của lệnh TINH

Bài cũ ở địa chỉ này mô tả năm bước giống nhau cho cả bốn phép tính. Đọc mã thì thấy không phải vậy. Hai nhánh cộng và nhân chạy theo một kiểu, hai nhánh trừ và chia chạy theo kiểu khác hẳn.

Đường đi của lệnh TINH Gõ TINH, chọn một trong bốn dấu Chon phep tinh <+ - * />: Dấu + và * Quét chọn nhiều text một lượt, rồi Enter Không hạn chế số lượng Dấu - và / Bấm từng đối tượng, đúng hai cái Thứ tự có ý nghĩa Bấm vào dòng chữ sẽ nhận kết quả Nội dung cũ của dòng đó bị ghi đè Nhập số chữ số sau dấu phẩy là xong Lần đầu mặc định 0, tức làm tròn thành số nguyên

Hình 1. Bốn dấu đi vào hai lối khác nhau, rồi gặp lại nhau ở bước ghi kết quả. Hai bước cuối luôn chạy, dù bạn chọn phép tính nào.

Nhánh cộng và nhân

Đây là nhánh hay dùng nhất. Gõ TINH, gõ dấu +, rồi quét chọn tất cả các con số cần cộng và Enter. Lệnh đã cài sẵn bộ lọc, nên quét trùm cả bản vẽ cũng chỉ dính chữ chứ không dính đường nét. Nhánh nhân làm y hệt, chỉ khác dấu.

Day so tu 1 den 10 va mot dong chu ghi ket qua trong ban ve CAD

Hình 2. Bố cục quen thuộc khi dùng lệnh này. Mười con số nằm rải trên bản vẽ, và một dòng chữ để trống bên phải chờ nhận kết quả. Dòng chữ nhận kết quả phải có sẵn từ trước, lệnh không tự tạo ra nó.

Có một cái bẫy nhỏ ở nhánh nhân. Nếu trong vùng quét lẫn một dòng chữ không phải số, lệnh coi dòng đó bằng 0. Phép nhân gặp một số 0 là ra 0. Vậy nên nhân xong thấy kết quả bằng 0 thì đừng nghĩ lệnh hỏng, hãy soát lại vùng vừa quét.

Nhánh trừ và chia

Hai nhánh này không quét chọn được. Mã dùng lệnh chọn từng đối tượng một, hỏi hai lần liên tiếp. Với phép trừ, lần bấm thứ nhất là số bị trừ, lần thứ hai là số trừ. Với phép chia, lần thứ nhất là số bị chia. Bấm ngược thứ tự là ra kết quả khác hẳn.

Hai nhánh này cũng không có bộ lọc. Bấm nhầm vào một đường thẳng hay một khối là lệnh dừng luôn bằng thông báo lỗi kiểu bad argument type. Bấm Enter bỏ qua cũng vậy. Phép chia mà số chia bằng 0 thì lệnh báo divide by zero rồi thoát, không ghi được gì.

Ghi kết quả và số chữ số thập phân

Sau khi tính xong, lệnh in ngay con số ra dòng lệnh. Muốn xem tổng thôi thì nhìn dòng lệnh là đủ. Nhưng lệnh vẫn hỏi tiếp, chờ bạn bấm vào một dòng chữ để ghi kết quả vào đó. Nội dung cũ của dòng chữ ấy bị thay hẳn.

Câu hỏi cuối là số chữ số sau dấu phẩy. Lần chạy đầu tiên trong mỗi bản vẽ, giá trị mặc định là 0, nghĩa là kết quả bị làm tròn thành số nguyên. Cộng ra 12,5 mà thấy hiện 13 thì là vì vậy. Gõ 2 rồi Enter là có hai chữ số thập phân, và lần sau lệnh nhớ luôn con số đó.

Kết quả ghi ra là chữ tĩnh, không dính dáng gì tới các số nguồn. Sửa một số nguồn thì phải chạy lại lệnh. Muốn con số tự cập nhật theo thì phải đi đường khác, dùng công cụ Field như trong bài lisp link Text với Text.

Lisp cộng tổng text bỏ qua những gì

Đây là chỗ hay gây hiểu lầm nhất. Bộ lọc trong mã đóng cứng ở chuỗi TEXT, tức loại chữ một dòng. Mọi thứ khác đều vô hình với lệnh.

Lệnh chỉ thấy đối tượng loại TEXT Cộng được TEXT một dòng gõ bằng lệnh TEXT hoặc lệnh DTEXT Mọi lớp, mọi kiểu chữ Bỏ qua MTEXT nhiều dòng Thuộc tính khối Chữ nằm trong block Số của Dim, Leader Chữ trên lớp đang khoá Đọc được nhưng ra số sai 1.234,56 được hiểu là 1,234 12,5 được hiểu là 12 Ø20 được hiểu là 0 Chỉ lấy phần số ở đầu, dấu chấm là dấu thập phân

Hình 3. Bên trái là thứ lệnh nhìn thấy, bên phải là thứ nó không thấy. Khung dưới nguy hiểm hơn cả: chữ vẫn được cộng, nhưng con số lấy ra không phải con số bạn đọc trên màn hình.

Bốn loại chữ nằm ngoài tầm với

Loại thứ nhất là MTEXT, chữ nhiều dòng gõ bằng lệnh Mtext. Bản vẽ làm những năm gần đây dùng MTEXT nhiều hơn TEXT, nên đây là lý do phổ biến nhất khiến tổng bị thiếu. Loại thứ hai là thuộc tính khối, tức phần chữ điền vào khung tên hay ký hiệu cao độ. Loại thứ ba là mọi chữ nằm bên trong định nghĩa block. Loại thứ tư là con số do lệnh ghi kích thước sinh ra.

Còn một trường hợp dễ quên: chữ nằm trên lớp đang khoá thì không chọn được, nên cũng không được cộng. Quét cả bản vẽ mà tổng vẫn hụt thì mở bảng Layer soát lại các ổ khoá trước đã. Nếu việc bạn cần không phải cộng mà là đếm xem mỗi dòng chữ lặp bao nhiêu lần, hãy dùng lisp thống kê text thay cho lệnh này.

Dấu phân cách hàng nghìn làm sai kết quả

Mã đổi chữ thành số bằng hàm atof. Hàm này đọc từ đầu chuỗi, lấy phần số, và dừng ngay ở ký tự đầu tiên không hợp lệ. Nó chỉ coi dấu chấm là dấu thập phân.

Hệ quả rất khó chịu với bảng thống kê viết theo lối Việt Nam. Chuỗi 1.234,56 bị đọc thành 1,234. Chuỗi 12,5 bị đọc thành 12. Chữ nào bắt đầu bằng ký hiệu, ví dụ đường kính thép, thì ra 0. Cách chắc ăn là để các số cần cộng ở dạng trơn, chỉ có chữ số và dấu chấm thập phân. Ghi thêm đơn vị ở sau thì vẫn đúng, vì phần số đứng trước.

Hai chỗ nên sửa trong mã

Tệp lisp mở được bằng Notepad. Hai chỗ dưới đây sửa rất nhanh, và sửa xong thì lisp cộng tổng text chạy chắc tay hơn hẳn.

Khai báo biến cục bộ

Dòng đầu tiên của mã là (defun c:tinh(), không có danh sách biến cục bộ. Mười một biến trong lệnh vì thế đều là biến chung của bản vẽ, trong đó có cả tên ss rất dễ đụng với lisp khác đang chạy cùng.

Sửa dòng đó thành (defun c:tinh (/ ptinh ss kqua ent sobitru sotru sobichia sochia obj ssle1) là hết. Biến ssle cố ý để ngoài danh sách, vì chính nó giữ số chữ số thập phân cho lần chạy sau.

Cho lệnh nhận cả MTEXT

Trong mã có hai chỗ viết '((0 . "TEXT")), một ở nhánh cộng và một ở nhánh nhân. Đổi cả hai thành '((0 . "TEXT,MTEXT")) là lệnh chọn được cả chữ nhiều dòng. Bộ lọc chấp nhận nhiều tên loại đối tượng ngăn nhau bằng dấu phẩy.

Sửa xong thì nhớ điều này. Nội dung MTEXT có thể mang theo mã định dạng, ví dụ đoạn đổi phông nằm trong dấu ngoặc nhọn ở đầu chuỗi. Khi đó phần số không còn đứng đầu nữa, và hàm atof trả về 0. Đoạn MTEXT dài quá một ngưỡng còn bị cắt làm nhiều mảnh, mã hiện tại chỉ đọc mảnh cuối. Nghĩa là sửa bộ lọc giúp được với MTEXT đơn giản, còn MTEXT có định dạng thì vẫn phải làm cách khác.

Lỗi thường gặp

Hiện tượngVì saoCách xử
Gõ TINH báo Unknown commandTệp chưa nạp, hoặc đã nạp nhưng vừa mở sang bản vẽ khácNạp lại bằng APPLOAD rồi thêm vào Startup Suite
Load xong vẫn không có lệnh, không báo lỗiTệp nằm ngoài thư mục tin cậy nên bản 2026 bỏ quaThêm thư mục vào Trusted Locations trong OPTIONS
Tổng thiếu mất vài sốNhững số đó là MTEXT, thuộc tính khối hoặc số của DimĐổi bộ lọc thành TEXT,MTEXT hoặc gõ lại bằng lệnh TEXT
Quét cả bản vẽ mà vẫn hụtChữ nằm trên lớp đang khoáMở khoá lớp rồi quét lại
Kết quả bị làm tròn thành số nguyênLần chạy đầu, số chữ số thập phân mặc định là 0Gõ 2 ở câu hỏi cuối, lệnh nhớ cho các lần sau
Nhân ra đúng số 0Trong vùng quét có một dòng chữ không phải sốQuét lại đúng vùng chỉ có chữ số
Số hàng nghìn cộng ra rất nhỏChữ viết kiểu 1.234,56 nên chỉ lấy được 1,234Bỏ dấu phân cách hàng nghìn ở các số cần cộng
Lệnh dừng, báo bad argument typeỞ nhánh trừ hoặc chia đã bấm nhầm vào đối tượng không phải chữGõ lại lệnh, bấm đúng vào dòng chữ số

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

Tên lệnh TINH có đụng lệnh nào có sẵn của AutoCAD không?

Không. Trong tệp acad.pgp của AutoCAD 2026 bản tiếng Anh không có lệnh tắt nào tên TINH. Cái gần giống là TI, tắt của TILEMODE, nhưng đó là tên khác nên hai bên không tranh nhau. Gõ TINH khi chưa nạp lisp thì AutoCAD chỉ báo không biết lệnh.

Chạy được trên AutoCAD LT không?

Đừng trông cậy vào LT. Từ bản LT 2024 trở đi thì LT đã chạy được AutoLISP, nhưng nhóm hàm ActiveX thì LT không hỗ trợ. Tệp này gọi tới nhóm đó ngay dòng thứ hai của lệnh, và gọi lần nữa ở bước ghi kết quả. Trên LT vì thế lệnh không chạy trọn vẹn. Bản LT trước 2024 và bản chạy trên máy Mac thì không nạp được tệp lisp.

Lỡ ghi đè nhầm lên một dòng chữ quan trọng thì sao?

U một lần là lấy lại được. Lệnh chỉ sửa đúng một đối tượng và chỉ sửa ở bước cuối cùng, nên một bước hoàn tác là đủ. Đừng chạy lại lệnh để ghi đè lần nữa, vì nội dung cũ đã mất hẳn sau lần đầu.

Muốn cộng diện tích các hình chứ không phải cộng chữ thì dùng gì?

Lệnh này chỉ đọc chữ, không tính được diện tích. Việc đó cần một công cụ khác, xem bài lisp tính tổng diện tích các hình trong CAD. Cũng có thể dùng thẳng lệnh AREA có sẵn với tuỳ chọn cộng dồn, nhưng cách đó phải chỉ từng hình một.