AutoCAD 对象模型中的所有对象都分组到集合中。 注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。
例如,“块”集合由 AutoCAD 图形中的所有块组成,而 ModelSpace 集合由图形模型空间中的所有图形对象(圆、线、折线等)组成。 下表列出了属于 AutoCAD 对象模型的集合:
从集合中检索成员该方法用于从集合中检索成员对象,而该属性返回集合中的项数。使用方法和属性,可以单独处理集合中的每个对象。ItemCountItemCount 例如,您可以查看模型空间中的每个对象,确定对象的类型,并仅处理您感兴趣的对象类型。以下代码打印模型空间中每个对象的起始角度: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-dump-object
将多个表达式应用于集合中的所有项可用于计算集合中每个对象的一系列函数。此功能比使用 .与函数一样,返回在 for 循环中计算的最后一个表达式的结果。vlax-forvlax-map-collectionforeachvlax-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)
)
此函数列出图形中的每种颜色以及找到该颜色的对象数。 相关概念 | ||||||||||||||||||||||||
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-10-29 14:12
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.