AutoCAD コマンド

システム変数 DBMOD

システム変数 DBMOD は図面の変更状態を示し、ファイル保存が必要かどうかを調べるのに使用されます。

システム変数 DBMOD(読み込み専用)

タイプ: 整数型 保存先: なし 初期値: 0

図面の変更状態を示します。次の値の和として表現されます。

0 図面は変更されていません。
1 図面データベースが変更されました。
4 システム変数が変更されました。
8 ウィンドウが変更されました。
16 ビューが変更されました。
32 フィールドが変更されました。

例えば、ユーザーが図面の表示をパンするとビューの変更の 16 以外に、ビューに関連するシステム変数も変更されますので 4 を加えた 20 が、DBMOD の値となります。

以降の関数は DBMOD の値を、特別に用意されたスタックに保存し、その後スタックから復元することで、結果的に DBMOD を変更しないで図面の状態を変更するなどの操作を実現します。

AutoLISP関数
(acad-push-dbmod)
システム変数DBMODの現在値を保存します。
戻り値:nil以外

acad-push-dbmod関数は、DBMODの値をスタックに保存します。

戻り値は常にnil以外を返します。

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

AutoLISP関数
(acad-pop-dbmod)
acad-push-dbmod 関数によって最後に保存したシステム変数 DBMOD の値を復元します。
戻り値:nil、またはnil以外

acad-pop-dbmod関数は、スタックからDBMODの値を復元します。

無事復元された場合はnil以外を返し、スタックが空で復元する値が無かった場合はnilを返します。

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

これらの関数の効果を確認してみます。AutoCADで新規図面を作成します。このときDBMODの値とacad-pop-dbmod関数の戻り値は以下のとおりです。

_$ (getvar "DBMOD")⏎
0
_$ (acad-pop-dbmod) ⏎
nil

この手つかずの状態をスタックに保存します。

_$ (acad-push-dbmod) ⏎
T

図面に図形を描いたりして変更を加えます。次の状態は、「ビューの変更」「システム変数の変更」「図面データベースの変更」が起こったことを示しています。

_$ (getvar "DBMOD")⏎
21

DBMOD の値を、スタックから復元します。

_$ (acad-pop-dbmod) ⏎
T

DMMOD の値とスタックの状態が元に戻ったことを確認します。

_$ (getvar "DBMOD")⏎
0
_$ (acad-pop-dbmod) ⏎
nil

ここで図面を閉じますと、AutoCADは図面の保存の確認を求めることなく図面を閉じます。

なお、AutoCADの【オプション】ダイアログで【印刷とパブリッシング】タブの【自動パブリッシング】にチェックが入っている場合は、状況によってはパブリッシングするかどうかのダイアログが表示されます。これは DBMOD の値から独立しています。

ダイアログモード

以降で説明する initdia 関数や initcommandversion 関数は、コマンドの実行をダイアログインターフェースで実行するか、【コマンドライン】のインターフェースで実行するかをコントロールするものです。

通常、AutoCAD ユーザーがダイアログインターフェースで使用しているコマンドは、-LAYER のように最初にハイフンをつけることによって【コマンドライン】のインターフェースになります。

一方 command 関数系を使用してプログラムからコマンドを実行した場合は、何もしなければ自動的に【コマンドライン】のインターフェースでの実行となります。そのため、プログラムからコマンドのダイアログインターフェースを使用したい場合に次のような関数を使用しなければなりません。

AutoLISP関数
(initdia [dialogflag])
dialogflag:整数
強制的にコマンドのダイアログボックスを表示モードにします。
戻り値:nil

initdia 関数は、一時的にコマンドのダイアログを強制的に表示モードにします。コントロールできるダイアログは次のものです。

ATTDEF[属性定義] ATTEXT[属性書き出し]
BHATCH[境界ハッチング] BLOCK[ブロック登録]
COLOR[色設定] IMAGE[イメージ]
IMAGEADJUST[イメージ調整] INSERT[ブロック挿入]
INSERT[ブロック挿入] LAYER[画層管理]
LINETYPE[線種設定] MTEXT[マルチテキスト]
PLOT[印刷] RENAME[名前変更]
TOOLBAR[ツールバー] VIEW[ビュー管理]

dialogflag 引数に0が指定された場合に限って、【コマンドライン】のインターフェースとなります。

initdia 関数で設定されたモードは、直後の一つのコマンドにだけ影響します。

_$ (initdia)			   ;強制的にダイアログモードに変更
nil
_$ (command "layer") ;ダイアログモードで表示される
nil

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

AutoLISP関数
(initcommandversion [version])
version:整数
コマンドを指定したバージョンで実行します。
戻り値:nil以外

initdia 関数と同じような効果がある関数です。

一時的に、AutoCAD に次のコマンドを指定したバージョンで実行するよう指示します。異なるバージョンに対応したコマンドのみに影響します。initcommandversion 関数の直後のコマンドのみに、一回だけ影響します。

version 引数の影響はコマンドごとに異なりますが、おおむね次のような意味があります。

version引数 説明
1 【コマンドライン】での応答
2 ダイアログなど、最新のインターフェースでの応答

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。