乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 151|回复: 5

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

[复制链接]

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-3-31 15:03:00 | 显示全部楼层 |阅读模式
遍历图形中共有 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
回复

使用道具 举报

16

主题

129

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
196
发表于 2018-4-10 08:39:00 | 显示全部楼层
非常好,感谢您的分享!!!
回复

使用道具 举报

1

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
23
发表于 2018-5-6 10:53:00 | 显示全部楼层
谢谢版主分享不重复数组
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2018-5-10 20:52:00 | 显示全部楼层
谢谢版主分享
回复

使用道具 举报

0

主题

15

帖子

3

银币

初来乍到

Rank: 1

铜币
15
发表于 2018-6-13 14:02:00 | 显示全部楼层
很有帮助。
能否把所有的对象,数量都做出来?
多谢谢谢谢谢谢谢!!!!!!
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2018-8-17 17:50:00 | 显示全部楼层
我想问一下,去重为什么不用字典技术,而且还可以计数
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 03:14 , Processed in 0.382059 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表