図形フィルタ リストは、entget が返すリストと同じ形式の DXF グループ コードを使用した連想リストです。
ssget 関数は、図形名(グループ コード -1)、ハンドル(グループ コード 5)、および xdata (1000 を超えるグループ コード)以外のすべてのグループ コードを認識します。filter-list に無効なグループ コードを指定すると、ssget により無視されます。xdata を持つオブジェクトの検索には、グループ コード -3 を使用します。ssget への最後の引数として filter-list を指定すると、この関数は選択されたオブジェクトを順に調べ、指定された条件を満たすすべての主図形の名前を含む選択セットを作成します。filter-list には、ssget に図形のどの特性(1 つまたは複数)を調べさせて、どの値と一致していなければならないかを指定します。
たとえば、特定の画層上の特定のタイプのオブジェクト、または特定の色のオブジェクトすべてを含む選択セットを取得できます。
次に、さまざまなオブジェクト選択オプションで filter‑list を使用する方法をいくつか示します。
フィルタ リストを使用した SSGET の例 |
|
---|---|
関数の呼び出し |
結 果 |
(setq ss1 (ssget '((0 . "TEXT"))) ) |
ユーザに標準の方法でオブジェクトを選択するよう要求し、文字オブジェクトだけを選択セットに追加します。 |
(setq ss1 (ssget "P" '((0 . "LINE"))) ) |
直前に作成された選択セットからすべての線分オブジェクトを含む選択セットを作成します。 |
(setq ss1 (ssget "W" pt1 pt2 '((8 . "FLOOR9"))) ) |
画層 FLOOR9 上にある、窓内のすべてのオブジェクトの選択セットを作成します。 |
(setq ss1 (ssget "X" '((0 . "CIRCLE"))) ) |
データベース内のすべての円オブジェクトの選択セットを作成します。 |
(setq ss1 (ssget "I" '((0 . "LINE") (62 . 5))) ) |
暗黙の選択セット(AutoCAD のシステム変数 PICKFIRST が有効なときに選択されたオブジェクト セット)に含まれるすべての青の線分オブジェクトの選択セットを作成します。 このフィルタによって色 5 (青)が割り当てられている線分が選択されますが、ByLayer または ByBlock プロパティによって適用されている色を持つ青の線分は選択されないことに注意してください。 |
グループ コードと必要な値が分かっている場合は、上記の例のように、リストにクォーテーションを使用できます。どちらか一方を変数で指定する場合は、list と cons 関数を使用してリストを作成する必要があります。たとえば次のコードは、画層 FLOOR3 上にある、データベース内のすべてのオブジェクトの選択セットを作成します。
(setq lay_name "FLOOR3") (setq ss1 (ssget "X" (list (cons 8 lay_name)) ) )
次の例のように filter-list に複数のプロパティを指定すると、次のコード例のように、すべての指定条件を満たす図形だけが選択セットに含まれます。
(ssget "X" (list (cons 0 "CIRCLE")(cons 8 lay_name)(cons 62 3)))
このコードは、画層 FLOOR3 上にある緑色の円オブジェクトだけを選択します。このタイプのテストでは、"AND" ブール演算が実行されます。
ssget 関数は、選択された図形を順に調べ、それぞれの主図形のフィールドを指定されたフィルタ リストと照らし合わせることにより、選択セットをフィルタします。図形の特性がフィルタ リスト内のすべての指定フィールドと一致する場合、その図形が返される選択セットに含まれます。その他の場合は、図形は選択セットに含まれません。ssget 関数は、選択された図形のいずれも指定されたフィルタ条件と一致しない場合、nil を返します。
ssget で選択セットをフィルタするとき、取得される選択セットにはペーパー空間とモデル空間の両方の図形が含まれる場合がありま。ただし、その選択セットが AutoCAD のコマンドに渡されるときは、現在有効な空間の図形だけが使用されます。(図形が属する空間は、グループ コード 67 の値によって指定されます。)