CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 文档中心

关于对象集合 (AutoLISP/ActiveX)

2023-1-8 01:12| 发布者: admin| 查看: 468| 评论: 0|来自: AutoCAD

摘要: AutoCAD 对象模型中的所有对象都分组在集合中。

AutoCAD 对象模型中的所有对象都分组到集合中。

注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。

例如,“块”集合由 AutoCAD 图形中的所有块组成,而 ModelSpace 集合由图形模型空间中的所有图形对象(圆、线、折线等)组成。

下表列出了属于 AutoCAD 对象模型的集合:

AutoCAD 集合对象

模型空间

纸空间

DimStyles 的

绘图配置

文件

PopMenus(流行菜单)

已注册应用程序

超链接

SelectionSets

文本样式

布局

工具栏

线型

UCS系统

材料

视口

菜单组

视图

从集合中检索成员

该方法用于从集合中检索成员对象,而该属性返回集合中的项数。使用方法和属性,可以单独处理集合中的每个对象。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)
)

此函数列出图形中的每种颜色以及找到该颜色的对象数。


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-12-15 14:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部