■上級 1.DIESEL関数 [if] | AutoCADマクロ屋本舗
DIESELマクロで避けては通れないのが
このIF文です。

構文の書き方は
$(if,A,B,C)
です。

これを言葉で説明すると・・・
もし・・・A≠0ならB・・・A=0ならC

Aの数値が0かそうでないかで判断させ
マクロを分岐させる文字列関数がIF文です。

例えば、"SETENV"コマンドにて、
新規変数名に数値を入れて分岐させてみましょう。

1)"SETENV"コマンドを実行し、変数名"to"で数値を記入させる"\"を記入
^C^C_setenv;to;\

2)DIESEL開始の"$M="を記入
^C^C_setenv;to;\$M=

3)$(if,A,B,C)のAの部分を"to"の値で判断
^C^C_setenv;to;\$M=$(if,$(getenv,to),B,C)^M

4)$(if,A,B,C)のBの部分に"COPY"コマンド、Cの部分に"MOVE"コマンド記入
^C^C_setenv;to;\$M=$(if,$(getenv,to),_copy,_move)^M

この様に記述する事で
新規変数名"to"の値が0で無い時、"COPY"コマンド実行
新規変数名"to"の値が0の時、"MOVE"コマンド実行
と、なります。


又、$(if,A,B,C)のA部に、次の文字列を使用した関数を記入することで
色々な判断をさせるコトも出来ます。※ヘルプ参照
「=」(に等しい)
数値 val1 と val2 が等しい場合は 1 を返します。
それ以外の場合は、0 を返します。

$(=, val1, val2)
「<」(より小さい)
数値 val1 が val2 よりも小さい場合は 1 を返します。
それ以外の場合は、0 を返します。

$(< , val1, val2)
「>」(より大きい)
数値 val1 が val2 よりも大きい場合は 1 を返します。
それ以外の場合は、0 を返します。

$(>, val1, val2)
「!=」(に等しくない)
数値 val1 と val2 が等しくない場合は 1 を返します。
それ以外の場合は、0 を返します。

$(!=, val1, val2)
「<=」(より小さいかまたは等しい)
数値 val1 が val2 以下の場合は 1 を返します。
それ以外の場合は、0 を返します。

$(<=, val1, val2)
「>=」(より大きいかまたは等しい)
数値 val1 が val2 以上の場合は 1 を返します。
それ以外の場合は、0 を返します。

$(>=, val1, val2)
「eq」
文字列 val1 と val2 が同一であれば、1 を返します。
それ以外の場合は、0 を返します。

$(eq, val1, val2)

▲注意
"val1"と"val2"にはそれぞれ、判断させる数値もしくは
DIESEL関数を記入することで
様々な判断をさせるコトが可能です。

●使用例
^C^C_setenv;to;\$M=$(if,$(=,$(getenv,to),0),_copy,_move)^M

また、全て数値で判断してますが、「eq」のみ文字列を判断します
数値以外での判断には、「eq」を使用して下さい。

これらの文字列は、DIESEL関数内にて、全て1か0の数値が返されます。
この0か1の数値を、IF文にて判断させればいいのです。

このIF文の使用方法を覚えると、
今まで出来なかったマクロが可能となります。

覚えておきましょう。

使える! AutoCAD & LT カスタマイズブック 使えるカスタムプログラム100、使える.../ソフトバンククリエイティブ

¥3,360
Amazon.co.jp