AutoCAD オブジェクト モデル内のすべてのオブジェクトは、コレクションにグループ化されます。
たとえば、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))
)
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-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)
)
この関数は、図面内の各色と、その色が適用されているオブジェクトの数をリストします。