明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1326|回复: 1

[讨论]如何提取到CAD数据的

[复制链接]
发表于 2008-5-18 12:55:00 | 显示全部楼层 |阅读模式

我用过的一个清单提取程序,在不打开DWG文件的情况下,对CAD的数据进行处理,进而读取文件明细栏里数据,并把数据保存为MDB格式.程序会自动判断DWG是否有明细栏,有的会把他列为装配件并提示出安装图(也就是要图发到现场给安装的人用的),我猜想是程序首先读取了文件里一些基本信息,比如图副,比例等,进而知道图签的位置高度,再确定是否有明细栏.当然也要读取图签里的数据,图号,图纸名称等等(生成图纸目录需要的).程序还会根据装配件的图号判断该图是否存在,存在就展开,不存在则出现错误提示.很想知道这个东西是怎么读取信息,请知道的指点下.先行谢谢了

发表于 2008-5-18 20:27:00 | 显示全部楼层
  1. Sub als()
  2.    Dim xm, xm1
  3.    Dim tt As AcadText, ll As AcadLine, Ent As AcadEntity
  4.    aii = 0
  5.    ReDim xm(1000) As Double, xm1(1000) As Long
  6.    For Each Ent In ThisDrawing.ModelSpace
  7.      Select Case Ent.ObjectName
  8.        Case "AcDbLine"
  9.          Set ll = Ent
  10.          xm(aii) = Round(ll.EndPoint(0), 3)
  11.          'Debug.Print xm(aii)
  12.          xm1(aii) = ll.EndPoint(1)
  13.          aii = aii + 1
  14.       End Select
  15.    Next Ent
  16.    ReDim Preserve xm(aii) As Double
  17.    bb = xx(xm)
  18.    bb = Bubble_Sort(bb)
  19.    ReDim abc(UBound(bb)) As Long
  20.    For ii = 0 To UBound(bb)
  21.      'abc(ii) = Val(bb(ii))
  22.      Debug.Print ii, bb(ii)
  23.    Next ii
  24.    
  25.    
  26.    
  27.    ReDim xm(0), xm1(0)
  28. End Sub
  29.      
  30. Function xx(xm)
  31.    Dim arr() As String, Temp() As String '声明变量
  32.    Dim s%, r% '声明单值变量
  33.      On Error Resume Next '启动一个错误处理程序
  34.      
  35.      r = 0 '初值
  36.      s = UBound(xm)  '最大下标
  37.      
  38.      For i = 0 To s '循环
  39.        Temp = Filter(arr, xm(i)) '搜索数组
  40.       
  41.        If UBound(Temp) = -1 Then '如果未找到
  42.          ReDim Preserve arr(0 To r)  '定义动态数组大小
  43.          arr(r) = xm(i) '把姓名复制到数组Arr()中。
  44.          r = r + 1 '序号,自增1
  45.        End If
  46.      Next
  47.      xx = arr
  48. End Function
  49. Function Bubble_Sort(Ary)
  50.    Dim aryUBound, i, j
  51.    aryUBound = UBound(Ary)
  52.    For ii = 0 To aryUBound
  53.      Ary(ii) = Val(Round(Ary(ii), 2))
  54.    Next ii
  55.    For i = 0 To aryUBound
  56.      For j = i + 1 To aryUBound
  57.        If Ary(i) < Ary(j) Then
  58.          Swap Ary(i), Ary(j)
  59.        End If
  60.      Next
  61.    Next
  62.    Bubble_Sort = Ary
  63. End Function
  64. Function Swap(a, b)
  65.    Dim tmp
  66.    tmp = a
  67.    a = b
  68.    b = tmp
  69. End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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