AutoCAD 雑学:匿名ブロックの把握

AutoCAD 雑学:図面要素のつながりと図面クリーンアップ でご紹介しましたが、AutoCAD で図面に寸法を作図する際、匿名ブロック(名前のないブロック)が自動的に定義(ブロック定義)されます。そして、モデル空間などの作図領域に作図されるのは、その匿名ブロック定義を参照するブロック参照です。

匿名ブロックは、*(アスタリスク)で始まる名前(ブロック名)を持ち、寸法以外にも、TABLE コマンドで表を作図したり、挿入後のダイナミックブロックを定義パラメーターに沿って変更したりした際などにも定義されます。

ユーザーが定義したブロック(ユーザー定義ブロック)と異なり、[ブロック] パレットINSERT コマンド)や [ブロック定義] ダイアログBLOCK コマンド)、[ブロック定義を編集] ダイアログBEDIT コマンド)には匿名ブロックは表示されません。

もし、図面内の匿名ブロックを把握したい場合には、次の一文をコマンド プロンプトに入力して実行してみてください。

(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))(vlax-for block (vla-get-Blocks doc)(print (vla-get-Name block)))(princ)

寸法を作図した図面で、この「おまじない」を入力・実行すると、匿名ブロック名の一覧が表示されるはずです。寸法の場合、*Dxx(xx は数字)のブロック名が表示されるはずです。

先の「おまじない」は AutoLISP 式で、いわゆる AutoCAD API の 1 つです。細かな説明は割愛しますが、次のようなカスタム コマンドの内容を 1 行で実行するものです。

    (defun C:List-Blocks()
      (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      (vlax-for block (vla-get-Blocks doc)    
        (print (vla-get-Name block))    
      )
      (princ)
    )

もし、VBA をインストールした AutoCAD であれば、VBASTMT コマンドを利用した次の「おまじない」を入力・実行して匿名ブロックを一覧表示することも出来ます。

VBASTMT For Each block In ThisDrawing.Blocks: ThisDrawing.Utility.Prompt vbCrLf & block.Name & vbCrLf: Next

この「おまじない」は、次のような VBA マクロの中身を 1 行で実行するものです。

    Public Sub List-Blocks()
      For Each block In ThisDrawing.Blocks
        ThisDrawing.Utility.Prompt vbCrLf & block.Name & vbCrLf
      Next
    End Sub

匿名ブロック定義は、ブロック参照(ここでは寸法)から参照されている間、図面から削除することは出来ません。ただし、ブロック参照を削除、また、EXPLODE コマンドで分解して匿名ブロック定義が孤立状態になると、図面から削除出来るようになります。この場合、一旦、図面を保存して開き直すと、匿名ブロックが自動的に削除されます。

もし、同じ図面セッションで匿名ブロックを削除したい場合には、PURGE コマンドで削除することも可能です。
[名前削除] ダイアログの「名前削除が可能な項目(U)」には、孤立状態になった匿名ブロックが表示されるようになります。

一方、決して削除出来ない特別な匿名ブロックも存在します。先の「おまじない」で表示されていた Model_Space(モデル空間)、Paper_Space(ペーパー空間)です。これらは図面にとって作図領域を提供する必須な「ブロック定義」であるため、PURGE コマンドでも削除することが出来ない仕組みになっています。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading