Tài liệu cad

Lisp phá block trong cad: xử lý được cả block MINSERT

EXPLODE bó tay với block MINSERT vì cả mảng chỉ là một thực thể. Lisp phá block trong cad ở đây là XMINSERT, tách mảng thành block rời rồi bạn mới phá được.

  • autocad123.vn
  • 09/02/2023

Gõ EXPLODE mà AutoCAD không chịu phá, trong khi đối tượng rõ ràng là một block. Đó thường là block chèn kiểu MINSERT. Bài này giữ nguyên tệp lisp phá block trong cad mà trang đã chia sẻ từ năm 2020, nói rõ tệp đó làm gì, và giải thích vì sao MINSERT lại là ca khó. Tệp nằm trong bộ tổng hợp lisp cad hay mà trang vẫn cập nhật.

Tóm tắt. Tệp lisp phá block trong cad ở bài này là XMINSERT_Pha block minsert.lsp, nén trong một tệp RAR. Lệnh gọi là XMINSERT. Nó không phá block theo nghĩa thông thường. Nó đọc thông số mảng của MINSERT, chèn lại thành từng block rời rồi xoá thực thể MINSERT cũ. Muốn ra nét vẽ thì bạn EXPLODE thêm một lần nữa. Ba tình huống hay bị gộp làm một là MINSERT, block bị khoá phân rã và block lồng nhau, xử lý mỗi cái một khác. Mốc kiểm nội dung: tháng 9 năm 2026.

Vì sao lệnh EXPLODE không phá được block MINSERT

Lệnh MINSERT trong AutoCAD chèn một block thành mảng chữ nhật. Điểm mấu chốt nằm ở chỗ toàn bộ mảng đó chỉ là một thực thể duy nhất. Bản vẽ không lưu 40 block, nó lưu một block cùng bốn con số: số hàng, số cột, bước hàng và bước cột. Bạn bấm chọn một ô bất kỳ trong mảng thì cả mảng sáng lên, vì thật ra chỉ có một đối tượng ở đó.

EXPLODE làm đúng một việc: bóc một lớp vỏ của một đối tượng để lấy các thành phần bên trong. Với MINSERT, bóc lớp vỏ đồng nghĩa với vứt bỏ bốn con số định nghĩa mảng, và AutoCAD không có cách nào diễn tả kết quả cho gọn. Vì vậy chương trình từ chối thẳng, dòng lệnh báo là không phá được block dạng MINSERT chứ không phải báo lỗi chọn nhầm đối tượng.

Hai điều nữa nên biết về MINSERT. Thứ nhất, nó chỉ gõ được ở dòng lệnh, không có nút trên ribbon và không có ô nào trong hộp thoại Insert sinh ra nó. Nhiều bản vẽ có MINSERT là do nhận từ người khác hoặc do phần mềm khác xuất ra, chứ người dùng ít khi tự chèn. Thứ hai, mảng MINSERT rất nhẹ. Một mảng 20 hàng 20 cột chỉ tốn chỗ bằng một block. Đổi nó thành 400 block rời là bản vẽ nặng lên thật sự, nên chỉ làm khi cần sửa. Bản vẽ vốn đã ì sẵn thì nên dọn rác bằng lisp làm nhẹ bản vẽ cad trước, rồi hãy phá mảng.

MINSERT khác block thường ở chỗ nào Ba block thường 3 thực thể riêng Chọn 1 cái thì sáng đúng 1 cái Một MINSERT 1 thực thể duy nhất Nhớ sẵn số hàng, số cột và bước lặp EXPLODE bóc một lớp của một thực thể Bóc MINSERT ra thì mất luôn bốn con số định nghĩa mảng, nên AutoCAD từ chối. Lối ra: đổi MINSERT thành block rời trước, rồi mới EXPLODE từng cái.

Hình 1. Cả mảng MINSERT chỉ là một đối tượng. Đó là lý do EXPLODE bó tay, chứ không phải do bạn chọn sai.

Ba tình huống khác nhau hay bị gộp làm một

Có một nhầm lẫn rất phổ biến, và bản hướng dẫn cũ trên trang này cũng từng viết như vậy: bỏ tích Allow exploding lúc tạo block thì ra block MINSERT. Điều đó không đúng, vì hai chuyện này nằm ở hai chỗ khác nhau trong bản vẽ. MINSERT là cách chèn block vào bản vẽ. Allow exploding là một tính chất của định nghĩa block. Một block bỏ tích Allow exploding vẫn được chèn từng cái một như bình thường, chọn cái nào sáng cái đó, chỉ là EXPLODE không đụng vào được. Cũng đừng lẫn khoá phân rã với việc khoá cả bản vẽ trước khi gửi ra ngoài, chuyện đó có tiện ích riêng là lisp khoá bản vẽ cad.

Block lồng nhau lại là chuyện thứ ba. Ở đây EXPLODE chạy được, chỉ là chạy xong bạn vẫn thấy block, nên dễ tưởng lệnh không ăn. Thật ra lệnh đã bóc đúng một lớp và bên trong lớp đó là các block con.

Tình huốngDấu hiệu nhận raEXPLODECách xử lý
Block thườngChọn một cái sáng một cáiĐượcGõ X rồi chọn
Block MINSERTChọn một ô thì cả mảng sángBị từ chốiChạy XMINSERT rồi mới EXPLODE
Block khoá phân rãTrong Block Editor, mục Allow exploding của bảng Properties ghi NoBị từ chốiMở BEDIT, đặt lại Yes, lưu block
Block lồng nhauPhá xong vẫn còn blockĐược nhưng chỉ một lớpPhá tiếp, hoặc dùng BURST của Express Tools nếu cần giữ chữ thuộc tính
Tham chiếu ngoài (xref)Bảng Properties ghi là External referenceBị từ chốiBind xref vào bản vẽ trước
Layer bị khoáRê chuột hiện biểu tượng ổ khoáKhông chọn đượcMở khoá layer rồi làm lại

Cách chắc chắn nhất để biết mình đang gặp ca nào là thử một lần rồi đọc dòng thông báo, thay vì đoán qua hình dáng. Chọn đối tượng, gõ EXPLODE, nhìn dòng lệnh. Nếu nghi block bị khoá phân rã thì mở block bằng BEDIT và đọc mục Allow exploding trong bảng Properties, vì thuộc tính này thuộc về định nghĩa block chứ không hiện ra khi bạn chọn một block đã chèn trên bản vẽ.

Hop thoai Block Definition voi o Allow exploding bo tich

Hình 2. Ô Allow exploding trong hộp thoại Block Definition. Bỏ tích ô này là khoá phân rã cho định nghĩa block, không liên quan gì tới MINSERT.

Bang Properties trong Block Editor hien Allow exploding bang No

Hình 3. Mục Allow exploding ghi No trong bảng Properties khi block đang mở trong Block Editor.

Lisp phá block trong cad này làm gì bên trong

Đọc thẳng mã nguồn thì lệnh XMINSERT chạy qua bốn bước. Trước hết nó bảo bạn chọn một MINSERT, rồi đọc các thông số đang lưu trong đó: tên block, điểm chèn, số hàng, số cột, bước hàng, bước cột, tỉ lệ theo trục X và Y, góc xoay. Nếu block có thuộc tính thì nó ghi lại từng cặp tag và giá trị.

Bước hai, nó dùng lệnh -INSERT để chèn một block thường tại đúng điểm chèn cũ, với đúng tỉ lệ và góc xoay cũ, rồi chép các giá trị thuộc tính vừa lưu vào block mới. Bước ba, nó xoá thực thể MINSERT gốc. Bước bốn, nó gọi lệnh -ARRAY kiểu chữ nhật để nhân block vừa chèn ra đủ số hàng và số cột. Xong việc, một hộp thoại nhỏ hiện lên báo đã xoá MINSERT và thêm bao nhiêu block.

Vậy tên bài dễ gây hiểu nhầm một chút, và nên nói thẳng: tệp này không phá block ra thành nét vẽ. Nó gỡ cái nút thắt khiến bạn không phá được, tức là biến mảng MINSERT thành các block rời. Sau bước đó, muốn ra nét thì bạn quét chọn rồi EXPLODE như với mọi block bình thường.

Lệnh XMINSERT chạy qua bốn bước 1. Đọc thông số của MINSERT Số hàng, số cột, bước lặp, tỉ lệ, góc xoay 2. Chèn một block thường Đúng điểm chèn, chép lại giá trị thuộc tính 3. Xoá thực thể MINSERT cũ Bản vẽ chỉ còn một block vừa chèn 4. Dựng mảng bằng lệnh -ARRAY Ra đủ số hàng, số cột như MINSERT cũ Kết quả là các block rời, chưa phải nét vẽ.

Hình 4. Bốn bước của lệnh XMINSERT, đọc từ mã nguồn tệp lisp. Bước phá thành nét vẽ nằm ngoài lisp, do bạn tự làm sau.

Tải tệp và nạp vào AutoCAD

Bản lisp phá block trong cad của trang tải ở đây: XMINSERT_Pha block minsert.lsp trên Google Drive. Tệp nén định dạng RAR, bên trong có hai thứ: tệp lisp dài chừng 270 dòng và một ảnh hướng dẫn lấy mật khẩu. Ảnh đó là tàn dư của cách phát hành cũ, bản đang treo hiện giải nén thẳng không cần mật khẩu. Giải nén xong, chép tệp lsp vào một thư mục cố định của riêng bạn, đừng để trong thư mục Downloads.

Nạp tệp bằng lệnh APPLOAD

Gõ APPLOAD, trỏ tới tệp lsp, bấm Load. Cách này chỉ có tác dụng cho phiên làm việc hiện tại, đóng AutoCAD là mất. Muốn nạp sẵn mỗi lần mở chương trình thì trong chính hộp thoại đó bấm Contents ở khung Startup Suite rồi thêm tệp vào. Chi tiết từng bước có ở bài cách load lisp một lần dùng mãi mãi. Cách nạp này dùng chung cho mọi tệp lsp khác, chẳng hạn lisp gạch chân text.

Hộp thoại chặn khiến nhiều người tưởng lisp hỏng

Đây là lý do phổ biến nhất khiến người đọc kêu tệp lisp tải về không chạy. Các bản AutoCAD gần đây chặn tệp thực thi chưa ký số nằm ngoài thư mục tin cậy. Khi bạn nạp tệp lsp lấy trên mạng, chương trình bung hộp thoại Security - Unsigned Executable File với ba nút: Always Load, Load Once và Do Not Load. Hộp thoại này hiện với mọi tệp lisp tải trên mạng, kể cả các tiện ích khác của trang như lisp khoanh mây.

Hop thoai Security - Unsigned Executable File cua AutoCAD

Hình 5. Hộp thoại chặn tệp lisp chưa ký, chụp trên AutoCAD 2026. Ảnh chụp lúc nạp một tệp lisp khác, nhưng hộp thoại hiện ra y hệt. Chọn Load Once là nạp cho lần này, chọn Always Load là ghi luôn thư mục đó vào danh sách tin cậy.

Lưu ý. Nếu không muốn gặp lại hộp thoại này, khai báo thư mục chứa lisp vào danh sách tin cậy qua biến TRUSTEDPATHS, hoặc vào OPTIONS rồi tìm mục thư mục tin cậy trong thẻ Files. Đổi lại, chỉ nên khai báo thư mục do chính bạn quản lý. Danh sách tin cậy là nơi AutoCAD chạy mã không hỏi lại, nên đừng ném cả ổ đĩa hay cả thư mục tải về vào đó.

Chạy lệnh XMINSERT theo đúng thứ tự

Đặt layer hiện hành thành layer bạn muốn các block mới nằm vào. Đây là bước hay bị bỏ qua, lý do nằm ở phần giới hạn ngay bên dưới. Sau đó gõ XMINSERT, chương trình hỏi Select MINSERT, bạn bấm chọn một ô bất kỳ trong mảng. Đợi một nhịp, hộp thoại nhỏ hiện lên báo đã xoá MINSERT và thêm bao nhiêu block, bấm OK. Cuối cùng, nếu muốn có nét vẽ rời hẳn thì quét chọn cả mảng rồi gõ EXPLODE.

Năm giới hạn của tệp lisp này

Những điểm dưới đây đọc ra từ mã nguồn, nên bạn biết trước để khỏi mất công dò.

Giới hạnHệ quả khi làm việc
Mỗi lần chỉ chọn được một MINSERTBản vẽ có nhiều mảng thì chạy lệnh nhiều lần, không quét chọn hàng loạt được
Block mới chèn bằng lệnh -INSERTChúng nằm trên layer hiện hành, không giữ layer cũ của MINSERT. Đặt layer trước khi chạy
Mảng dựng bằng -ARRAY kiểu cũLà mảng không kết hợp, sửa sau này phải sửa từng cái. Với MINSERT có góc xoay thì nhìn lại kết quả một lượt
Thuộc tính chép theo tagBlock có hai thuộc tính trùng tên tag thì giá trị có thể bị lẫn, nên soát lại chữ sau khi chạy
Là tệp lispAutoCAD LT không chạy được. Bản LT không có trình thông dịch lisp

Phá block xong là mất tính nhất quán

Phần này quan trọng hơn bản thân tệp lisp. Giá trị lớn nhất của block không nằm ở chỗ vẽ nhanh, mà ở chỗ sửa một lần ăn cả bản vẽ. Sửa định nghĩa block trong Block Editor thì mọi chỗ đã chèn tự cập nhật theo, kể cả trăm chỗ nằm rải khắp các tờ. Phá block ra là bạn cắt đứt sợi dây đó vĩnh viễn. Từ lúc ấy, mỗi lần thay đổi là mỗi lần đi sửa tay từng chỗ, và chỉ cần bỏ sót một chỗ là bản vẽ mâu thuẫn với chính nó.

Còn một tác dụng phụ hay bị quên. Nét vẽ nằm trên layer 0 bên trong định nghĩa block sẽ ăn theo màu và độ dày của layer mà bạn chèn block vào. Phá block ra thì chúng quay về layer 0, nên bản vẽ có thể đổi màu và đổi độ dày nét ngay sau khi phá, dù hình dáng không đổi.

Vì vậy, trước khi phá, thử ba lối khác đã. Sửa ngay trong Block Editor bằng lệnh BEDIT nếu muốn đổi cho mọi chỗ. Dùng REFEDIT nếu chỉ muốn sửa nội dung block ngay tại chỗ mà vẫn giữ nó là block. Hoặc chép định nghĩa block ra một tên mới rồi chèn bản mới vào đúng chỗ cần khác đi. Phá block chỉ nên là lối cuối, khi bạn thật sự cần từng nét rời để cắt, để nối, để hatch bê tông cốt thép cho vùng bên trong hoặc để giao cho phần mềm khác đọc.

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

Gõ XMINSERT mà AutoCAD báo Unknown command thì làm sao

Nghĩa là tệp chưa được nạp vào phiên làm việc hiện tại. Soát ba chỗ theo thứ tự: đã APPLOAD chưa, có bấm nhầm Do Not Load ở hộp thoại chặn không, và có mở lại AutoCAD sau khi nạp mà quên nạp lại không. Nạp bằng APPLOAD chỉ sống trong một phiên nếu bạn không đưa tệp vào Startup Suite.

Chạy xong thấy sai, hoàn tác được không

Được, nhưng bấm ngay. Lisp gọi lần lượt lệnh chèn, lệnh xoá rồi lệnh nhân mảng, và không gom chúng vào một bước hoàn tác chung. Nên bạn có thể phải bấm U vài lần liên tiếp mới về được trạng thái cũ. Đừng vẽ thêm gì trước khi kiểm tra kết quả.

Lisp phá block trong cad có phá được block trong xref không

Không. Đối tượng nằm trong tham chiếu ngoài thì bản vẽ hiện tại chỉ hiển thị, không sửa trực tiếp được. Muốn đụng vào thì bind xref vào bản vẽ trước, lúc đó các block bên trong mới trở thành block của bản vẽ này và mới đến lượt EXPLODE hay XMINSERT.

Vì sao các block sau khi chạy lại nằm sai layer

Vì lisp chèn block mới bằng lệnh -INSERT, mà lệnh này đặt đối tượng lên layer hiện hành. Mã nguồn có đọc tên layer của MINSERT cũ nhưng không dùng lại. Cách xử lý đơn giản nhất là đặt đúng layer hiện hành trước khi gõ lệnh. Lỡ rồi thì quét chọn cả mảng và đổi layer trong bảng Properties.

Có cách nào không cần lisp không

Có, nhưng thủ công hơn. Bạn tự chèn lại block bằng lệnh INSERT tại đúng điểm chèn của MINSERT, xoá MINSERT đi, rồi tự nhân mảng bằng ARRAY với đúng số hàng, số cột và bước lặp. Việc khó nhất là đọc lại cho đúng bốn con số đó. Với một hai mảng thì làm tay vẫn nhanh, nhiều mảng thì tệp lisp đỡ hơn hẳn.