明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1464|回复: 5

实体不重复排序

[复制链接]
发表于 2007-12-18 16:38:00 | 显示全部楼层 |阅读模式
  1. Sub ls()
  2.   Dim xm1(), abc(), Gggg()
  3.   Dim Ent As AcadEntity
  4.   Dim AllEntityArray, AllEntityCount As Integer
  5.   AllEntityCount = ThisDrawing.ModelSpace.Count
  6.   ReDim AllEntityArray(AllEntityCount - 1)
  7.   For ii = 0 To AllEntityCount - 1
  8.     With ThisDrawing.ModelSpace.Item(ii)
  9.       AllEntityArray(ii) = .ObjectName
  10.     End With
  11.   Next ii
  12.   abc = NoRepeatArray(AllEntityArray) '不重复数组处理
  13.   Gggg = Bubble_Sort(abc)
  14.   For ii = 1 To UBound(Gggg) - 1
  15.     Debug.Print Gggg(ii)
  16.   Next ii
  17.   Debug.Print
  18. End Sub
  19. Function Bubble_Sort(Ary)
  20.    Dim aryUBound, i, j
  21.    aryUBound = UBound(Ary)
  22.    For i = 1 To aryUBound
  23.      For j = i + 1 To aryUBound
  24.        If Ary(i) > Ary(j) Then
  25.          Swap Ary(i), Ary(j)
  26.        End If
  27.      Next
  28.    Next
  29.    Bubble_Sort = Ary
  30. End Function
  31. Function Swap(a, b)
  32.    Dim tmp
  33.    tmp = a
  34.    a = b
  35.    b = tmp
  36. End Function
  37. Function NoRepeatArray(xm)
  38.     Dim Arr(), Temp() As String '声明变量
  39.     Dim s%, r% '声明单值变量
  40.     On Error Resume Next '启动一个错误处理程序
  41.    
  42.     r = 0 '初值
  43.     s = UBound(xm) '最大下标
  44.     For i = 0 To s '循环
  45.         Temp = Filter(Arr, xm(i)) '搜索数组
  46.         If UBound(Temp) = -1 Then '如果未找到
  47.             r = r + 1 '序号,自增1
  48.             ReDim Preserve Arr(1 To r) '定义动态数组大小
  49.             Arr(r) = xm(i) '把姓名复制到数组Arr()中。
  50.         End If
  51.     Next
  52.     NoRepeatArray = Arr
  53. End Function

发表于 2007-12-18 18:19:00 | 显示全部楼层
这好象只是名称排序,而不是位置排序。
 楼主| 发表于 2007-12-18 21:11:00 | 显示全部楼层
mccad发表于2007-12-18 18:19:00这好象只是名称排序,而不是位置排序。

数千个实体数据经过归纳合并数据处理后,得出以下结果。

AcDbHatch
AcDbLine
AcDbMText
AcDbPolyline
AcDbSolid

读上述实体属性数据,传送数据到数据库中,进行后续处理。


 楼主| 发表于 2007-12-19 11:12:00 | 显示全部楼层

Function xlApp() As Object

'  Dim xlApp As Object    ' This Line ,Not set Excel , run Excel
     'Dim xlsheet As Object
    
     ' 发生错误时跳到下一个语句继续执行
     On Error Resume Next
     ' 连接Excel应用程序
     Set xlApp = GetObject(, "Excel.Application")
    
     If Err.Number <> 0 Then
         Set xlApp = CreateObject("Excel.Application")
         xlApp.Visible = True
         xlApp.Workbooks.Add
     End If
     ' 返回当前活动的工作表
End Function

Sub labc()
  Dim xlSheet
  Set ArcXlsheet = xlApp.sheets(1)
  ArcXlsheet.Name = "Arc"
  Set CircleXlSheet = xlApp.sheets(2)
  CircleXlSheet.Name = "Circle"
  Set PolylineXlSheet = xlApp.sheets(3)
  PolylineXlSheet.Name = "Polyline"
  Set LineXlSheet = xlApp.sheets.Add
  LineXlSheet.Name = "Line"
  Set MTextXlSheet = xlApp.sheets.Add
  MTextXlSheet.Name = "MText"
  Set TextXlSheet = xlApp.sheets.Add
  TextXlSheet.Name = "Text"
' Dim Set
  Dim DbArc As AcadArc, DbCircle As AcadCircle
  Dim DbDiametricDimension As AcadDimDiametric, DbLeader As AcadLeader
  Dim DbLine As AcadLine, DbMText As AcadMText
  Dim DbPolyline As AcadPolyline, DbRotatedDimension As AcadDimRotated
  Dim DbSolid As AcadSolid, Ent As AcadEntity
  iiArc = 1
  For Each Ent In ThisDrawing.ModelSpace
    Select Case Ent.ObjectName
      Case "AcDbArc"
       Set DbArc = Ent
       ArcXlsheet.Cells(iiArc, 1) = DbArc.Center(0): ArcXlsheet.Cells(iiArc, 2) = DbArc.Center(1)
       iiArc = iiArc + 1
    End Select
  Next Ent
  ArcXlsheet.Select
End Sub

发表于 2008-1-3 17:40:00 | 显示全部楼层
我有桩排序 呵呵。
发表于 2008-1-10 21:35:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 10:24 , Processed in 0.172383 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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