Lisp đổi màu đối tượng trong cad là một tệp rất nhỏ, chỉ 2.946 byte, viết từ tháng 3 năm 2020 và tới nay vẫn chạy được. Nó nạp thêm 37 lệnh tắt vào AutoCAD. Gõ một lệnh, quét chọn, bấm phím cách là cả nhóm đối tượng đổi màu cùng lúc. Bài này giữ nguyên tệp tải về của trang, đọc thẳng mã nguồn để nói đúng lệnh nào có thật, và nói rõ khi nào nên dùng lisp, khi nào không.
Tóm tắt. Tệp tải về nén RAR, mật khẩu giải nén autocad123. Bên trong là 37 lệnh. Lệnh CL mở hộp thoại chọn màu. Lệnh CK cho gõ số màu ở dòng lệnh. C1 đến C31 đổi thẳng sang màu mang số tương ứng. CH, CHH và C255 cho ba sắc xám. BL trả màu về ByLayer. Bản viết năm 2020 ghi lệnh chạy từ C1 tới C255, điều đó không đúng với tệp: trong tệp chỉ có tới C31, cộng thêm ba lệnh rời. Trên AutoCAD 2026, tệp lisp chưa ký nằm ngoài thư mục tin cậy sẽ bị hộp thoại Security chặn lại trước khi kịp chạy.
Lisp đổi màu đối tượng trong cad gồm những lệnh nào
Cả 37 lệnh đều dựa trên một lệnh có sẵn của AutoCAD là CHANGE. Trình tự mà lisp thay bạn gõ là: gọi CHANGE, đưa vùng chọn vừa quét vào, chọn tùy chọn Properties, rồi chọn Color và điền số màu. Bạn chỉ phải làm hai việc: gõ tên lệnh và quét chọn. Đây là chỗ lisp tiết kiệm thao tác thật, nhất là khi phải đổi màu vài chục lần trong một buổi.
Danh sách lệnh dưới đây lấy đúng theo mã nguồn trong tệp, không phải theo trí nhớ.
| Lệnh | Việc nó làm | Dòng mã trong tệp |
|---|---|---|
| CL | Chọn đối tượng trước, sau đó mở hộp thoại chọn màu để bấm màu bất kỳ | (setq m (acad_colordlg 7)) |
| CK | Chọn đối tượng trước, sau đó gõ số màu ở dòng lệnh | (setq m (getint "Chon mau muon doi: ")) |
| C1 đến C31 | Đổi thẳng sang màu chỉ mục 1 tới 31, không hỏi gì thêm | (defun c:c1 () (ssget) (command "change" "p" "" "p" "c" "1" "")) |
| CH | Đổi sang màu 250, xám đậm | (defun c:ch () (ssget) (command "change" "p" "" "p" "c" "250" "")) |
| CHH | Đổi sang màu 251, xám vừa | (defun c:chh () (ssget) (command "change" "p" "" "p" "c" "251" "")) |
| C255 | Đổi sang màu 255, trắng | (defun c:c255 () (ssget) (command "change" "p" "" "p" "c" "255" "")) |
| BL | Trả màu về ByLayer, tức là theo màu của lớp | (defun c:bl () (ssget) (command "change" "p" "" "p" "color" "bylayer" "")) |
Vài số màu quen thuộc trong bảng màu chỉ mục của AutoCAD: 1 đỏ, 2 vàng, 3 lục, 4 lơ, 5 lam, 6 tím, 7 trắng hoặc đen tùy nền, 8 và 9 là hai sắc xám. Từ 10 trở lên là vòng màu chia theo sắc độ, khó nhớ số. Sáu số cuối, từ 250 tới 255, là dải xám chuyển dần từ đậm sang trắng. Đó là lý do tác giả tệp đặt riêng hai lệnh CH và CHH: để làm mờ phần nền và phần tham chiếu, giữ cho phần đang vẽ nổi lên.
Muốn màu nào cũng bấm được thì dùng CL. Muốn nhanh và biết chắc số thì dùng C1 tới C31. Muốn một số ngoài dải đó thì dùng CK rồi gõ số.
Tải tệp về và mở ra: bên trong có gì
Tải tệp tại đây: s032 lisp đổi màu đối tượng. Tệp trên Google Drive có tên hơi lạ, còn dính cả cụm diện tích tam giác vuông. Đó là lỗi đặt tên cũ, nội dung bên trong vẫn đúng là lisp đổi màu. Tệp nặng khoảng 116 KB.
Mật khẩu giải nén là autocad123, viết thường. Giải nén xong bạn được đúng một tệp: s032.doi mau doi tuong.lsp.
Tên tệp có dấu cách và dấu chấm ở giữa. Nên đổi thành một tên không dấu, không khoảng trắng, ví dụ doimau.lsp, rồi để trong một thư mục cố định trên ổ C. Lý do sẽ rõ ở phần sau: đường dẫn đó còn phải khai báo lại vào danh sách thư mục tin cậy.
Đừng bỏ qua bước đổi tên. Thư mục Downloads là nơi tệp dễ bị dọn nhất, và cũng là nơi bạn không bao giờ nên khai báo là thư mục tin cậy. Nếu bạn còn tải thêm tiện ích từ bộ lisp cad tổng hợp thì để chung một chỗ cho dễ khai báo. Chọn một chỗ riêng, ví dụ C:\lisp, rồi để tệp ở đó luôn.
Nạp lisp trên AutoCAD 2026 và hộp thoại chặn
Nạp bằng lệnh APPLOAD
Gõ APPLOAD ở dòng lệnh, tìm tới tệp lsp, bấm Load; nếu chưa quen hộp thoại này thì xem bài cách load lisp trong CAD. AutoCAD báo đã nạp là dùng được ngay, không cần khởi động lại. Nhưng lần nạp này chỉ có hiệu lực cho phiên làm việc hiện tại. Đóng AutoCAD rồi mở lại là mất, phải nạp lần nữa. Muốn nạp một lần dùng mãi thì trong hộp thoại APPLOAD bấm Contents ở khung Startup Suite rồi thêm tệp vào đó.
Hộp thoại Security và chuyện lisp không chạy
Đây là chỗ phần lớn người đọc mắc kẹt, và bản viết năm 2020 chưa thể nói tới. AutoCAD đời mới không cho tệp lsp, fas hay vlx chưa ký chạy tự do. Nếu tệp nằm ngoài danh sách thư mục tin cậy, AutoCAD dừng lại và bật hộp thoại Security - Unsigned Executable File.
Hình 1. Hộp thoại chặn tệp lisp chưa ký. Ba nút ở đáy quyết định lisp của bạn có chạy hay không.
Ba nút ở đáy hộp thoại có ý nghĩa khác hẳn nhau. Load Once cho chạy đúng lần này, lần sau hỏi lại. Do Not Load là không nạp, và đây chính là nút mà nhiều người bấm nhầm rồi kết luận lisp hỏng. Always Load thì AutoCAD nhớ và không hỏi nữa. Nếu bạn tin nguồn tệp thì bấm Always Load.
Khai báo thư mục tin cậy cho gọn
Cách sạch hơn là khai báo hẳn thư mục chứa lisp vào danh sách tin cậy. Vào OPTIONS, thẻ Files, tìm mục Trusted Locations, thêm thư mục của bạn vào. Danh sách này chính là giá trị của biến hệ thống TRUSTEDPATHS. Sau khi khai báo, mọi tệp lisp trong thư mục đó nạp thẳng, không hỏi.
Đúng một điều cần cẩn thận: chỉ khai báo thư mục do bạn kiểm soát. Đừng khai báo Downloads, đừng khai báo cả ổ đĩa. Lisp là mã chạy được, và thư mục tin cậy nghĩa là bạn nhận trách nhiệm với mọi thứ rơi vào đó.
Ba chi tiết trong mã nguồn nên biết trước
Lệnh CH đè lên phím tắt quen thuộc
Trong tệp acad.pgp mặc định của AutoCAD, CH là phím tắt của lệnh PROPERTIES, tức bảng thuộc tính. Tệp lisp này lại định nghĩa một lệnh cũng tên CH, việc của nó là tô xám. Sau khi nạp lisp, gõ CH có thể không mở bảng Properties nữa mà nhảy sang hỏi chọn đối tượng. Nếu bạn quen bấm CH để mở Properties thì nên xóa hoặc đổi tên dòng đó trong tệp lsp, hoặc đặt lại phím tắt theo bài cách đổi lệnh tắt trong CAD. Sửa rất dễ: mở tệp bằng Notepad, đổi chữ ch trong dòng defun thành một tên khác, lưu lại rồi nạp lại.
Dòng chữ KTS_DUY hiện ở thanh trạng thái
Hai lệnh CL và CK có thêm một câu mà bài cũ không nhắc: chúng đặt biến MODEMACRO thành chuỗi KTS_DUY. Đó là chữ ký của người viết lisp, và nó hiện ra ở góc trái thanh trạng thái sau khi bạn chạy lệnh. Nó vô hại, không ảnh hưởng bản vẽ, không in ra giấy. Muốn xóa thì gõ MODEMACRO rồi nhập một dấu chấm để trả về mặc định.
Chỉ CL và CK gộp thành một bước Undo
CL và CK có bọc cặp lệnh UNDO Begin và UNDO End. Nghĩa là một lần Ctrl+Z hoàn tác trọn vẹn lần đổi màu đó. Các lệnh C1 tới C31 thì không bọc. Chúng vẫn hoàn tác được, nhưng theo từng bước của lệnh CHANGE. Một chi tiết nhỏ nữa: chạy xong C1 bạn sẽ thấy chữ nil ở dòng lệnh. Đó không phải lỗi, chỉ là giá trị trả về của hàm mà tác giả không chặn lại.
Cách dùng từng bước
Gõ tên lệnh, ví dụ C1, rồi bấm Enter. Nếu bật gợi ý dòng lệnh, AutoCAD sẽ liệt kê sẵn C1, C10, C11 và các lệnh cùng đầu, đúng như hình dưới. Đây cũng là cách kiểm nhanh xem lisp đã nạp hay chưa: gõ chữ C mà không thấy danh sách này thì lisp chưa vào.
Hình 2. Gõ C1 và danh sách gợi ý bung ra. Thấy được danh sách này là lisp đã nạp thành công.
Sau khi bấm Enter, AutoCAD chuyển sang chờ bạn chọn đối tượng. Quét chọn hoặc bấm từng đối tượng, chọn xong bấm phím cách hoặc Enter để chốt. Màu đổi ngay lúc đó.
Hình 3. Kết quả của C1: đối tượng vừa chọn chuyển sang màu đỏ, các đối tượng khác giữ nguyên.
Với CL thì thứ tự đảo lại một nhịp: chọn đối tượng trước, hộp thoại màu mới hiện lên sau. Bấm màu rồi bấm OK là xong.
Không cần lisp vẫn đổi được màu
Phần này bài cũ không có, mà lại là phần quan trọng nhất. AutoCAD có sẵn hai cách đổi màu, và trong bản vẽ kỹ thuật thì một trong hai cách đó tốt hơn lisp.
Cách 1: chọn đối tượng rồi đổi trong bảng Properties
Chọn các đối tượng cần đổi, bấm Ctrl+1 để mở bảng Properties, rồi bấm vào ô Color ở nhóm General và chọn màu. Cách này không cần cài gì, chạy trên mọi máy, kể cả AutoCAD LT. Muốn chọn nhanh cả nhóm giống nhau thì bấm chuột phải vào một đối tượng rồi chọn Select Similar, hoặc dùng lệnh QSELECT để lọc theo lớp, theo loại đối tượng, theo màu.
Cách 2: đổi màu của lớp, cả lớp đổi theo
Nếu các đối tượng đang để màu ByLayer thì bạn không cần đụng vào chúng. Mở Layer Properties Manager bằng lệnh LAYER, bấm vào ô màu của lớp, chọn màu mới. Toàn bộ đối tượng thuộc lớp đó đổi màu ngay. Một thao tác thay cho cả trăm lần quét chọn.
Vì sao màu ByLayer thường là cách đúng hơn
Đây là chỗ dễ làm hỏng bản vẽ mà ít ai nói ra. Khi bạn gán màu thẳng cho đối tượng, màu đó trở thành một đè ghi. Đối tượng thôi nghe theo lớp của nó. Từ lúc đó, đổi màu lớp không còn tác dụng với nó nữa.
Hậu quả hiện ra ở hai chỗ. Thứ nhất là in ấn. Rất nhiều đơn vị vẫn in theo kiểu CTB, tức là bề dày nét in được tra theo màu. Một đối tượng bị gán thẳng màu đỏ sẽ in ra bề dày của màu đỏ, dù nó nằm trên lớp trục hay lớp tường. Bản vẽ nhìn trên màn hình vẫn đẹp, in ra mới thấy nét sai.
Thứ hai là trao đổi file. Người nhận mở bản vẽ, sửa màu lớp theo quy ước của họ, và thấy một phần bản vẽ không chịu đổi. Họ sẽ phải đi dò từng cụm. Bản vẽ càng nhiều đè ghi màu thì càng khó bàn giao.
Hình 4. Ba nguồn màu của một đối tượng. Lisp trong bài làm việc ở hàng trên cùng, còn hàng giữa mới là nơi bản vẽ kỹ thuật nên ở.
AutoCAD có sẵn lệnh SETBYLAYER để dọn việc này. Chọn đối tượng, chạy SETBYLAYER, nó trả màu, kiểu nét và bề dày nét về ByLayer một lượt. Lệnh còn hỏi thêm hai câu: có đổi cả những thứ đang để ByBlock không, và có đi vào bên trong block không. Lệnh BL trong tệp lisp làm việc tương tự nhưng chỉ với màu, và không vào được trong block.
Nói vậy không có nghĩa lisp là thứ bỏ đi. Nó rất hợp cho việc tô màu tạm để soát bản vẽ: đánh dấu phần đã kiểm, làm mờ phần nền bằng CH, tô đỏ chỗ cần sửa. Đó là màu để làm việc, không phải màu để in. Xong việc thì quét chọn và chạy BL trả lại tất cả.
Hình 5. Ba tình huống, ba cách khác nhau. Lisp không thay thế lớp, nó chỉ nhanh hơn ở việc tô màu tạm.
Bốn chỗ lisp này bó tay
Đọc mã nguồn thì thấy rõ giới hạn, vì cả 37 lệnh đều gọi CHANGE và CHANGE chỉ làm việc với đối tượng bạn chọn được.
Thứ nhất là đối tượng nằm trong block. Quét chọn một block thì bạn chọn được cái block chứ không phải từng nét bên trong. Lệnh sẽ đổi màu của bản thân block. Những nét bên trong đã bị gán màu cứng vẫn giữ nguyên màu cũ. Muốn sửa thật thì vào BEDIT để sửa định nghĩa block, hoặc dùng SETBYLAYER và trả lời Yes ở câu hỏi về block.
Video dưới đây của chúng tôi làm đúng phần khó nhất trong bốn chỗ trên: đổi màu block và gom cả bản vẽ về một màu.
Thứ hai là lớp bị khóa. Đối tượng trên lớp đã bấm ổ khóa thì không chọn được, nên lisp bỏ qua chúng không báo gì. Mở khóa lớp trong LAYER rồi chạy lại. Lớp bị đóng băng bằng Freeze cũng vậy.
Thứ ba là nét để màu ByBlock. Loại nét này vốn lấy màu từ block chứa nó, nhờ vậy cùng một block chèn nhiều chỗ có thể mang nhiều màu. Gán thẳng một số màu lên nó là phá mất cơ chế đó, và không lấy lại được bằng lệnh BL, vì BL chỉ trả về ByLayer chứ không trả về ByBlock.
Thứ tư là tham chiếu ngoài. Đối tượng trong một bản vẽ được chèn bằng XREF không sửa được từ bản vẽ hiện tại. Muốn đổi màu thì hoặc mở bản vẽ gốc ra sửa, hoặc dùng đè ghi lớp của xref trong Layer Properties Manager.
Thêm một lưu ý nhỏ về kích thước và đường dẫn ghi chú. Nếu kiểu kích thước đang ép màu riêng cho đường gióng, đường kích thước hay chữ số, thì đổi màu đối tượng có thể không thấy thay đổi gì. Chỗ đó phải sửa trong DIMSTYLE.
Câu hỏi thường gặp
Gõ C1 mà AutoCAD báo Unknown command thì làm sao?
Lisp chưa nạp; bài không load được lisp trong CAD liệt kê đủ các nguyên nhân. Soát ba việc theo thứ tự: đã chạy APPLOAD chưa, hộp thoại Security có hiện ra và bạn có lỡ bấm Do Not Load không, và bạn có vừa đóng mở lại AutoCAD sau khi nạp không. Nạp bằng APPLOAD chỉ sống trong một phiên, muốn giữ thì thêm vào Startup Suite.
Vì sao gõ C50 hay C100 lại không có lệnh?
Vì tệp không định nghĩa những lệnh đó. Bản viết cũ ghi lệnh chạy từ C1 tới C255, nhưng đọc mã nguồn thì chỉ có C1 tới C31, cộng thêm CH cho màu 250, CHH cho màu 251 và C255 cho màu 255. Cần một số ngoài dải đó thì dùng CK rồi gõ số, hoặc dùng CL rồi bấm trên bảng màu.
Lisp đổi màu đối tượng trong cad có chạy trên AutoCAD LT không?
AutoCAD LT từ bản 2024 đã chạy được AutoLISP, và tệp này chỉ dùng các hàm cơ bản nên nhiều khả năng chạy được. Dù vậy, với LT thì cách gọn hơn vẫn là chọn đối tượng rồi đổi ô Color trong bảng Properties, không phải cài gì thêm.
Đổi màu xong mà nét in ra vẫn sai bề dày thì vì sao?
Gần như chắc chắn do bản vẽ in theo kiểu CTB, tức tra bề dày nét theo màu. Bạn vừa gán màu thẳng cho đối tượng nên nó nhận bề dày theo màu mới, không theo lớp nữa. Chạy BL hoặc SETBYLAYER để trả về ByLayer rồi in lại.
Có xóa được lisp ra khỏi AutoCAD không?
Có. Vào APPLOAD, mở Startup Suite, chọn tệp rồi bấm Remove. Sau đó khởi động lại AutoCAD là các lệnh biến mất, phím tắt CH cũng trở về với lệnh PROPERTIES.

















