计算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的实例
当你发现的时候,你告诉我,m';凯
前一段时间,我试图做一些类似的事情,但我放弃了,因为我做不到;t找出嵌套块循环 ;换句话说,您对顶级外部参照的深入程度如何? 我知道我只想深入一层,只是为了为转换打下基础 ;我不知道从哪里开始 ;马特,你是浏览了积木收藏,还是抓起积木单独翻阅
这是一个dwg文件,应该显示我在使用什么 ;顺便说一句,任何想要测试我的3d Substation工具的电力公司人员都可以PM我;这是一张使用USCO 138kV V形开关的图纸 如果我没记错的话,我遍历了块集合,当我找到外部参照时,我就遍历了外部参照#039;当我看到一个外部参照时,我会把它吐到即时窗口中 ;再也没有比这更远的了 ; 扔掉你不喜欢的东西;不需要
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
phhhht ;就像我们没有';我不知道
他在抱怨什么? 再一次,鲍勃,你这个男人 ;这非常有效。
页:
[1]