明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1926|回复: 7

VBA能不能实现遍历指定图层内所有实体

[复制链接]
发表于 2018-3-2 07:58 | 显示全部楼层 |阅读模式
如题,能不能用类似如下格式遍历图层内所有实体?    Dim k, l As Integer
    Dim temp_entity As AcadEntity
    Dim Temp_Layer As AcadLayer
    k = 0
    l = 0
    For Each Temp_Layer In ThisDrawing.Layers
        Layer_Name(k) = Temp_Layer.Name
        For Each temp_entity In Temp_Layer  ‘此处报错
            l = l + 1
        Next
        MsgBox("该图层有"&Cstr(l)&“个实体”)
   Next


发表于 2018-3-4 11:24 | 显示全部楼层
  1. Private Sub SelectLots(ByVal Ssetname As String, ByVal strLayerName As String)
  2.    
  3.     Dim sSetObj As AcadSelectionSet, flag As Boolean
  4.     If ThisDrawing.GetVariable("cmdactive") Then ThisDrawing.SendCommand "(command)"
  5.    
  6.     For Each sSetObj In ThisDrawing.SelectionSets
  7.         
  8.         If sSetObj.Name = Ssetname Then
  9.             flag = True
  10.             Exit For
  11.         End If
  12.         
  13.     Next
  14.    
  15.     If flag Then sSetObj.Delete                                                 '创建集合,如集存在,则删除,新建
  16.     Set sSetObj = ThisDrawing.SelectionSets.Add(Ssetname)
  17.    
  18.     Dim gpCode(0)    As Integer
  19.    
  20.     Dim dataValue(0) As Variant
  21.    

  22.     gpCode(0) = 8
  23.     dataValue(0) = strLayerName                                                 ' 图层名
  24.    
  25.     Dim groupCode As Variant, dataCode As Variant
  26.    
  27.     groupCode = gpCode
  28.     dataCode = dataValue
  29.    
  30.     sSetObj.Select acSelectionSetAll, , , groupCode, dataCode
  31. End Sub

  32. Public Sub test()
  33.     Dim objSset As AcadSelectionSet
  34.     SelectLots "z1111", "0" '选0层的所有对象
  35.     Set objSset = ThisDrawing.SelectionSets("z1111")
  36.     If objSset.Count = 0 Then Exit Sub
  37.     Dim objEnt As AcadEntity
  38.     For Each objEnt In objSset
  39.         Debug.Print objEnt.ObjectName
  40.     Next objEnt

  41. End Sub
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-2 09:26 | 显示全部楼层
按图层选择,创建选择集,遍历。。。
发表于 2018-3-2 13:16 | 显示全部楼层
对象不是属于图层的,是属于document的。要实现这个效果可以遍历对象,然后看对象的图层是不是满足你需要的。
 楼主| 发表于 2018-3-4 11:08 | 显示全部楼层
mikewolf2k 发表于 2018-3-2 13:16
对象不是属于图层的,是属于document的。要实现这个效果可以遍历对象,然后看对象的图层是不是满足你需要的 ...

哦,谢谢了,这对对象很多的图会不会拖慢速度?

点评

选择集也快不到哪里去,内部也是要做这些工作的  发表于 2018-3-5 16:29
当然会很慢了,所以要先选择呀!  发表于 2018-3-4 11:14
发表于 2018-3-5 16:32 | 显示全部楼层
选择集处理不了块内图形对象,要处理全部,可以从块集合来遍历,或从模型空间开始,遇到参照再递归处理对应的块
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 15:16 , Processed in 0.157380 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表