お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2010年3月22日月曜日

マクロについて ー その4 「マクロに追加する ^R について」(AutoCAD 2011)

今日は、マクロで使用する ^R についてです。

例えば、こんな記述で使われます。
^C^C^RCOPY;\;50,0;100,0;
これは、ちょっと話がややこしいので、ややこしいのが苦手な人は、次のように覚えればいいのではと思います。
コマンド 入力した時と同じようにマクロを作ったのにうまく動かない時は、マクロに ^R を付けてちゃんと動くか試してみる。
ただし、逆に、^R を付けると思うように動かないこともあるので、『じゃあ、最初から全部に ^R を付けちゃえ』という訳には行かないです。

動画はこちらです。


ちゃんとした理由がわからないと嫌だ!!とか、ややこしい話が好き!!という人は、以下の管理人の認識を参考にしてください。

【マクロの ^R に関する管理人の認識】
^R は、アクション レコーダが追加されたときに、一緒に追加されました。
それは、アクション レコーダで保存した内容を、正しく再生するためにコマンド バージョンというものが追加されて使用できるようになったためです。

例えば、COPY コマンドを手動で実行(リボンから [複写] を選んだり、コマンド ラインに COPY と入力)してオブジェクトを選択すると、コマンド ラインには以下の内容が表示されます。
現在の設定:  複写モード = 複数
基点を指定 または [移動距離(D)/モード(O)] <移動距離>:
しかし、AutoLISP で (command "_.COPY") と実行してオブジェクトを選択すると、コマンド ラインには以下の内容が表示されます。
基点を指定 または [移動距離(D)/連続(M)] <移動距離>:
つまり、手動で COPY コマンドを実行したときと、AutoLISP などで実行した時とでは動作が異なります。
今回の例で具体的に言うと、手動で COPY コマンドを実行すると連続コピーを行える状態になっていますが、AutoLISP で実行した場合はそうなっていません。(連続コピーを行いたいときは [連続(M)] オプションを実行する必要があります。)

これは、以前は連続コピーをするためには [連続(M)] オプションを実行しなければならなかったのが、あるバージョンから最初から連続コピーを実行できるようになり、AutoLISP などで実行した時の動作もそれに合わせて変えてしまうと、昔のバージョンで使っていた AutoLISP を編集しないとちゃんと動かなくなってしまうことを防ぐためにでてきた違いです。

また、これ以外にも、FILLET コマンドを実行したときのオプションも違います。
手動で実行したときは、こう表示されます。
最初のオブジェクトを選択 または [元に戻す(U)/ポリライン(P)/半径(R)/トリム(T)/複数(M)]:
AutoLISP などで実行したときは、こう表示されます。
最初のオブジェクトを選択 または [元に戻す(N)/ポリライン(P)/半径(R)/トリム(T)/複数(U)]
[元に戻す] と [複数] のオプション キーワードが違いますよね。
これも、あるバージョンから、他のコマンドとオプション キーワードを合わせるために変更されたためです。

このように、同じコマンドが実行されても、手動で実行したときと、AutoLISP(やマクロなど)で実行したときとでは、その後の操作が違ってくるので、アクション レコーダがその違いを認識出来るようにしなければなりません。

そのために出てきたのが、コマンド バージョンです。

AutoLISP や マクロなどで自動実行された場合は、古いコマンド バージョンで実行されたと認識され、手動で実行したときは新しいコマンド バージョンで実行されたと認識されます。

ここで、具体的に例を見てみましょう。

例:オブジェクトを選択して、X 方向に 50 と 100 の 2 回コピーを行うマクロを作成するとき

手動で行うと、コマンド ラインには以下のように入力しますよね。
コマンド: COPY

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

オブジェクトを選択:

現在の設定:  複写モード = 複数
基点を指定 または [移動距離(D)/モード(O)] <移動距離>: 0,0
目的点を指定 または <基点を移動距離として使用>: 50,0

2 点目を指定 または [終了(E)/元に戻す(U)] <終了>: 100,0

2 点目を指定 または [終了(E)/元に戻す(U)] <終了>:
ということで、マクロは以下のようになります。
^C^CCOPY;\;50,0;100,0;
でも、さっき言ったように、マクロは古い動作になるので、連続コピーの設定になっていないので、この内容ではちゃんと動きません。

アクション レコーダが出来る前は、このようなときは、古い動作がどうか確認してマクロを作成しなければいけませんでした。(^C^CCOPY;\;M;0,0;50,0;100,0;;)

しかし、今はマクロに ^R を追加することで、「これは新しいコマンド バージョンですよ」 と認識させることができます。
^C^C^RCOPY;\;50,0;100,0;
これで、手動で実行した時と同じように、COPY コマンドをマクロで実行することができます。

0 件のコメント:

コメントを投稿