AutoCADのマクロで
^C^C_select;$M=$(if,$(getvar,cmdactive),\,)コマンド
とすることで、
「オブジェクトを選択してからコマンドを実行」
と
「コマンドを実行してからオブジェクトを選択」
がどちらも可能になる、という裏技的なマクロがありますが・・・
どうも、コマンドによってはこれがうまく作動しない場合があるような・・・
例えば、「pedit」と「join」
まず、peditですが、「ポリラインを閉じる」ツールボタンを作成したかったのですが、どうもうまくいかない。
色々四苦八苦した結果、以下でできるようになりました。
^C^C_select;$M=$(if,$(getvar,cmdactive),^C\pedit;c;,_pedit;m;p;;c;;)^C
この「$M=$(if,$(getvar~」というのが何なのか、細かい解説は省きますが
※詳しく知りたい方はこちら
⇒ AutoCADマクロ屋本舗
要するに、下記のようにした場合に
^C^C_select;$M=$(if,$(getvar,cmdactive),AAAA,bbbb)
AAAA の部分に、何も選択指定ない状態で実行したい内容を
BBBB の部分に、先にオブジェクトを選択した場合に実行したい内容を
記述すれば良い、というものです。
なので、それぞれの条件におけるコマンド・オプションを書いて、最後に「^C]でキャンセルして終了しているわけですね。
他にもっとスマートなやり方があるのかも知れませんが、まぁ意図した動作ができていますのでOKでしょう(笑)
次に、「join」
途中が切れてしまっている円を、閉じて円に戻すツールボタンを作りたかったのですが
こちらも上と同じやり方でできそうなものだけれども・・・断念。
問題は、「直前選択」(P)が、joinコマンドでは作動しないのです。。。
(L)(最後に選択)だけしか使えないため、どうしても、意図したオブジェクトが選択できません。
最終的に解決方法として、また反則っぽいですが、以下のようにしました。
pickfirst;0;_join;\l;pickfirst;1;
※「pickfirst」というシステム変数(コマンドの実行の前にオブジェクトを選択できるようにするかどうかの変数)を、「0」にするとコマンド実行時に選択が強制解除になるので、それで狙ったオブジェクトをクリックして終了、「pickfirst」を「1」に戻すという・・・(戻さないとオブジェクトを先に選択してから削除などができなくなるので)
(※コマンドを途中でキャンセルすると、「pickfirst」が「0」のままになってしまいます。その場合、DELETEキーでオブジェクトを削除できなくなるなどの症状が出現しますので(仕様通りの動作ですが)、その場合は手動で「pickfirst」を「1」に戻す必要がありますので取り扱い注意かも。)
これだと一個ずつしかできませんが、円を閉じるのは、連続して行う事はほとんどないので、まぁこれで良いかと。。。
コメント