関数 ssget で複数の図形を選択し、変数に入れて、コマンド操作で編集していきます。
予備知識
関数 ssget
AutoLISP 関数 ssget は、複数のオブジェクトを選択してグループにした「選択セット」を作る機能があります。
引数として選択方法(A:すべてのオブジェクト、W:2点を指定して窓選択など)を渡します。
各選択方法は公式ページを参考にして下さい。
今回は、コマンド実行時に、ユーザが編集したいオブジェクトをマウスで選択するようにします。
ユーザがオブジェクト選択するようにした場合は引数は必要ありません。
戻り値は選択された図形たちをグループにした選択セット名です。
では、ssget を使って、戻り値の選択セット名を 変数Objs に入れてましょう。
いくつか図形を用意して、以下のコードをコマンドラインに入れてください。
(setq Objs (ssget))
図形を選択するようにプロンプトが出るので、用意した図形を選択してください。
コマンドラインを見ると、、、
<selecton set : 62> のように、選択セット名が取得できました。
setq Objs で、変数 Objs にこの値を入れたので、!Objs で中身を確認してみてください。
図形セット名がキチンと入っていれば、この先、変数 Objs を選択図形の代わりとして使うことができます。
AutoCAD上にコマンドラインが見当たりませんか?
CTRL+9 がコマンドラインのオン/オフ切替ショートカットです。
もしくはコマンド COMMANDLINE でコマンドラインを表示させることができます。
選択セットに入れた図形を編集してみよう
下記の記事の、(car(entsel)) で1つの図形選択でコマンド操作をしてみたときと同じことを複数の図形の選択セットでも試してみましょう。
色が赤以外で、画層が0以外のポリラインをいくつか用意してください。
そして、(setq Objs (ssget)) をコマンドラインに入力して、用意したポリラインを選択し、選択セットを変数Objsに入れます。
(setq Objs (ssget))
CHANGE[データ変更]
色を赤に変える
AutoCADコマンドCHANGE[データ変更] を使って、図形の色を赤にしてみましょう。
図形選択 >[プロパティ(P)]> [色(C)] > 色番号入力
色番号を赤(1) にしたい場合、これをAutoLISPに書き換えるとこうなります。
(command-s "._CHANGE" Objs "" "P" "C" "1" "")
変数Objsに図形セット情報が入った状態でコマンドラインにコピペしてみて下さい。
赤色に変わります。
画層を0にする
今度は画層を0にしてみましょう。
AutoCADコマンドCHANGE[データ変更] で、
図形選択 >[プロパティ(P)]> [画層(LA)] > [画層名] > “画層名”入力
を選ぶことで、図形の画層を変更できます。
図形の画層 “0” にしたい場合、これをAutoLISPに書き換えるとこうなります。
(command-s "._CHANGE" Objs "" "P" "LA" "0" "")
変数Objsに図形セット情報が入った状態でコマンドラインにコピペしてみて下さい。
図形の画層が0に代わります。
PEDIT[ポリライン編集]
今度は、線の太さも変えてみましょう。RECTANG[長方形] コマンドで作った長方形はポリラインなので、ポリライン編集が使えます。
PEDIT は複数選択はオプションなので、複数の図形選択の時には、一括(M)オプションを使います
AutoLISPコマンドPEDIT[ポリライン編集]で
[一括(M)]> 図形選択 >[幅(W)]> [数値]
で変更できます。
図形の幅を 5 にしたい場合、これをAutoLISPに書き換えるとこうなります。
(command-s "._PEDIT" "M" Objs "" "W" 5 "")
変数Objsに図形セット情報が入った状態でコマンドラインにコピペしてみて下さい。
ポリラインの幅が5に代わります。
MOVE[移動]
次はAutoLISPコマンドMOVE[移動]を使ってみましょう。
オプション[移動距離(D)]を選ぶことで、座標を使って移動することができます。
X方向に100動かしたい場合、これをAutoLISPに書き換えるとこうなります。
(command-s "._MOVE" Objs "" "D" "100,0,0")
変数Objsに図形セット情報が入った状態でコマンドラインにコピペしてみて下さい。
図形が✗方向に100移動します。
一度の選択で複数のコマンド操作
これらを1つのAutoLISPコマンドにまとめるとこうなります。
(defun c:test (/ Objs)
(setq Objs (ssget))
(command-s "._CHANGE" Objs "" "P" "C" "1" "")
(command-s "._CHANGE" Objs "" "P" "LA" "0" "")
(command-s "._PEDIT" "M" Objs "" "W" 5 "")
(command-s "._MOVE" Objs "" "D" "100,0,0")
(princ))
コマンド名”test” で、複数のポリラインを選択すると、まとめて、色を赤に変えて
画層を0にして、幅を5にして、✗方向に100動きます。
まとめ
- AutoLISP関数 ssget で、複数の図形をまとめて選択セットを作ることができる。
- 選択セット名を入れた変数は、command-s でコマンド操作をするときに図形選択の代わりに使える。
- pause と比べて、ssgetで作った選択セットをを入れた変数を使った方が、同じ情報を何度も使えて便利
関連記事
グループ選択をするとき、そのコマンドを実行したい図形だけを選択するようにフィルターをかけるとより便利になります。
図形を選択してからコマンドを実行するグループ選択(暗黙選択)についての記事です。
グループ選択の応用編。先にグループ選択をしてからコマンドを実行した場合と、何も選択せずにコマンド実行をした場合、それぞれ違う処理にする方法です。
今回の記事のようにコマンドで選択セット丸ごと処理ではなく、選択セットに入った複数の図形を1つづつ処理して行く方法です。
Comments