CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoLISP 开发指南

关于使用集合对象 (AutoLISP/ActiveX)

2023-1-6 01:13| 发布者: admin| 查看: 353| 评论: 0|来自: AutoCAD

摘要: 集合用于对相同或相似类型的对象进行分组。

集合用于对相同或相似类型的对象进行分组。

集合的概念在关于了解 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


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 13:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部