AutoCAD 雑学:図面要素のつながりと図面クリーンアップ

AutoCAD で図面を編集していると、削除出来るはずなのに削除出来ない要素(オブジェクト)に遭遇するときがあります。結論から言ってしまうと、これは、図面破損を防ぐ AutoCAD の仕組みです。

それは、どのような場面でしょうか?

どうすれば、削除出来るようになるでしょう?

少し長くなりますが、順を追ってご紹介してみたいと思います。


図面を編集する際、コマンド操作毎に更新されるのは、ファイルとして保存されている DWG ファイルではなく、「図面データベース」と呼ばれるメモリ上に展開された状態の図面です。言い換えれば、「図面」はファイルとしてアーカイブされている状態と、編集時にメモリに展開される図面データベースの状態の 2 つの形態が存在することになります。

この「図面」、さまざまな要素(オブジェクト)が含まれています。そして、個々の要素は他の要素と一方向や双方向に参照しあって正しい図面情報が成り立っています。

一方向参照の例では、図形を挙げることが出来ます。例えば、LINE コマンドで線分を作図すると、線分は暗黙のうちに現在の「画層」や「線種」といった要素(情報)を参照することになります。

双方向参照の例では、AutoCAD の図面にもともと存在することが前提になっている非図形情報を挙げることが出来ます。例えば、作図する場所を提供している「モデル空間」は AutoCAD 図面には必須の存在であり、 AutoCAD 図面にとっても「モデル空間」がないと作図が出来ないため、その存在が必須です。イメージしやすい要素では、「寸法スタイル」と “STANDARD” と名前のついた「寸法スタイル」の関係も相互に必須な参照関係にあたります。

つまり、図面に何かしらの要素を追加すると、要素間に「つながり」が生まれる、ということになります。「つながり」の参照先の要素が無くなってしまうと、正しい図面表現が出来ず、「破損」していると判定されてしまいます。

  • この「つながり」を「オーナーシップ接続」と呼ぶことがあります。アドイン開発者寄りの内容になってしまいますが、オーナシップ接続については、 AutoCAD API から見た図面構造と破損 の記事でご紹介したこともあります。

図面に追加した要素は、他の要素から参照されていない孤立した状態のときのみ、図面から削除することが出来ます。例えば、独自に追加した “スタイル1” 文字スタイルは、その文字スタイルを参照する TEXT、あるいは MTEXT 図形が図面にない場合、STYLE コマンドで表示可能な [文字スタイル管理] ダイアログの [削除] ボタンで削除することが出来ます。

もし、作図済の TEXT、あるいは MTEXT 図形から “スタイル1″ 文字スタイルが参照されていると、エラーになって削除出来ません。逆に、作図済の TEXT、あるいは MTEXT 図形が、”スタイル1” 文字スタイルへの参照を止めると(他の文字スタイルを参照すると)、再び [削除] ボタンで削除することが出来るようになります。

なお、”スタイル1″ 文字スタイルが現在の文字スタイルに設定されている場合は、[削除] ボタンはマスクされてクリック出来ません。この削除の可否は、PURGE コマンドの [名前削除] ダイアログでも同様です。

まとめると、 “スタイル1” 文字スタイルの例では、作図済の TEXT、あるいは MTEXT 図形が “スタイル1″ 文字スタイルを参照しなくなったり、TEXT、あるいは MTEXT 図形自体が削除されてしまうと、”スタイル1” 文字スタイル要素が孤立した状態になるので、図面から削除出来るようになります。


ただし、図面の編集中には、前述の「つながり」が原因で要素を削除出来なくなるケースが存在します。ブロック定義の中の図形がその要素を参照している場合です。

もし、ご自身で定義したブロック定義であれば、ブロックエディタで参照を止めて参照先の要素が孤立状態にすれば、その要素を削除出来るようになります。

問題は、寸法図形が “スタイル1” 文字スタイルを参照する場合です。厳密には、寸法図形が参照する寸法スタイルが “スタイル1” 文字スタイルを参照している場合です。

このケースでは、もちろん “スタイル1” 文字スタイルを削除しようとするとエラーになってしまいます。

それでは、寸法図形を ERASE コマンドで削除して、かつ、寸法図形が参照していた寸法スタイルから “スタイル1” 文字スタイルへの参照を止めた場合はどうでしょう?

ここまでの内容から考えると、参照されなくなった要素(ここでは “スタイル1” 文字スタイル)は孤立した状態になるので、このタイミングで削除が可能なはずです。

そこで実際に、”スタイル1″ 文字スタイルを削除しようとすると、前述と同じ「文字スタイルは現在使用中です。削除できません。」エラーが発生して削除が出来ません。なぜでしょう?

ご存じの方もいるものと思いますが、寸法図形を作図すると、暗黙のうちにブロック定義が作成されます。一般的な長さ寸法の場合、寸法図形は、寸法線(LINE)、寸法補助線(LINE)、矢印(SOLID)、寸法値(MTEXT)、寸法計測点(POINT)で構成されます、そして、運用上、寸法図形として 1 つにまとめて扱う必要があります。

これを実現するために、AutoCAD はブロック定義ブロック参照の仕組みを利用しています。作図した寸法図形はブロック参照であり、自動的に作成されたブロック定義を参照します。寸法のブロック定義は、ユーザー定義のブロックと区別するため、*D で始まるブロック名が自動的に割り当てられて、INSERT コマンドや BLOCK コマンド、BEDIT コマンドのブロック エディタから隠ぺいされます。このようなブロックを「Anonymous Block」、日本語名で「匿名ブロック」、または「名前のないブロック」と呼んでいます。

ご参考:

前置きが長くなりましたが、”スタイル1″ 文字スタイルを削除出来ないのは、寸法図形用に用意された匿名ブロック(ブロック定義)が、まだ “スタイル1” 文字スタイルを参照しているためです。

“スタイル1” 文字スタイルや寸法図形が参照していた匿名ブロックは図面から削除出来ないのでしょうか?


AutoCAD は、図面を開いたタイミングで図面データベース内を検査して、参照されていない匿名ブロックとネストされた外部参照ブロックを名前削除(パージ)する仕様を持っています。

ここまでの例では、図面をファイルに一旦保存して、再度開くと “スタイル1” 文字スタイルを [文字スタイル管理] ダイアログの [削除] ボタンで削除出来るようになります。

同じ現象は、画層を作成して寸法図形に同画層を指定した後で、その寸法図形を削除した場合にも発生します。この場合は寸法図形が参照していた画層が削除出来ない状態になります。これを解決するのは、図面を一旦保存して、開き直せばいいわけです。寸法図形の匿名ブロックは、図面を開いたタイミングで自動的に削除されます。


この仕組みは、図面要素間の「つながり」を維持して、図面破損を防ぐ仕様です。もし、図面を開き直さずに同じ図面セッションで参照されていた孤立要素(ここではAPI で “スタイル1” 文字スタイル)を削除したい場合には、AutoCAD .NET API か ObjectARX でのみ可能です。

例:AutoCAD .NET API:寸法削除直後の寸法参照画層の削除


原因がわからず、うやむやになっている現象かと思いますが、不具合ではなく、こんな理由があります。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

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

Continue reading