この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