乐筑天下

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

计算dwg中的外部参照数

[复制链接]

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-2-17 14:52:14 | 显示全部楼层 |阅读模式
所以我要做的是计算我的图形中有多少外部参照 这部分很简单,这是代码
  1. Public Sub PMS_Xref_Extract()
  2.       Dim ss As AcadSelectionSet, intType(0 To 1) As Integer, varData(0 To 1) As Variant
  3.       Dim objBlkXref As AcadExternalReference, strAssemblyName As String
  4.             
  5.       Erase SN
  6.       Erase CNT
  7.       ACADSelSet ss, "AssemblyCount"
  8.       intType(0) = 0: varData(0) = "INSERT"
  9.       intType(1) = 2: varData(1) = "SC-*"
  10.       ss.Select Mode:=acSelectionSetAll, filtertype:=intType, filterdata:=varData
  11.       
  12.       For Each objBlkXref In ss
  13.             If objBlkXref.Layer = "3D-CONSTRUCTION" Then
  14.                   strAssemblyName = objBlkXref.EffectiveName
  15.                   IncrimentCount strAssemblyName
  16.             End If
  17.       Next
  18.       Dim fso, fl, fln, s
  19.       Dim j As Integer
  20.       fln = "M:\PARTS-LIST\PMS.txt"
  21.       Set fso = CreateObject("Scripting.FileSystemObject")
  22.       If fso.FileExists(fln) Then
  23.             fso.DeleteFile fln
  24.       End If
  25.       Set fl = fso.CreateTextFile(fln)
  26.       For j = 1 To UBound(SN)
  27.             s = CNT(j) & vbTab & SN(j)
  28.             fl.WriteLine s
  29.       Next
  30.       fl.Close
  31. End Sub

问题是我需要在找到的第一个外部参照中计算外部参照的数量 我认为这应该可以做到,但我不知道 我知道这与嵌套块有关,但除此之外我什么都不知道&nbsp
因此,我有一个名为SC-04589-1211-162.dwg的图纸,这是开关的长名称 在该dwg中是另一个外部参照SC-09020.dwg,我已经使用了两次 我希望在运行上述代码时,返回(1)SC-04589-1211-162.dwg和(2)SC-09020.dwg的实例
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-2-17 14:54:44 | 显示全部楼层
当你发现的时候,你告诉我,m'凯
前一段时间,我试图做一些类似的事情,但我放弃了,因为我做不到;t找出嵌套块循环 换句话说,您对顶级外部参照的深入程度如何?
回复

使用道具 举报

17

主题

162

帖子

7

银币

后起之秀

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

铜币
234
发表于 2009-2-17 15:09:10 | 显示全部楼层
我知道我只想深入一层,只是为了为转换打下基础 我不知道从哪里开始 马特,你是浏览了积木收藏,还是抓起积木单独翻阅
这是一个dwg文件,应该显示我在使用什么 顺便说一句,任何想要测试我的3d Substation工具的电力公司人员都可以PM我;这是一张使用USCO 138kV V形开关的图纸
回复

使用道具 举报

17

主题

162

帖子

7

银币

后起之秀

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

铜币
234
发表于 2009-2-17 15:23:58 | 显示全部楼层
如果我没记错的话,我遍历了块集合,当我找到外部参照时,我就遍历了外部参照#039;当我看到一个外部参照时,我会把它吐到即时窗口中 再也没有比这更远的了 
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-2-17 15:59:56 | 显示全部楼层
扔掉你不喜欢的东西;不需要
  1. Option Explicit
  2. Private colXrefs As New Collection
  3. Private Sub Class_Initialize()
  4.   'When the class is created
  5.   Call LoadXrefs
  6. End Sub
  7. Private Sub LoadXrefs()
  8.   Dim objSelSets As AcadSelectionSets
  9.   Dim objSelSet As AcadSelectionSet
  10.   Dim intType(0) As Integer
  11.   Dim varData(0) As Variant
  12.   Dim strPaths() As String
  13.   Dim intCnt As Integer
  14.   Dim objXref As AcadExternalReference
  15.   Dim objEnt As AcadEntity
  16.   Dim objBlk As AcadBlock
  17.   Dim objBlks As AcadBlocks
  18.   Dim intDuplicate As Integer
  19.   Dim objDuplicate As AcadEntity
  20.   Dim boolDuplicate As Boolean
  21.   
  22.   Set objBlks = ThisDrawing.Blocks
  23.   Set objSelSets = ThisDrawing.SelectionSets
  24.   For Each objSelSet In objSelSets
  25.     If objSelSet.Name = "GetXrefPaths" Then
  26.       objSelSets.Item("GetXrefPaths").Delete
  27.       Exit For
  28.     End If
  29.   Next
  30.   Set objSelSet = objSelSets.Add("GetXrefPaths")
  31.   intType(0) = 0: varData(0) = "INSERT"
  32.   objSelSet.Select acSelectionSetAll, , , intType, varData
  33.   For Each objEnt In objSelSet
  34.     Set objBlk = objBlks(objEnt.Name)
  35.     If objBlk.IsXRef Then
  36.       boolDuplicate = False
  37.       For intDuplicate = 1 To colXrefs.Count
  38.         Set objDuplicate = colXrefs.Item(intDuplicate)
  39.         If objDuplicate.Name = objEnt.Name Then
  40.           boolDuplicate = True
  41.           Exit For
  42.         End If
  43.       Next intDuplicate
  44.       If boolDuplicate = False Then
  45.         colXrefs.Add objEnt '.Path
  46.         GetNested objBlk
  47.       End If
  48.     End If
  49.   Next objEnt
  50. End Sub
  51. Private Function GetNested(objBlk As AcadBlock) As Integer
  52.   Dim objXref As AcadExternalReference
  53.   Dim objBlkRef As AcadBlockReference
  54.   Dim objEnt As AcadEntity
  55.   Dim objNext As AcadBlock
  56.     For Each objEnt In objBlk
  57.       If TypeOf objEnt Is AcadBlockReference Then
  58.         Set objBlkRef = objEnt
  59.         Set objNext = ThisDrawing.Blocks(objBlkRef.Name)
  60.         If objNext.IsXRef Then
  61.           Set objXref = objEnt
  62.           colXrefs.Add objXref
  63.           GetNested objNext
  64.         End If
  65.       End If
  66.     Next
  67.   GetNested = colXrefs.Count
  68. End Function
  69. 'Returns the stored Xref at Index
  70. Public Property Get Item(Index As Integer) As AcadExternalReference
  71.   Set Item = colXrefs(Index)
  72. End Property
  73. 'How many in the drawing (includes nested)
  74. Public Property Get Count() As Integer
  75.   Count = colXrefs.Count
  76. End Property
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-2-17 16:03:44 | 显示全部楼层

phhhht 就像我们没有'我不知道
他在抱怨什么?
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-2-18 10:10:48 | 显示全部楼层
再一次,鲍勃,你这个男人 这非常有效。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-8 06:07 , Processed in 2.975121 second(s), 66 queries .

© 2020-2025 乐筑天下

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