■中級 2.DIESEL評価の遅らせ方 | AutoCADマクロ屋本舗
DIESELマクロを作成する上で
このDIESEL評価の遅らせ方は、大変重要な内容です。

以前、"SETENV"を使ったマクロで
^C^C_setenv;横;\_setenv;縦;\_id;\_rectang;non;@;non;$M=$(getenv,横),$(getenv,縦);

この様なマクロを作成しました。(※【SETENVとGETENV】参照

この場合は、この記述で全く問題ありませんが
途中で"SETENV"の値を変えたい場合は、問題が生じます。


"評価を遅らせる"ということが、ピンと来ないと思いますので
マクロを作成しながら、考えてみましょう。



■円の直径サイズを変更するマクロの作成

最初に・・・
円の直径を計測するには
"AREA"[面積計算]コマンド のオプション[オブジェクト(O)]を使用します。
※【面積と長さ】参照

直径=円周長さ÷π(3.141592654・・・)

この様に、円周長さから直径を計算させます。


また、円の直径を変更させるには
"CHANGE"[データ変更]コマンド を使用します。

実際にコマンドラインにて、"CHANGE"コマンドを実行してみると
コマンド: change

オブジェクトを選択: 認識された数: 1

オブジェクトを選択: ←円オブジェクト選択後エンター
変更位置を指定 または [プロパティ(P)]: ←ここでエンター

円の新しい半径を指定 <変更しない([Enter]キー)>: ←半径を記入

この様になります。


では、マクロを作成してみましょう。



1)"AREA"[面積計算]コマンドを実行
^C^C_area;o;\

2)"SETENV"コマンド実行し、新規変数名"直径"で実行
^C^Carea;o;\setenv;直径;

"AREA"コマンドで測定された円周長さの値は
システム変数"PERIMETER"に格納されていますので
直径=円周÷π

↑この計算式をマクロでの計算させると
直径=$(/,$(getvar,perimeter),3.141592654)

となります。

3)選択した円の直径(=円周長さ÷π)を計算
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);


4)直径の値を変更させる為、再度"SETENV"コマンドを実行
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;直径;\


5)"CHANGE"コマンドを実行
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;直径;\change;


6)先程選択した円を"@"で指定しエンター
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;直径;\change;@;;;



この後、半径を指定すると、円のサイズが変更されます。
後から再度記入した"_setenv;直径;"の値から、半径を計算させると
半径=$(/,$(getenv,直径),2)
ですが・・・

●マクロ1(誤)
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;直径;\change;@;;;$(/,$(getenv,直径),2);


とした場合、上記マクロ例では・・・

"$M="で計算開始された位置からの結果が反映される為
2度目に直径サイズを指定しても
"CHANGE"コマンドで計算された、半径の値には
最初に円周から計算された、1度目の"_setenv;直径;"の値で
計算されてしまいます。


だからと言って・・・

●マクロ2(誤)
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;半径;\change;@;;;$(getenv,半径);

↑この様に変更してもダメです。^^;

このマクロを何度も実行し
"半径"の値に、毎回違う値を指定すると分かると思いますが
前回実行した時の値で円のサイズが変更されてしまいます。



では、ど~すればいいかと言うと・・・

●マクロ1(正)
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;直径;\change;@;;;$M="$(/,$(getenv,直径),2)";


●マクロ2(正)
^C^Carea;o;\setenv;直径;$M=$(/,$(getvar,perimeter),3.141592654);setenv;半径;\change;@;;;$M="$(getenv,半径)";


この赤字部分の様に " (ダブルクォーテーション)で囲って 記述すると
後から指定した"直径"や"半径"の値が反映されます。


これが、「評価を遅らせる」と言われる手法です。


ちなみに・・・

さらに遅らせたい場合は
■ダブルクォーテーション 3個(+2)
$M="""$(*****)"""
■ダブルクォーテーション 7個(+4)
$M="""""""$(*****)"""""""
■ダブルクォーテーション 15個(+8)
$M="""""""""""""""$(*****)"""""""""""""""

ただし!
むやみに「 " (ダブルクォーテーション)」を増やせばいいてものでもありません。
しかも、マクロには"文字数制限"がありますので
長くなり過ぎないように注意して下さい。^^;


マクロを作成する上で、"最も重要な内容の1つ"です。
何度も確認しながら、必ず覚えておきましょう。


使える! AutoCAD & LT カスタマイズブック 使えるカスタムプログラム100、使える.../中森 隆道

¥3,360
Amazon.co.jp