AutoCADで図面内のブロック数を数えたいとき、目視で確認するのは非効率ですよね。
今回は、選択したブロックと同じ名前のブロックを図面全体から抽出し、それぞれの横にカウント番号を自動で表示するAutoLISPスクリプトをご紹介します。
🧠 目的と背景
- 目的:図面内の同一ブロックを自動でカウントし、番号を振ることで管理や確認を効率化する。
- 背景:施工図や機器配置図などで、同じブロックが多数配置されている場合、個別の識別が必要になることがある。
🔧 スクリプトの概要
このLISPは以下の流れで動作します:
- 最初に1つのブロックを選択
- そのブロック名を取得
- 同じ名前のブロックを図面全体から選択
- 各ブロックの横にカウント番号(1, 2, 3…)を表示
💻 AutoLISPコード全文
(defun c:CountBlocks ()
(prompt "\nSelect a block to count similar ones:")
(setq sel (entsel))
(if sel
(progn
(setq ent (car sel))
(setq entData (entget ent))
(setq blockName (cdr (assoc 2 entData))) ; ブロック名取得
(prompt (strcat "\nBlock name: " blockName))
;; 同じ名前のブロックを選択
(setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 blockName))))
(if ss
(progn
(setq i 0)
(while (< i (sslength ss))
(setq blk (ssname ss i))
(setq blkData (entget blk))
(setq insPt (cdr (assoc 10 blkData))) ; 挿入点取得
;; カウント番号を挿入点の右側に記入
(setq txtPt (list (+ (car insPt) 1.0) (cadr insPt))) ; X方向に1.0移動
(entmake
(list
(cons 0 "TEXT")
(cons 10 txtPt)
(cons 40 2.5) ; 文字高さ
(cons 1 (itoa (1+ i))) ; カウント番号
(cons 7 "Standard") ; スタイル
(cons 8 (cdr (assoc 8 blkData))) ; 同じ画層に配置
)
)
(setq i (1+ i))
)
(prompt (strcat "\nTotal blocks counted: " (itoa i)))
)
(prompt "\nNo matching blocks found.")
)
)
(prompt "\nNo block selected.")
)
(princ)
)
📌 使用方法
- AutoCADで図面を開く
- 上記コードをLISPファイル(例:
CountBlocks.lsp
)として保存 APPLOAD
コマンドで読み込み- コマンドラインで
CountBlocks
を実行 - 任意のブロックを選択すると、同じブロックが自動でカウントされ、番号が表示されます
🎯 応用例
- 機器配置図で機器番号を振る
- 配管図でバルブや継手の識別番号を表示
- 建築図面で家具や設備の個数確認
📝 まとめ
AutoLISPを使えば、手作業では面倒な処理も一瞬で自動化できます。
今回のスクリプトは、ブロックの管理や図面の精度向上に役立つはずです。
ぜひ自分の業務に合わせてカスタマイズしてみてください!
コメント