乐筑天下

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

问题是我需要计算第一个找到的外部参照内部的外部参照。 我认为这应该能够做到,但我不知道。 我知道它与嵌套块有关,但除此之外我不知道任何事情。
所以我有一个名为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 | 显示全部楼层
当你发现的时候,告诉我,好吗?
不久前我试图做类似的事情,但因为我无法解决嵌套块循环的问题而放弃了。换句话说,您对顶级外部参照了解多少?
回复

使用道具 举报

17

主题

162

帖子

7

银币

后起之秀

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

铜币
234
发表于 2009-2-17 15:09:10 | 显示全部楼层
我知道我只想深入一层,只想为转换打下基础。我不知道从哪里开始。马特,你是在收集积木,还是抓住积木逐个挖掘
这是一个dwg文件,应该可以显示我正在处理的内容。顺便说一句,任何想测试我的3d变电站工具PM me的电力公司人员。这是一个使用USCO 138kV Vee开关的dwg
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-2-17 15:23:58 | 显示全部楼层
如果我没记错的话,我浏览了块集合,当我找到一个外部参照时,我又浏览了外部参照的实体,当我来到一个外部参照时,我把它吐到直接的窗口。 从来没有比这更远的地方了。
回复

使用道具 举报

17

主题

162

帖子

7

银币

后起之秀

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

铜币
234
发表于 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 | 显示全部楼层

Phhhhhht!好像我们不知道一样。
他在抱怨什么?
回复

使用道具 举报

17

主题

162

帖子

7

银币

后起之秀

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

铜币
234
发表于 2009-2-18 10:10:48 | 显示全部楼层
再一次,鲍勃·尤达曼! 这很完美。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-8 06:04 , Processed in 2.656154 second(s), 67 queries .

© 2020-2025 乐筑天下

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