AutoLISPってなに?という方はまずこちらの記事をご覧ください。
AutoCADユーザーがAutoLISPを覚えるべきメリット3選
- オブジェクト(図形)の選択動作を自動化したい
- 選択セットの使い方を知りたい
図面上でオブジェクト(図形)を選択する作業を面倒に感じたことはないでしょうか。1回や2回ならまだしも何回も手動で選択して処理をするのは時間も手間もかかって効率が悪いし、ストレスが溜まります。
そんな時はAutoLISPで選択動作を自動化してしまえば楽です。今回の記事ではオブジェクトを選択したときに作成される選択セットについて解説していきます。
選択セットを操作することで選択動作を自動化できますのでぜひご覧ください。
【ssget】選択作業を効率化!AutoLISPの選択セットを解説

選択セットってなに?
関数の解説をする前に選択セットについて説明します。
選択セットとは簡単にいうと複数図形を1つのグループにしたものです。ちなみにAutodesk社のヘルプでは次のように説明されています。
選択セットは、選択された 1 つまたは複数のオブジェクト(図形)から構成されたグループです。対話的に選択セットにオブジェクトを追加したり、選択セットからオブジェクトを除去したり、選択セット内のオブジェクトをリストできます。
AUTODESK AUTOCAD 2018 ヘルプ
オブジェクト(図形)の追加や除去はこれから解説していく関数で実行できます。
また、選択セット内には図形名と呼ばれるラベルが格納されます。図形名とはそのままの意味で図形の名前を表しており、図形単体を指定することが可能です。
図形名は、図面内のオブジェクトに割り当てられた数値ラベルです。これは実際には AutoCAD によって維持されるファイルへのポインタであり、これを使用してオブジェクトのデータベース レコードとそのベクトル(表示される場合)を検索できます。
AUTODESK AUTOCAD 2018 ヘルプ
図形名からは図形定義データを取得することもできるので、図形単体に対して様々な編集を加えることが可能になります。
図形定義データについてはこちらの記事で解説していますのでよろしければご覧ください。
関連記事:図形の編集を自動化しよう!AutoLISPの図形定義データを解説
選択セットを操作する関数
今回解説する選択セットの関数は次の6つです。
- 選択セットの作成 ssget
- 選択セットへ図形名を追加 ssadd
- 選択セットから図形名を除去 ssdel
- 選択セットから指定要素番号の図形名を取得 ssname
- 選択セットの要素数を取得 sslength
- 指定の図形名が選択セットに含まれているか確認 ssmemb
選択セットの作成 ssget
ssgetの特徴は?
- 選択したオブジェクト(図形)から選択セットを作成できる
- フィルターで選択するオブジェクトを絞り込める
ssgetは図面上で選択したオブジェクトから選択セットを作成する関数です。選択方法や選択範囲は引数で変更できるので、選択するオブジェクトを絞り込むことが可能です。
ssgetの使い方は?
ssgetの構文と引数および返り値は次のとおりです。
(ssget [選択方法] [座標1] [座標2] [座標リスト] [フィルターリスト]) ※[]内は省略可能
引数 | 内容 |
---|---|
選択方法 | オブジェクトの選択方法を指定する文字列(下表参照)を入力する。 |
座標1 | 選択に関する座標の1つ目。 |
座標2 | 選択に関する座標の2つ目。 |
座標リスト | 選択に関する座標のリスト。 |
フィルターリスト | 図形のプロパティを指定する連想リスト。 |
返り値 | 内容 |
---|---|
選択セット | オブジェクトが選択された場合は作成された選択セットを返す。 |
nil | 何も選択されなかった場合はnilが返る。 |
記述例 | 内容 |
---|---|
(ssget) | 標準の方法でユーザーに選択を求める。 |
(ssget "X") | 図面内すべての図形を選択する。 |
(ssget "P") | 直前に選択した図形を選択する。 |
(ssget "L") | 最後に追加された可視図形を選択する。 |
(ssget "C" p1 p2) | 指定した範囲内またはその範囲と交差する図形を選択する。 |
(ssget "W" p1 p2) | 指定した範囲内の図形を選択する。 |
(ssget "F" (list p1 p2)) | 指定した座標の線分に交差する図形を選択する。 |
(ssget "CP" (list p1 p2 p3 p4)) | 指定した多角形内またはその多角形と交差する図形を選択する。 |
(ssget "WP" (list p1 p2 p3 p4)) | 指定した多角形内の図形を選択する。 |
ssgetの使用例
;座標(10,10)を通るオブジェクトで選択セットを作成
(ssget (list 10 10))
;画層"layer1",図形種"circle"のオブジェクトを図面全体から選択し選択セットを作成
(ssget "X" (list (cons 8 "layer1") (cons 0 "circle"))
2つ目の例では図形のプロパティを連想リストで指定することで図面全体から選択するオブジェクトを絞り込んでいます。ちなみに連想リストとは2つの要素からなるリストを要素に持つリストのことです。
図形を定義するデータは連想リストになっているので指定のプロパティを持つ図形を絞り込むことができます。図形定義データについてはこちらの記事で解説していますのでよろしければご覧ください。
関連記事:図形の編集を自動化しよう!AutoLISPの図形定義データを解説
選択セットへ図形名を追加 ssadd
ssaddの特徴は?
- 既存の選択セットに図形名を追加できる
- 空の選択セットを作成できる
ssaddは既存の選択セットに図形名を追加できる関数です。
図形名を指定しない場合は空の選択セットが作成されます。また、図形名だけを指定した場合はその図形名を格納した新しい選択セットが作成されます。
ssaddの使い方は?
ssaddの構文と引数および返り値は次のとおりです。
(ssadd [図形名 [選択セット]]) ※[]内は省略可能
引数 | 内容 |
---|---|
図形名 | 選択セットに追加する図形名。 |
選択セット | 図形名を追加する既存の選択セット。 |
返り値 | 内容 |
---|---|
選択セット | 指定した図形名を追加した既存の選択セットを返す。 引数を省略した場合は空の選択セットが返る。 |
ssaddの使用例
;空の選択セットを作成に作成した円を追加する
(setq ss (ssadd))
(command "circle" (list 0 0) "D" 10)
(ssadd (entlast) ss)
「entlast」は最後に作成した図形の図形名を返す関数です。
こちらの記事で解説をしていますのでよろしければご覧ください。
関連記事:図形の編集を自動化しよう!AutoLISPの図形定義データを解説
選択セットから図形名を除去 ssdel
ssdelの特徴は?
- 選択セットから図形名を除去できる
- オブジェクト自体は削除されない
ssdelは選択セットから指定した図形名を除去する関数です。除去されるのはあくまで図形名だけでオブジェクト自体は削除されません。
ssdelの使い方は?
ssdelの構文と引数および返り値は次のとおりです。
(ssdel 図形名 選択セット)
引数 | 内容 |
---|---|
図形名 | 選択セットから除去する図形名。 |
選択セット | 図形名を除去する選択セット。 |
返り値 | 内容 |
---|---|
選択セット | 指定した図形名を除去した選択セットが返る。 |
ssdelの使用例
;既存の選択セットから最後に作成した図形を削除する
(command "circle" (list 0 0) "D" 10)
(setq ss (ssadd (entlast)))
(ssdel (entlast) ss)
選択セットから指定要素番号の図形名を取得 ssname
ssnameの特徴は?
- 選択セット内の図形名を取得できる
- 取得する図形名は要素番号で指定する
- 先頭の要素番号は0
ssnameは選択セット内の図形名を取得する関数です。選択セット内での要素番号を整数で指定することで図形名を取得できます。先頭の要素番号は0なので注意してください。
ssnameの使い方は?
ssnameの構文と引数および返り値は次のとおりです。
(ssname 選択セット 要素番号)
引数 | 内容 |
---|---|
選択セット | 図形名を取得する選択セット。 |
要素番号 | 取得したい図形名の要素番号。先頭の要素番号は0。 |
返り値 | 内容 |
---|---|
図形名 | 指定した要素番号の図形名を返す。 |
nil | 指定した要素番号がマイナスまたは要素番号以上の場合はnilが返る。 |
ssnameの使用例
;選択セット内の先頭にある図形名を取得する
(command "circle" (list 0 0) "D" 10)
(setq ss (ssadd (entlast)))
(ssname ss 0)
選択セットの要素数を取得 sslength
sslengthの特徴は?
- 選択セットの要素数を取得できる
sslengthは選択セットの要素数(図形名の数)を取得する関数です。空の選択セットの場合は要素が無いので0が返ります。
sslengthの使い方は?
sslengthの構文と引数および返り値は次のとおりです。
(sslength 選択セット)
引数 | 内容 |
---|---|
選択セット | 要素数を取得する選択セット。 |
返り値 | 内容 |
---|---|
整数 | 選択セット内の要素数を整数で返す。 |
sslengthの使用例
;図面全体のオブジェクト数を取得する
(setq ss (ssget "X"))
(sslength ss)
選択セット内で指定の図形名を検索 ssmemb
ssmembの特徴は?
- 選択セット内で指定の図形名を検索できる
ssmembは選択セット内で図形名を検索する関数です。指定の図形名が見つかればその図形名を返し、見つからなければnilを返します。
ssmembの使い方は?
ssmembの構文と引数および返り値は次のとおりです。
(ssmemb 図形名 選択セット)
引数 | 内容 |
---|---|
図形名 | 選択セット内を検索する図形名。 |
選択セット | 指定した図形名を検索する選択セット。 |
返り値 | 内容 |
---|---|
図形名 | 選択セット内で指定した図形名が見つかった場合はその図形名を返す。 |
nil | 指定した図形名が見つからなかった場合はnilが返る。 |
ssmembの使用例
;最後に作成した図形が選択セット内に含まれているか検索する
(setq ss (ssget "X"))
(command "circle" (list 0 0) "D" 10)
(ssmemb (entlast) ss)
最後に作成した円の図形名は変数ssに含まれないため、上記の例ではnilが返ります。
まとめ
- 選択セットとはオブジェクトを1つのグループにまとめたもの
- 選択セット内には図形名と呼ばれるラベルが格納されている
- 関数を使って選択セットを操作できる