乐筑天下

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

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

[复制链接]

20

主题

151

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 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
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 17:29 , Processed in 0.962760 second(s), 67 queries .

© 2020-2025 乐筑天下

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