明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2486|回复: 6

[原创]遍历图形,用不重复数组技术,找出图形中有多少类型实体。

  [复制链接]
发表于 2008-3-31 15:03 | 显示全部楼层 |阅读模式
遍历图形中共有 56 (n)个实体类型
不重复排序后,图形中有  6 种类型    实体
分别是
1            AcDbRotatedDimension
2            AcDbMText
3            AcDbLine
4            AcDbZombieEntity
5            AcDbRadialDimension
6            AcDbArc

程序如下
  1. Sub ls()
  2.   Dim Ent As AcadEntity
  3.   Dim SelectEntityArray() As String, ReturnEntityArray() As Variant
  4.   ReDim SelectEntityArray(ThisDrawing.ModelSpace.Count - 1) As String
  5.   ii = 0
  6.   For ii = 0 To ThisDrawing.ModelSpace.Count - 1
  7.     SelectEntityArray(ii) = ThisDrawing.ModelSpace.Item(ii).ObjectName
  8.   Next ii
  9.   Debug.Print TypeName(SelectEntityArray)
  10.   ReturnEntityArray = NoRepeatArray(SelectEntityArray)
  11.   
  12.   Debug.Print "图形中共有", ThisDrawing.ModelSpace.Count, "个实体类型"
  13.   Debug.Print "不重复排序后,图形中有", UBound(ReturnEntityArray), "实体类型"
  14.   'Debug.Print "1222222222   ", UBound(NoRepeatArray(SelectEntityArray))
  15.   Debug.Print
  16.   For ii = 1 To UBound(ReturnEntityArray)
  17.     Debug.Print ii, ReturnEntityArray(ii)
  18.   Next ii
  19. End Sub
  20. Function NoRepeatArray(xm) 'As Variant()
  21.     Dim Arr, Temp() As String '声明变量
  22.     Dim s%, r% '声明单值变量
  23.     On Error Resume Next '启动一个错误处理程序
  24.      
  25.     r = 0 '初值
  26.     s = UBound(xm) '最大下标
  27.     ReDim Arr(s - 1)
  28.     For I = 0 To s '循环
  29.         Temp = Filter(Arr, xm(I)) '搜索数组
  30.         If UBound(Temp) = -1 Then '如果未找到
  31.             r = r + 1 '序号,自增1
  32.             ReDim Preserve Arr(1 To r)  '定义动态数组大小
  33.             Arr(r) = xm(I) '把姓名复制到数组Arr()中。
  34.         End If
  35.     Next
  36.     NoRepeatArray = Arr
  37.    
  38. End Function
----------------------
Sub ls()
  Dim Ent As AcadEntity
  Dim SelectEntityArray() As String, ReturnEntityArray() As Variant
  ReDim SelectEntityArray(ThisDrawing.ModelSpace.Count - 1) As String
  ii = 0
  For ii = 0 To ThisDrawing.ModelSpace.Count - 1
    SelectEntityArray(ii) = ThisDrawing.ModelSpace.Item(ii).ObjectName
  Next ii
  Debug.Print TypeName(SelectEntityArray)
  ReturnEntityArray = NoRepeatArray(SelectEntityArray)
  
  Debug.Print "图形中共有", ThisDrawing.ModelSpace.Count, "个实体类型"
  Debug.Print "不重复排序后,图形中有", UBound(ReturnEntityArray), "实体类型"
  'Debug.Print "1222222222   ", UBound(NoRepeatArray(SelectEntityArray))
  Debug.Print
  For ii = 1 To UBound(ReturnEntityArray)
    Debug.Print ii, ReturnEntityArray(ii)
  Next ii
End Sub
Function NoRepeatArray(xm) 'As Variant()
    Dim Arr, Temp() As String '声明变量
    Dim s%, r% '声明单值变量
    On Error Resume Next '启动一个错误处理程序
     
    r = 0 '初值
    s = UBound(xm) '最大下标
    ReDim Arr(s - 1)
    For I = 0 To s '循环
        Temp = Filter(Arr, xm(I)) '搜索数组
        If UBound(Temp) = -1 Then '如果未找到
            r = r + 1 '序号,自增1
            ReDim Preserve Arr(1 To r)  '定义动态数组大小
            Arr(r) = xm(I) '把姓名复制到数组Arr()中。
        End If
    Next
    NoRepeatArray = Arr
   
End Function

发表于 2018-4-10 08:39 | 显示全部楼层
非常好,感谢您的分享!!!
发表于 2018-5-6 10:53 | 显示全部楼层
谢谢版主分享不重复数组
发表于 2018-5-10 20:52 | 显示全部楼层
谢谢版主分享
发表于 2018-6-13 14:02 | 显示全部楼层
很有帮助。
能否把所有的对象,数量都做出来?
多谢谢谢谢谢谢谢!!!!!!
发表于 2018-8-17 17:50 | 显示全部楼层
我想问一下,去重为什么不用字典技术,而且还可以计数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 11:09 , Processed in 0.267195 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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