図形を選択してからコマンドを実行している人は多くいると思います。AutoLISPで作った自作コマンドでも同じことができます。
ssget “_I” 暗黙選択
ssget で選択セットを作るとき、選択方法がいろいろあります。公式ページを見るといろいろオプションが並んでるので確認してみてください。
実行前に選択していた場合その図形を選択するの、暗黙選択(Implied)の ”I” です。
図形を選択していてコマンドを実行するんだから、言わなくても暗黙の了解で、どの図形を使いたいかわかるでしょ?!という選択方法です。
(setq Objs (ssget “_I”))
で、コマンド実行前に選択されていた図形の選択セットを変数Objsに入れることができます。
選んでなかったら?
コマンドを実行してから、図形を選択したい場合も多くあります。
ですので、暗黙選択を使うときは、基本的には後から図形を選択するssget も付けましょう。
(setq Objs (ssget “_I”))
(if (null Objs)(setq Objs (ssget)))
で、先に選択した図形があるなら、それを選択セットにしてObjsに入れる。
Objsに選択セットが入らなければ、つまり、先に図形を選択していなければ、通常のssgetで、ユーザー選択して選択セットを作る。
となります。
システム変数 PICKFIRST
システム変数 PICKFIRST は、コマンド実行前に図形選択できるかどうかをコントロールします。
この値が0だと、既存のAutoCADコマンドも、 (ssget “_I”)を使った自作コマンドも、暗黙選択はできず、コマンド実行後に図形を選択のみになります。
AutoLISP プログラム
図形の色を赤にするコマンドの暗黙選択を付けた場合のコマンド例です。
(defun c:test ( / Objs)
(setq Objs (ssget "_I"))
(if (null Objs)(setq Objs (ssget)))
(command-s "._CHANGE" Objs "" "_P" "_C" "1" "")
(princ))
まとめ
- sssgetで選択セットを作るときに、選択方法のオプションがいくつもある。
- オプションの1つが暗黙選択。コマンド実行前に選択していた図形を暗黙の了解で選択セットにする。
- もし図形が選択に入らなかったらssget と入れて、暗黙選択がされなかった場合に選択セットをユーザ選択で作るようにする。
- システム変数PICKFIRSTがオフになっていたら、暗黙選択はされない。
Comments