集合用于对相同或相似类型的对象进行分组。 集合的概念是在关于了解 AutoCAD 对象模型 (AutoLISP) 中介绍的。回想一下,AutoCAD对象模型中的所有ActiveX对象都分组在集合中。例如,“块”集合由AutoCAD文档中的所有块组成。Visual LISP 提供了一些函数来帮助您处理 AutoCAD 对象的集合。这些函数是 和 。vlax-map-collectionvlax-for 该函数将函数应用于集合中的每个对象。语法为: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-for symbol collection [expressions] ...) 与函数一样,返回在循环中计算的最后一个表达式的结果。请注意,在循环访问集合时修改集合(即添加或删除成员)可能会导致错误。foreachvlax-forfor 下面的示例定义一个函数,该函数用于显示活动图形中每个对象的颜色统计信息: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)
)
此函数列出图形中的每种颜色以及找到该颜色的对象数。 检索集合中的成员对象该方法从集合中检索成员对象。该属性显示集合中的项数。使用方法和属性,可以单独处理集合中的每个对象。例如,您可以查看模型空间中的每个对象,确定对象的类型,并仅处理您感兴趣的对象类型。以下代码打印模型空间中每个圆弧对象的起始角度:ItemCountItemCount (setq index 0)
(repeat (vla-get-count mspace)
(if (= "AcDbArc" (vla-get-objectname (vla-item mspace index)))
(progn
(princ "\nThe start angle of the arc is ")
(princ (vla-get-startangle (vla-item mspace index)))
)
)
(setq index (+ index 1))
)
请注意,这也适用于组和选择集。ItemCount |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-10-29 14:17
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.