Traverse Assembly at Component and Feature Levels Using Recursion Example
(VBA)
This example shows how to traverse an assembly at the component and
feature levels using recursion.
'--------------------------------------------------------------------------
' Preconditions: Open:
' <SolidWorks_install_dir>\samples\tutorial\PDMWorks\speaker.sldasm
' or any assembly document
'
' Postconditions:
' 1. Output of the assembly traversal is
shown in the Immediate Window.
' 2. The
elapsed time to traverse the assembly is also shown
' in
the Immediate Window.
'---------------------------------------------------------------------------
Option Explicit
Sub TraverseFeatures(swFeat As SldWorks.Feature, nLevel
As Long)
Dim
swSubFeat As
SldWorks.Feature
Dim
sPadStr As
String
Dim
i As
Long
Dim
bReturnValue As
Boolean
For
i = 0 To nLevel
sPadStr
= sPadStr + " "
Next
i
While
Not swFeat Is Nothing
Debug.Print
sPadStr + swFeat.Name + "
[" + swFeat.GetTypeName2
+ "]"
Set
swSubFeat = swFeat.GetFirstSubFeature
If
Not swSubFeat Is Nothing Then
Call
TraverseFeatures(swSubFeat, nLevel + 1)
End
If
If
nLevel = 1 Then
Set
swFeat = swFeat.GetNextFeature
Else
Set
swFeat = swFeat.GetNextSubFeature()
End
If
Wend
End Sub
Sub TraverseComponentFeatures(swComp As SldWorks.Component2,
nLevel As Long)
Dim
swFeat As
SldWorks.Feature
Set
swFeat = swComp.FirstFeature
TraverseFeatures
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
TraverseFeatures
swFeat, nLevel
End Sub
Sub main()
Dim
swApp As
SldWorks.SldWorks
Dim
swModel As
SldWorks.ModelDoc2
Dim
swAssy As
SldWorks.AssemblyDoc
Dim
swConfMgr As
SldWorks.ConfigurationManager
Dim
swConf As
SldWorks.Configuration
Dim
swRootComp As
SldWorks.Component2
Dim
bRet As
Boolean
Dim
StartTime As
Double
Dim
FinishTime As
Double
Dim
TotalTime As
Double
Set
swApp = CreateObject("SldWorks.Application")
Set
swModel = swApp.ActiveDoc
Set
swConfMgr = swModel.ConfigurationManager
Set
swConf = swConfMgr.ActiveConfiguration
Set
swRootComp = swConf.GetRootComponent3(true)
StartTime
= Timer ' Start time
Debug.Print
"File = " & swModel.GetPathName
TraverseModelFeatures
swModel, 1
If
swModel.GetType = SwConst.swDocASSEMBLY Then
TraverseComponent
swRootComp, 1
End
If
FinishTime
= Timer ' End time
TotalTime
= FinishTime - StartTime ' Elapsed time
Debug.Print
("Time = " & TotalTime & " sec")
End Sub