Traversing Assembly at Component and Feature Levels Example (VBA)
This example shows how to traverse an assembly at the component and
feature level. It is assumed that you have an active assembly.
'---------------------------------------
Option Explicit
Sub TraverseFeatureFeatures _
( _
swFeat
As SldWorks.feature, _
nLevel
As Long _
)
Dim
swSubFeat As
SldWorks.feature
Dim
swSubSubFeat As
SldWorks.feature
Dim
swSubSubSubFeat As
SldWorks.feature
Dim
sPadStr As
String
Dim
i As
Long
For
i = 0 To nLevel
sPadStr
= sPadStr + " "
Next
i
While
Not swFeat Is Nothing
Debug.Print
sPadStr + swFeat.Name + "
[" + swFeat.GetTypeName + "]"
Set
swSubFeat = swFeat.GetFirstSubFeature
While
Not swSubFeat Is Nothing
Debug.Print
sPadStr + " "
+ swSubFeat.Name + " ["
+ swSubFeat.GetTypeName + "]"
Set
swSubSubFeat = swSubFeat.GetFirstSubFeature
While
Not swSubSubFeat Is Nothing
Debug.Print
sPadStr + " "
+ swSubSubFeat.Name + " ["
+ swSubSubFeat.GetTypeName + "]"
Set
swSubSubSubFeat = swSubFeat.GetFirstSubFeature
While
Not swSubSubSubFeat Is Nothing
Debug.Print
sPadStr + " "
+ swSubSubSubFeat.Name + " [" + swSubSubSubFeat.GetTypeName
+ "]"
Set
swSubSubSubFeat = swSubSubSubFeat.GetNextSubFeature()
Wend
Set
swSubSubFeat = swSubSubFeat.GetNextSubFeature()
Wend
Set
swSubFeat = swSubFeat.GetNextSubFeature()
Wend
Set
swFeat = swFeat.GetNextFeature
Wend
End Sub
Sub TraverseComponentFeatures _
( _
swComp
As SldWorks.Component2, _
nLevel
As Long _
)
Dim
swFeat As
SldWorks.feature
Set
swFeat = swComp.FirstFeature
TraverseFeatureFeatures
swFeat, nLevel
End Sub
Sub TraverseComponent _
( _
swComp
As SldWorks.Component2, _
nLevel
As Long _
)
Dim
vChildComp As
Variant
Dim
swChildComp As
SldWorks.Component2
Dim
swCompConfig As
SldWorks.configuration
Dim
sPadStr As
String
Dim
i As
Long
For
i = 0 To nLevel - 1
sPadStr
= sPadStr + " "
Next
i
vChildComp
= swComp.GetChildren
For
i = 0 To UBound(vChildComp)
Set
swChildComp = vChildComp(i)
Debug.Print
sPadStr & "+" & swChildComp.Name2 & " <"
& swChildComp.ReferencedConfiguration & ">"
TraverseComponentFeatures
swChildComp, nLevel
TraverseComponent
swChildComp, nLevel + 1
Next
i
End Sub
Sub TraverseModelFeatures _
( _
swModel
As SldWorks.ModelDoc2, _
nLevel
As Long _
)
Dim
swFeat As
SldWorks.feature
Set
swFeat = swModel.FirstFeature
TraverseFeatureFeatures
swFeat, nLevel
End Sub
Sub main()
Dim
swApp As
SldWorks.SldWorks
Dim
swModel As
SldWorks.ModelDoc2
Dim
swAssy As
SldWorks.AssemblyDoc
Dim
swConf As
SldWorks.configuration
Dim
swRootComp As
SldWorks.Component2
Dim
nStart As
Single
Dim
bRet As
Boolean
Set
swApp = CreateObject("SldWorks.Application")
Set
swModel = swApp.ActiveDoc
Set
swConf = swModel.GetActiveConfiguration
Set
swRootComp = swConf.GetRootComponent3(true)
nStart
= Timer
Debug.Print
"File = " & swModel.GetPathName
TraverseModelFeatures
swModel, 1
TraverseComponent
swRootComp, 1
Debug.Print
""
Debug.Print
"Time = " & Timer - nStart & " s"
End Sub
'---------------------------------------