AutoLISPでブロック数をカウントして図面に表示する方法【コード付き解説】

Autolisp

AutoCADで図面内のブロック数を数えたいとき、目視で確認するのは非効率ですよね。
今回は、選択したブロックと同じ名前のブロックを図面全体から抽出し、それぞれの横にカウント番号を自動で表示するAutoLISPスクリプトをご紹介します。

🧠 目的と背景

  • 目的:図面内の同一ブロックを自動でカウントし、番号を振ることで管理や確認を効率化する。
  • 背景:施工図や機器配置図などで、同じブロックが多数配置されている場合、個別の識別が必要になることがある。

🔧 スクリプトの概要

このLISPは以下の流れで動作します:

  1. 最初に1つのブロックを選択
  2. そのブロック名を取得
  3. 同じ名前のブロックを図面全体から選択
  4. 各ブロックの横にカウント番号(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)
)

📌 使用方法

  1. AutoCADで図面を開く
  2. 上記コードをLISPファイル(例:CountBlocks.lsp)として保存
  3. APPLOADコマンドで読み込み
  4. コマンドラインで CountBlocks を実行
  5. 任意のブロックを選択すると、同じブロックが自動でカウントされ、番号が表示されます

🎯 応用例

  • 機器配置図で機器番号を振る
  • 配管図でバルブや継手の識別番号を表示
  • 建築図面で家具や設備の個数確認

📝 まとめ

AutoLISPを使えば、手作業では面倒な処理も一瞬で自動化できます。
今回のスクリプトは、ブロックの管理や図面の精度向上に役立つはずです。
ぜひ自分の業務に合わせてカスタマイズしてみてください!

コメント

タイトルとURLをコピーしました