新規図面を作成した後、あるいは、既存図面を開いた後、特に図面内容を編集した覚えがない場合でも、図面ウィンドウを閉じようとした際に図面の保存を促すダイアログ ボックスが表示される場合があります。

AutoCAD は図面の編集状態を監視して、システム変数 DBMOD に反映しています。DBMOD の既定値は 0(ゼロ)ですが、図面の編集状況に応じて次のビット コード値の和を設定します。
| 値 | 説 明 |
|---|---|
| 0 | 図面は前回の保存以降変更されていません |
| 1 | オブジェクトデータベースが変更されました (図形が追加、削除、または変更されました) |
| 2 | シンボルテーブルが変更されました (画層、線種、文字スタイルなどが変更されました) |
| 4 | データベース変数が変更されました (システム変数が変更されました) |
| 8 | ウィンドウが変更されました (ビューポートまたはウィンドウの位置/サイズが変更されました) |
| 16 | ビューが変更されました (ビュー設定が変更されました) |
| 32 | フィールドが変更されました (フィールド値が更新されました) |
例えば、新規図面の作成直後に COLOR[色設定] コマンドで新しく作成するオブジェクトの色を設定すると、背後でシステム変数 CECOLOR の値が更新されて、DBMOD の値に 4 が設定されます。

そして、この DBMOD の値が 0(ゼロ)以外になっていると、AutoCAD は図面が編集されたと判断します。この状態で図面を保存せずにウィンドウを閉じようとすると、図面の保存を促すわけです。
冒頭で触れた「特に図面内容を編集した覚えがない」は、多くの場合、図面に対して ZOOM[ズーム] コマンドや PAN[画面移動] コマンドを実行してビュー(表示状態)を変えてしまった、つまり、DBMOD のビットコード値が 16 に設定されていることが原因です。
- 他の編集行為も記録されている場合には、16 値が含まれるビットコード値の和の値の場合もあります。ビットコード値の和については、概要 – システム変数とビットコード を確認してみてください。
DBMOD に設定されたビットコード値は、QSAVE コマンドで図面を上書き保存するとリセットされて 0(ゼロ)に戻ります。あいにく、このシステム変数 は読み取り専用であるため、意図的に 0 にリセットしたり、他のビットコード値を設定したりすることは出来ません。
ただし、AutoCAD API でカスタマイズしていると、図面の保存を促すダイアログ ボックスの表示を抑止したいことがあります。このような場面で DBMOD 値を変更することは出来ませんが、DBMODE への記録を抑止することは可能です。
この処理を実現するのが、AutoLISP の (acad-push-dbmod) と (acad-pop-dbmod)、ObjectARX の AcApDocument::pushDbmod() と AcApDocument::popDbmod()、AutoCAD .NET API の Document.PushDbmod メソッド と Document.PopDbmod メソッドです。
PushDbmod は、図面の変更状態を示すシステム変数 DBMOD を一時的に保存し、 PopDbmod は、PushDbmod によって保存された値を復元するために利用することが出来ます。言い換えれば、PushDbmod を呼出して 0(ゼロ)の DBMOD ビットコード値を保存、一連の編集処理後に PopDbmod を呼び出して AutoCAD によって設定されたビットコード値を 0(ゼロ)で復元することで、両者の呼び出しの間の処理を無かったことにすることが出来ます。
具体的には、次にような対応をとることが可能なわけです。
この方法を利用すると図面保存ダイアログを抑止することが出来ますが、実際の図面保存操作を忘れてしまうと、時間をかけた編集内容を失うことになってしまいます。このため、PushDbmod/PopDbmod の利用は最低限にすることをお勧めしています。

You must be logged in to post a comment.