Traverse Assembly at Component and Feature Levels Using Recursion Example
(VB.NET)
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 On
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports System
Imports System.Diagnostics
Imports System.Diagnostics.Stopwatch
Partial Class SolidWorksMacro
Sub
TraverseFeatures(ByVal swFeat As Feature, ByVal nLevel As Long)
Dim
swSubFeat As 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.GetTypeName2 + "]")
swSubFeat
= swFeat.GetFirstSubFeature
If
Not swSubFeat Is Nothing Then
Call
TraverseFeatures(swSubFeat, nLevel + 1)
End
If
If
nLevel = 1 Then
swFeat
= swFeat.GetNextFeature
Else
swFeat
= swFeat.GetNextSubFeature()
End
If
End
While
End
Sub
Sub
TraverseComponentFeatures(ByVal swComp As Component2, ByVal nLevel As
Long)
Dim
swFeat As Feature
swFeat
= swComp.FirstFeature
TraverseFeatures(swFeat,
nLevel)
End
Sub
Sub
TraverseComponent(ByVal swComp As Component2, ByVal nLevel As Long)
Dim
vChildComp As Object
Dim
swChildComp As Component2
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)
swChildComp
= vChildComp(i)
Debug.Print(sPadStr
& "+" & swChildComp.Name2
& " <" & swChildComp.ReferencedConfiguration
& ">")
TraverseComponentFeatures(swChildComp,
nLevel)
TraverseComponent(swChildComp,
nLevel + 1)
Next
i
End
Sub
Sub
TraverseModelFeatures(ByVal swModel As ModelDoc2, ByVal nLevel As Long)
Dim
swFeat As Feature
swFeat
= swModel.FirstFeature
TraverseFeatures(swFeat,
nLevel)
End
Sub
Public
Sub main()
Dim
swModel As ModelDoc2
Dim
swConfMgr As ConfigurationManager
Dim
swConf As Configuration
Dim
swRootComp As Component2
swApp
= CreateObject("SldWorks.Application")
swModel
= swApp.ActiveDoc
swConfMgr
= swModel.ConfigurationManager
swConf
= swConfMgr.ActiveConfiguration
swRootComp
= swConf.GetRootComponent3(true)
Dim
myStopwatch As New System.Diagnostics.Stopwatch
myStopwatch.Start()
Debug.Print("File
= " & swModel.GetPathName)
TraverseModelFeatures(swModel,
1)
If
swModel.GetType = swDocumentTypes_e.swDocASSEMBLY Then
TraverseComponent(swRootComp,
1)
End
If
myStopwatch.Stop()
Dim
myTimeSpan As TimeSpan
myTimeSpan
= myStopwatch.Elapsed
Debug.Print("Time
= " & myTimeSpan.TotalSeconds & " sec")
End
Sub
'''
<summary>
'''
The SldWorks swApp variable is pre-assigned for you.
'''
</summary>
Public
swApp As SldWorks
End Class