概要 - オブジェクトのコレクション(AutoLISP/ActiveX)

AutoCAD オブジェクト モデル内のすべてのオブジェクトは、コレクションにグループ化されます。

注: AutoLISP での ActiveX のサポートは Windows のみに制限されています。

たとえば、Blocks コレクションは AutoCAD 図面内のすべてのブロックから構成され、ModelSpace コレクションは図面のモデル空間内のグラフィカル オブジェクト(円、線分、ポリラインなど)から構成されます。

次の表は、AutoCAD オブジェクト モデルの一部であるコレクションの一覧です。

AutoCAD コレクション オブジェクト

Block

ModelSpace

Blocks

PaperSpace

DimStyles

PlotConfigurations

Documents

PopMenus

Groups

RegisteredApplications

Hyperlinks

SelectionSets

Layers

TextStyles

Layouts

Toolbars

Linetypes

UCSs

Materials

Viewports

MenuGroups

Views

コレクションからメンバーを取得する

コレクションからメンバー オブジェクトを取得するには、Item メソッドを使用します。Count プロパティは、コレクション内のメンバーの数を返します。Item メソッドと Count プロパティを使用すると、コレクション内の各オブジェクトを個別に処理できます。

たとえば、モデル空間内の各オブジェクトを調べて、オブジェクトのタイプを決め、希望のオブジェクトのタイプのみを処理できます。次のコードは、モデル空間内の各 Arc オブジェクトの開始角度を出力します。

(setq index 0)
(repeat (vla-get-count mspace)
  (if (= "AcDbArc" (vla-get-objectname (vla-item mspace index)))
    (progn
      (prompt "\nThe start angle of the arc is ")
      (prompt (rtos (vla-get-startangle (vla-item mspace index))))
    )
  )
  (setq index (+ index 1))
)
注: Item と Count はグループや選択セットにも適用されます。

コレクション内のすべての項目に関数を適用する

vlax-map-collection 関数を使用して、ある単一の関数をコレクション内の各オブジェクトに適用することができます。これは、コレクション内の各オブジェクトの特定のプロパティの値(各メンバーの名前など)をリストする場合に役立ちます。

関数の構文は、次のとおりです。

(vlax-map-collection collection-object function)

たとえば、次のコマンドは、図面のモデル空間内の各オブジェクトのすべてのプロパティを表示します。

(vlax-map-collection (vla-get-ModelSpace acadDocument) 'vlax-dump-Object)
; IAcadLWPolyline: AutoCAD Lightweight Polyline Interface
; Property values:
; Application (RO) = #<VLA-OBJECT IAcadApplication 00b3b91c>
; Area (RO) = 3.67152
; Closed = -1
; Color = 256
; Coordinates = (9.59247 4.44872 9.25814 5.34715 4.1991 5.679 ...)
; EntityName (RO) = "AcDbPolyline"
; EntityType (RO) = 24
; Handle (RO) = "4C"
; Layer = "0"
; .
; .
; .
; Thickness = 0.0
; Visible = -1
注: 上記の例では、vlax-dump-Object 関数が返す各プロパティは示されていません。

コレクション内のすべての項目に複数の式を適用する

vlax-for 関数を使用すると、コレクション内の各オブジェクトに対して一連の関数を評価することができます。この関数は、vlax-map-collection を使用するよりもはるかに柔軟性があります。foreach 関数と同様、vlax-for 関数は for ループ内で評価された最後の式の結果を返します。

注: コレクション内を走査いるときにコレクションを変更すると(つまり、メンバーを追加したり除去すると)、エラーが発生することがあります。

関数の構文は、次のとおりです。

(vlax-for symbolcollection [expressions] ...)

次の例は、vlax-for 関数を使用してアクティブな図面内の各オブジェクトの色情報を表示する関数を定義しています。

(defun show-Color-Statistics (/ objectColor colorSublist colorList)
  (setq modelSpace (vla-get-ModelSpace
    (vla-get-ActiveDocument (vlax-get-Acad-Object))
    )
  )
  (vlax-for obj modelSpace
    (setq objectColor (vla-get-Color obj))
    (if (setq colorSublist (assoc objectColor colorList))
      (setq colorList
        (subst (cons objectColor (1+(cdr colorSublist)))
          colorSublist
          colorList
        )
      )
      (setq colorList (cons (cons objectColor 1) colorList))
    )
  )
  (if colorList
    (progn (setq
      colorList (vl-sort colorList
      '(lambda (lst1 lst2) (< (car lst1) (car lst2)))
    )
  )
  (princ "\nColorList = ")
  (princ colorList)
  (foreach subList colorList
    (princ "\nColor ")
    (princ (car subList))
    (princ " is found in ")
    (princ (setq count (cdr subList)))
    (princ " object")
    (princ (if (= count 1)
    "."
    "s."
  )
  ) ) ) )
 (princ)
)

この関数は、図面内の各色と、その色が適用されているオブジェクトの数をリストします。