■特級 5.「OFFSET」を使った分岐 | AutoCADマクロ屋本舗
"nth"を使うことで、色々な分岐が行なえます。

"dist"コマンドによる分岐は、以前 【■上級 5.ダミーで分岐】 で説明しました。
今回は、「オブジェクトを選択」又は「右クリック」による分岐を説明します。

例えば、始めにマクロ実行し、ある数値を設定するとします。
その後、オブジェクト選択する時に、設定値を再度変更する場合等に
右クリックにて、設定値変更状態にさせます。

ダミーコマンドとして、よく使用するのが"オフセット[OFFSET]"コマンドです。
このコマンドの特性を利用します。
※【■中級 8.ダミーでオブジェクト選択】参照


オフセットコマンドを例に、簡単な分岐マクロを作成してみましょう。


1)初めに"nth"開始文を記述します。(※【■特級 2."nth"マクロ基本】 参照)
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),)^M

2)"SETENV"にて、"オフセット間隔"を指定する変数名"ok"とユーザ入力"\"を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;\)^M

3)制御文字"^X"にて、変数の説明文"オフセット間隔"を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\)^M
※この時、開始時に"setenv;to;0;"の為、コマンドは"setenv"を維持している為
 「setenv;ok;」としなくても、";"にて"setenv"コマンドの記述省略可。


4)ここで"setenv;to;1"へ移行
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)^M
※同じく「setenv;to;1」としなくても、";"にて"setenv"コマンドの記述省略可。

5)"nth=1"の開始文を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,)^M

6)"offset"コマンド実行し、"オフセット間隔"とユーザ入力"\"を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);\,)^M

7)説明文を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\,)^M

8)IF文にて、分岐の構文を記述 [注:$M="""( )"""を忘れずに]
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\$M="""$(if,$(getvar,cmdactive),,)""",)^M
※【■特級 4."nth"でマクロ作成】参照

ここで、右クリック時を考察します。

右クリックした場合は、再度"オフセット間隔"を記入させるので
単純に"nth=0(to=0)"の構文へ移行させましょう。

9)"setenv;to;0"を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\$M="""$(if,$(getvar,cmdactive),,setenv;to;0)""",)^M

続いて、左クリック時(オブジェクト選択時)を
"nth=2(to=2)"の構文へ移行させます。

10)";setenv;to;2"を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;2,setenv;to;0)""",)^M
※";(エンター)"にて、オフセットコマンドを終了させています

11)"nth=2"の開始文を記入
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;2,setenv;to;0)""",)$(nth,$(getenv,to),,,)^M

12)"SELECT"コマンドにて、オブジェクトを選択したかを判断
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;2,setenv;to;0)""",)$(nth,$(getenv,to),,,setenv;to;1;select;non;@;non;@;;)^M
※【■中級 8.ダミーでオブジェクト選択】参照

13)オフセットコマンドを実行
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;ok;オフセット間隔^X\;to;1,,)$(nth,$(getenv,to),,offset;$(getenv,ok);【間隔指定(右クリック)】^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;2,setenv;to;0)""",)$(nth,$(getenv,to),,,setenv;to;1;select;non;@;non;@;;offset;;non;@;\)^M


これで、簡単な"選択と右クリック"の分岐マクロの完成です。

今回作成したマクロは、あくまでも簡易的な例題マクロです。
この分岐は、"nth"を使ったマクロで、大変多く使っています。

使用頻度の高い分岐マクロなので、覚えておきましょう。



これからはじめる AutoCADの本 [AutoCAD/AutoCADLT2006/2007/.../技術評論社

¥2,499
Amazon.co.jp