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

You must be logged in to post a comment.