集合用于对相同或相似类型的对象进行分组。 集合的概念是在关于了解 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, 2024-12-15 14:36
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.