■上級 2.CMDACTIVE | AutoCADマクロ屋本舗
IF文で判断するモノの中で、最も使用頻度の高いモノが
システム変数"CMDACTIVE"
です。

ヘルプには、以下の様に記述してあります。
通常のコマンド、割り込みコマンド、スクリプト、およびダイアログ ボックスについて、それぞれアクティブかどうかを示すビット コードを格納します。値は、次のビット コードの和になります。

1 通常のコマンドがアクティブ
2 通常のコマンドと割り込みコマンドがアクティブ
4 スクリプトがアクティブ
8 ダイアログ ボックスがアクティブ


実際に、コマンドラインにて
システム変数"CMDACTIVE"を実行すると

コマンド: cmdactive

CMDACTIVE = 1 (読み込み専用)


※この時、コマンド"CMDACTIVE"が実行中(アクティブ)の為
 CMDATIVEの値は"1"となります。


次に、あるコマンドの実行途中に
割込みコマンドとして、システム変数"CMDACTIVE"を実行すると

コマンド: copy
オブジェクトを選択: 'cmdactive

CMDACTIVE = 3 (読み込み専用)


この様に表示されます。
※この時、コマンド"COPY"及び、割込みコマンド"'CMDACTIVE"が実行中の為
 CMDATIVEの値は"1+2=3"となります。(ヘルプにて"CMDACTIVE"参照)



又、以下の様なマクロを作成し、実行してみると・・・
^C^C「CMDACTIVE=$M=$(getvar,cmdactive)」^Z

コマンドラインに

コマンド: 「CMDACTIVE=0」

この様に表示されます。
※この時、コマンドが実行されていない為、CMDATIVEの値は"0"となります。

何もコマンドが実行されていない状態では
システム変数"CMDACTIVE"の値は0であり
通常のコマンド・割り込みコマンド・スクリプト・ダイアログボックスが実行中の場合
システム変数"CMDACTIVE"の値は0以外となります。

よって、システム変数"CMDACTIVE"をIF文で使用することが可能です。


では、使用例を紹介します。

最も使用されているのが
"SELECT"[オブジェクト選択]コマンド です。


■検証動作1
コマンドが何も実行されていない状態で、オブジェクトを選択し
"SELECT"コマンドを実行すると

コマンド: select
認識された数: 1

コマンド:


"SELECT"コマンドが終了となり、コマンドは終了します。


■検証動作2
コマンドが何も実行されていない状態で、オブジェクトを選択せずに
"SELECT"コマンドを実行すると

コマンド: select

オブジェクトを選択:


オブジェクト選択状態で有り、すなわちコマンドがアクティブ状態です。


この2つの動作を、システム変数"CMDACTIVE"を使い、IF文で判断させ
^C^C_select;$M=$(if,$(getvar,cmdactive),\,)

この様にマクロを記述する事で

・オブジェクト選択→ツールバー選択
・ツールバー選択→オブジェクト選択


この両方が可能となるマクロを作成することが出来ます。

これは、検証動作1・2の特性により

オブジェクトを選択してから、"SELECT"コマンドを実行した時
"SELECT"コマンドは、すぐに終了となる為
コマンドがアクティブ(実行中)では無く
システム変数"CMDACTIVE"の値が0である。

この時、SELECTコマンドは終了している為、IF文内→何もしない


又、オブジェクトを選択せずに、"SELECT"コマンドを実行した時
"SELECT"コマンドがアクティブ(実行中)で
システム変数"CMDACTIVE"の値が1である。

この時、SELECTコマンドは実行中の為、IF文内→"\"にて"SELECT"コマンド継続

●マクロ使用例
^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_copy;p;;



この様に、コマンドの特性を活かし、システム変数"CMDACTIVE"を使用する事で
簡易的では有りますが、自動判断をさせるコトが出来ます。

AutoCADカスタマイズの手引き―AutoCAD LT 2000i/AutoCAD 2000i対応/大浦 誠

¥2,940
Amazon.co.jp