Dashboard
← Quay lại Bài Giảng: Tối Ưu QS + AI

Script Demo: Bóc Khối Lượng Cột / Vách / Móng
Qua AutoCAD MCP + Claude

Kịch bản demo dùng chung nhóm với Phần 1 — AutoCAD + MCP + Claude. Các lệnh BBW, OO1, OO2, CS11 bên dưới là macro AutoLISP/VBA gọi vào các module BeamWidths, OBJ_NearestText, QSTools_Beam. Điểm mới của demo này: thay vì gõ tay từng lệnh trên AutoCAD, Claude điều khiển AutoCAD MCP gọi lần lượt từng lệnh, dừng lại đúng chỗ cần con người kiểm tra bằng mắt (đặc biệt là các đối tượng bị tô màu đỏ — chưa xác minh được), rồi mới đi tiếp.

🎯 Mục tiêu demo
✅ Chuẩn bị trước khi chạy

📥 Bản vẽ mẫu dùng cho demo này (chọn 1 trong 2 file bên dưới tuỳ tầng muốn thực hành — cùng bộ file dùng cho demo dầm, vì mặt bằng kết cấu có sẵn cả Cột/Vách/Móng):

  1. Bản vẽ có sẵn Polyline/Circle/Ellipse khoanh vùng Cột/Vách/Móng theo layer chuẩn QS, và Text tên/kích thước đặt gần từng đối tượng
  2. Cài đặt QSTool theo link sau: Circleqstools_SetupAI.exe
  3. AutoCAD MCP đã kết nối với Claude Desktop — kiểm tra bằng system(operation="status") thấy backend: "file_ipc"
  4. Mở sẵn Excel (template BOQ) để nhận kết quả xuất khối lượng ở bước cuối (CS11)
  5. (Tuỳ chọn, cho bước CDL): Import CheckDuplicateObjects.bas vào VBA project (Compile → Save), rồi nạp thêm wrapper AutoLISP C:CDL — macro này KHÔNG thuộc bộ cài QSTools gốc nên phải tự nạp:
    (defun C:CDL () (command "-vbarun" "CheckDuplicateObjects.QS_CheckDuplicateObjects") (princ))
📜 Kịch bản demo — chạy theo đúng thứ tự
Mọi lệnh bên dưới đều dừng lại chờ tương tác — hoặc AutoCAD dừng ở dòng lệnh (command line) chờ chọn đối tượng/nhập thông số, hoặc cần người xem kết quả (đặc biệt các đối tượng bị tô đỏ) trước khi ra lệnh cho Claude gọi bước tiếp theo. Giảng viên nên đọc to dòng lệnh sau mỗi lần gọi để lớp thấy AutoCAD đang chờ gì, rồi mới cho Claude đi tiếp — không nên gọi liên tiếp nhiều lệnh trong 1 lần chat.
CDL
Bước 0 (tuỳ chọn) — Kiểm tra & xóa Polyline/Circle/Ellipse trùng lặp
Yes/No phạm vi quét
Việc macro làm

Macro tự viết thêm, KHÔNG thuộc bộ cài QSTools gốc (CheckDuplicateObjects.bas, wrapper C:CDL). Quét Polyline/Circle/Ellipse (không phân biệt layer, vì chạy trước khi có layer CL_OBJ_*), phát hiện đối tượng bị copy/paste chồng khít lên nhau (trùng bounding box + Area) rồi tự động XÓA bản trùng, chỉ giữ lại 1 bản/nhóm — tránh mất công gán tên/OO2 và đếm khối lượng 2 lần ở CS11. Toàn bộ nằm trong 1 StartUndoMark/EndUndoMark — Ctrl+Z 1 lần là hoàn tác hết.

Prompt mẫu gọi qua Claude
"Chạy CDL để kiểm tra và xóa các đối tượng Cột/Vách/Móng bị trùng lặp trước khi bắt đầu."
execute_lisp → (C:CDL)
⏸ Điểm dừng

Hỏi Yes/No đầu tiên: quét toàn bộ bản vẽ (Yes) hay chỉ 1 vùng chọn tay bằng window/crossing (No — dừng chờ chọn vùng).

Kiểm tra trước khi đi tiếp

Xem MsgBox tổng kết: bao nhiêu nhóm trùng, Handle nào được giữ, Handle nào bị xóa. Nếu kết quả không đúng ý, nhấn Ctrl+Z 1 lần để hoàn tác toàn bộ trước khi chuyển sang BBW.

BBW
Bước 1 — Quét Text lấy bề rộng & gom nhóm Layer
Tự chạy, không cần chọn
Việc macro làm

Quét toàn bộ Text kích thước dạng NxM trong bản vẽ, đọc ra bề rộng, gom các đối tượng Cột/Vách/Móng có cùng bề rộng vào chung 1 nhóm Layer — chuẩn bị dữ liệu nền cho bước gán tên tự động ở OO1.

Prompt mẫu gọi qua Claude
"Chạy lệnh BBW để quét text lấy bề rộng và gom nhóm layer trên bản vẽ đang mở."
execute_lisp → (C:BBW)
⏸ Điểm dừng

Theo comment gốc, bước này tự chạy xong không cần chọn thêm gì — nhưng giảng viên vẫn nên đợi macro chạy xong rồi mới báo lớp chuyển sang OO1.

OO1
Bước 2 — Gán tên Cột/Vách/Móng tự động
Chọn đối tượng + nhập thông số
Việc macro làm

Với mỗi Polyline/Circle/Ellipse được chọn, tìm Text gần nhất (đo tới cạnh Polyline, không chỉ tới đỉnh) rồi đổi Layer, ví dụ:

D1_(300x500) --> CL_OBJ_C1_(300x500)

Máy hỏi lần lượt, đúng thứ tự cố định: (1) chọn toàn bộ Polyline/Circle/Ellipse cần gán rồi Enter → (2) chọn toàn bộ Text/Mtext dùng để đối chiếu rồi Enter → (3) nhập khoảng cách tối đa (mm) → (4) hỏi có bật kiểm tra diện tích hay không (Yes nếu Text có ghi size để đối chiếu, No nếu bản vẽ chỉ ghi tên, size nằm ở bảng riêng).

Prompt mẫu gọi qua Claude
"Chạy OO1 để gán tên Cột/Vách/Móng tự động theo text gần nhất."
execute_lisp → (C:OO1)
⏸ Điểm dừng

AutoCAD dừng ở dòng lệnh chờ chọn đối tượng, chọn mẫu Text, nhập khoảng cách và trả lời hộp thoại Yes/No kiểm tra diện tích — giảng viên xác nhận từng bước rồi mới cho đi tiếp.

⚠️ Command line 1 dòng sẽ chỉ thấy chữ "Select objects:" — đây là dòng nhắc mặc định AutoCAD tự in đè lên, không có cách nào tắt được (giới hạn của AutoCAD, không phải lỗi macro). Cứ nhớ đúng thứ tự cố định ở trên: lần chọn đầu = Polyline, lần chọn thứ hai = Text/Mtext.
Kiểm tra trước khi đi tiếp

Xem MsgBox tổng kết cuối: bao nhiêu đối tượng gán được (giữ nguyên màu theo Text — đã xác minh), bao nhiêu bị tô đỏ (Layer CL_OBJ_XXX hoặc gán được nhưng chưa xác minh) — số đỏ này sẽ xử lý ở OO2.

OO2
Bước 3 — Gán tên thủ công cho các đối tượng còn màu đỏ
Chọn tay từng cặp
Việc macro làm

Lặp lại: nhìn trên màn hình tìm những Polyline/Circle/Ellipse còn đang màu đỏ (chưa gán được hoặc gán sai) → chọn 1 đối tượng đỏ đó → chọn 1 Text tương ứng → tự động gán CL_OBJ_<tên> + đổi màu theo Text đó. Nếu Text không có size và đối tượng là Polyline, macro tự tính diện tích/chu vi thật để suy ra kích thước, ghép thành <tên>_(LxW).

Prompt mẫu gọi qua Claude
"Chạy OO2 để tôi ghép tay các đối tượng còn đang màu đỏ."
execute_lisp → (C:OO2)
⏸ Điểm dừng

AutoCAD lặp lại hỏi chọn đối tượng → chọn Text cho từng cặp — giảng viên bấm chọn tới khi hết đối tượng đỏ, rồi nhấn Enter/Esc để dừng vòng lặp.

Kiểm tra trước khi đi tiếp

Nhìn lại toàn bộ mặt bằng — nếu không còn đối tượng nào tô màu đỏ thì mới chuyển sang CS11.

CS11
Bước 4 — Tính khối lượng & xuất Excel
Nhập chiều cao + quét chọn
Việc macro làm

Sau khi toàn bộ Cột/Vách/Móng đã có Layer dạng CL_OBJ_<Tên> (không còn CL_OBJ_XXX): nhập chiều cao/chiều dày một lần dùng chung cho cả lượt xuất → quét chọn toàn bộ Polyline đã gán tên → với mỗi Polyline, đọc tên từ Layer (bỏ tiền tố CL_OBJ_), tính lại Dài × Rộng từ diện tích/chu vi thật, ghi 1 dòng ra Excel (Dài, Rộng, Cao, Chu vi, Diện tích, công thức khối lượng Bê tông + Ván khuôn cạnh, hyperlink về file DWG nguồn).

Prompt mẫu gọi qua Claude
"Chạy CS11, tôi nhập chiều cao 3000mm rồi quét chọn toàn bộ cột tầng hầm 2 để xuất khối lượng."
execute_lisp → (C:CS11)
⏸ Điểm dừng

AutoCAD hỏi chiều cao/chiều dày, sau đó chờ quét chọn (window/crossing) toàn bộ Polyline cần xuất trên màn hình — đây là bước thao tác tay duy nhất trong chuỗi, Claude không tự quét chọn đối tượng trên màn hình được.

Kiểm tra sau khi chạy

Xem MsgBox tổng kết: số dòng ghi được / số bị bỏ qua — nếu còn bị bỏ qua nhiều, quay lại kiểm tra còn sót Layer CL_OBJ_XXX nào chưa xử lý ở OO2 không.

🔁 Tóm tắt trình tự đã demo

[tuỳ chọn] CDL (quét trùng lặp, tự xóa) → BBW (tự chạy) → OO1 (gán tự động) → OO2 (xử lý màu đỏ) → CS11 (select tay + xuất Excel)

📝 Ghi chú giảng viên