Matt__W 发表于 2009-2-17 14:52:14

计算dwg中的外部参照

因此,我试图做的是计算我的绘图中有多少个外部参照。 这部分很简单
这里是代码
Public Sub PMS_Xref_Extract()
      Dim ss As AcadSelectionSet, intType(0 To 1) As Integer, varData(0 To 1) As Variant
      Dim objBlkXref As AcadExternalReference, strAssemblyName As String
            
      Erase SN
      Erase CNT
      ACADSelSet ss, "AssemblyCount"
      intType(0) = 0: varData(0) = "INSERT"
      intType(1) = 2: varData(1) = "SC-*"
      ss.Select Mode:=acSelectionSetAll, filtertype:=intType, filterdata:=varData
      
      For Each objBlkXref In ss
            If objBlkXref.Layer = "3D-CONSTRUCTION" Then
                  strAssemblyName = objBlkXref.EffectiveName
                  IncrimentCount strAssemblyName
            End If
      Next
      Dim fso, fl, fln, s
      Dim j As Integer
      fln = "M:\PARTS-LIST\PMS.txt"
      Set fso = CreateObject("Scripting.FileSystemObject")
      If fso.FileExists(fln) Then
            fso.DeleteFile fln
      End If
      Set fl = fso.CreateTextFile(fln)
      For j = 1 To UBound(SN)
            s = CNT(j) & vbTab & SN(j)
            fl.WriteLine s
      Next
      fl.Close
End Sub
问题是我需要计算第一个找到的外部参照内部的外部参照。 我认为这应该能够做到,但我不知道。 我知道它与嵌套块有关,但除此之外我不知道任何事情。
所以我有一个名为SC-04589-1211-162.dwg的图纸,这是一个开关的长名称。 dwg内部是另一个外部参照SC-09020.dwg,我已经使用了两次。 我希望发生的事情是,当运行上述代码时,它返回(1)SC-04589-1211-162.dwg和(2)SC-09020的实例.dwg
**** Hidden Message *****

Matt__W 发表于 2009-2-17 14:54:44

当你发现的时候,告诉我,好吗?
不久前我试图做类似的事情,但因为我无法解决嵌套块循环的问题而放弃了。换句话说,您对顶级外部参照了解多少?

Maverick® 发表于 2009-2-17 15:09:10

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

Matt__W 发表于 2009-2-17 15:23:58

如果我没记错的话,我浏览了块集合,当我找到一个外部参照时,我又浏览了外部参照的实体,当我来到一个外部参照时,我把它吐到直接的窗口。 从来没有比这更远的地方了。

Maverick® 发表于 2009-2-17 15:59:56

扔掉你不需要的东西。
Option Explicit
Private colXrefs As New Collection
Private Sub Class_Initialize()
'When the class is created
Call LoadXrefs
End Sub
Private Sub LoadXrefs()
Dim objSelSets As AcadSelectionSets
Dim objSelSet As AcadSelectionSet
Dim intType(0) As Integer
Dim varData(0) As Variant
Dim strPaths() As String
Dim intCnt As Integer
Dim objXref As AcadExternalReference
Dim objEnt As AcadEntity
Dim objBlk As AcadBlock
Dim objBlks As AcadBlocks
Dim intDuplicate As Integer
Dim objDuplicate As AcadEntity
Dim boolDuplicate As Boolean

Set objBlks = ThisDrawing.Blocks
Set objSelSets = ThisDrawing.SelectionSets
For Each objSelSet In objSelSets
    If objSelSet.Name = "GetXrefPaths" Then
      objSelSets.Item("GetXrefPaths").Delete
      Exit For
    End If
Next
Set objSelSet = objSelSets.Add("GetXrefPaths")
intType(0) = 0: varData(0) = "INSERT"
objSelSet.Select acSelectionSetAll, , , intType, varData
For Each objEnt In objSelSet
    Set objBlk = objBlks(objEnt.Name)
    If objBlk.IsXRef Then
      boolDuplicate = False
      For intDuplicate = 1 To colXrefs.Count
      Set objDuplicate = colXrefs.Item(intDuplicate)
      If objDuplicate.Name = objEnt.Name Then
          boolDuplicate = True
          Exit For
      End If
      Next intDuplicate
      If boolDuplicate = False Then
      colXrefs.Add objEnt '.Path
      GetNested objBlk
      End If
    End If
Next objEnt
End Sub
Private Function GetNested(objBlk As AcadBlock) As Integer
Dim objXref As AcadExternalReference
Dim objBlkRef As AcadBlockReference
Dim objEnt As AcadEntity
Dim objNext As AcadBlock
    For Each objEnt In objBlk
      If TypeOf objEnt Is AcadBlockReference Then
      Set objBlkRef = objEnt
      Set objNext = ThisDrawing.Blocks(objBlkRef.Name)
      If objNext.IsXRef Then
          Set objXref = objEnt
          colXrefs.Add objXref
          GetNested objNext
      End If
      End If
    Next
GetNested = colXrefs.Count
End Function
'Returns the stored Xref at Index
Public Property Get Item(Index As Integer) As AcadExternalReference
Set Item = colXrefs(Index)
End Property
'How many in the drawing (includes nested)
Public Property Get Count() As Integer
Count = colXrefs.Count
End Property

Matt__W 发表于 2009-2-17 16:03:44


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

Maverick® 发表于 2009-2-18 10:10:48

再一次,鲍勃·尤达曼! 这很完美。
页: [1]
查看完整版本: 计算dwg中的外部参照