意味としては、「直前に指定された点」です。
今回は、システム変数"LASTPOINT"を説明します。
ヘルプを参照してみると
最後に入力した点を現在の空間の UCS 座標値で格納します。
この点は、キーボードからの入力中に アット マーク(@)で参照することができます。
意味としては"@"と同じですが、動作は必ずしも同じではありません。
例えば・・・
^C^C_id;\_line;non;@;\;
^C^C_id;\_line;non;$M=$(getvar,lastpoint);\;
この2つの動作は同じ動作をします。
この程度のマクロならば、文字数も少なく済むので"@"を使った方が良いでしょう。
では、適当な三角形を線分コマンドで作成するマクロを作成してみましょう。
1)最初に"ID"コマンドを実行
^C^C_id;\
2)次に"LINE"コマンドを実行
^C^C_id;\_line;
3)1点目は"ID"コマンドで指定した点を指定
^C^C_id;\_line;_non;@;
4)"\"にて2点ほどユーザー入力させます
^C^C_id;\_line;_non;@;\\
ここで、一番最初に"ID"コマンドで指定した点を
システム変数"LASTPOINT"で指定しますが・・・
^C^C_id;\_line;_non;@;\\non;$M=$(getvar,lastpoint);
この様に記述しても、直前の座標値が指定されてしまいますね。
このシステム変数"LASTPOINT"は
"$M="で開始された時点での
「直前に指定された点」が格納されるのです。
よって、正しい記述は・・・
^C^C_id;\$M=_line;_non;@;\\non;$(getvar,lastpoint);;
もしくは・・・
^C^C_id;\_line;_non;@;$M=\\non;$(getvar,lastpoint);;
この様に記述することで、"ID"コマンドで指定した時の座標値が
システム変数"LASTPOINT"に格納され
$(getvar,lastpoint)によって、その座標値を呼び出すコトが出来ます。
この事は、他のシステム変数(例えば・・・"AREA"や"PERIMETER"等)
にも言えることで、"$M="の位置によって
全く違った動作になってしまう事もあるが
構文上の見た目は違っても、同じ動作をするマクロにもなり得ます。
この"$M="の位置付けとシステム変数の使い方は
"評価を遅らせる方法"としても重要なので、必ず覚えておきましょう。
最後に・・・
システム変数"LASTPOINT"を使った
"評価を遅らせる"良い例文マクロがありますので、紹介したいと思います。
♪4点を指定し最後に"LINE"コマンドで線分を作図するマクロ
■パターン1
^C^C_id;\_setenv;p1;$M=$(getvar,lastpoint);_id;\_setenv;p2;"$M=$(getvar,lastpoint)";_id;\_setenv;p3;"""$M=$(getvar,lastpoint)""";_id;\_setenv;p4;"""""""$M=$(getvar,lastpoint)""""""";_line;"$M=$(getenv,p1)";"""$M=$(getenv,p2)""";"""""""$M=$(getenv,p3)""""""";"""""""""""""""$M=$(getenv,p4)""""""""""""""";; |
■パターン2
^C^C_id;\_setenv;p1;$M=$(getvar,lastpoint);_id;\_setenv;p2;$M="$(getvar,lastpoint)";_id;\_setenv;p3;$M="""$(getvar,lastpoint)""";_id;\_setenv;p4;$M="""""""$(getvar,lastpoint)""""""";_line;$M="""""""""""""""$(getenv,p1);$(getenv,p2);$(getenv,p3);$(getenv,p4)""""""""""""""";; |
※パターン1とパターン2は同じ動作をします。
●説明
上記の2つのマクロは
"ID"コマンドで、任意座標点を4回指定し
"SETENV"コマンドにて、変数名"p1"~"p4"に、各座標値を格納し
"LINE"コマンドで線分作成時に、それぞれの座標値を呼び出すマクロです。
一見、文字数が多いので難しそうに見えますが
繰返し行なってるだけなので、理解しやすいと思います。
AutoCAD 2012/AutoCAD LT 2012 公式トレーニングガイド/オートデスク株式会社

¥3,990
Amazon.co.jp