计算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 ***** 当你发现的时候,告诉我,好吗?
不久前我试图做类似的事情,但因为我无法解决嵌套块循环的问题而放弃了。换句话说,您对顶级外部参照了解多少? 我知道我只想深入一层,只想为转换打下基础。我不知道从哪里开始。马特,你是在收集积木,还是抓住积木逐个挖掘
这是一个dwg文件,应该可以显示我正在处理的内容。顺便说一句,任何想测试我的3d变电站工具PM me的电力公司人员。这是一个使用USCO 138kV Vee开关的dwg 如果我没记错的话,我浏览了块集合,当我找到一个外部参照时,我又浏览了外部参照的实体,当我来到一个外部参照时,我把它吐到直接的窗口。 从来没有比这更远的地方了。 扔掉你不需要的东西。
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
Phhhhhht!好像我们不知道一样。
他在抱怨什么? 再一次,鲍勃·尤达曼! 这很完美。
页:
[1]