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

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

当你发现的时候,你告诉我,m'凯
前一段时间,我试图做一些类似的事情,但我放弃了,因为我做不到;t找出嵌套块循环 换句话说,您对顶级外部参照的深入程度如何?

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

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

Maverick® 发表于 2009-2-17 15:23:58

如果我没记错的话,我遍历了块集合,当我找到外部参照时,我就遍历了外部参照#039;当我看到一个外部参照时,我会把它吐到即时窗口中 再也没有比这更远的了 

Matt__W 发表于 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


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

Matt__W 发表于 2009-2-18 10:10:48

再一次,鲍勃,你这个男人 这非常有效。
页: [1]
查看完整版本: 计算dwg中的外部参照数