Hide Table of Contents

Traverse FeatureManager Design Tree Example (VBA)

This example shows how to traverse a FeatureManager design tree using ITreeControlItem.

'-------------------------------------
' Preconditions:
' 1. Open a part or assembly.
' 2. Open the Immediate window.
'
' Postconditions:
' 1. Traverses the FeatureManager design
'    tree.
' 2. Examine the Immediate window.
'-------------------------------------
Option Explicit
Dim traverseLevel As Long
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim myModel As SldWorks.ModelDoc2
    Dim featureMgr As SldWorks.FeatureManager
    Dim rootNode As SldWorks.TreeControlItem    
    Set swApp = Application.SldWorks
    Set myModel = swApp.ActiveDoc
    Set featureMgr = myModel.FeatureManager
    Set rootNode = featureMgr.GetFeatureTreeRootItem()
    If Not rootNode Is Nothing Then
        Debug.Print
        traverseLevel = 0
        traverse_node rootNode
    End If
    
End Sub
Private Sub traverse_node(node As SldWorks.TreeControlItem)
    Dim childNode As SldWorks.TreeControlItem
    Dim featureNode As SldWorks.Feature
    Dim componentNode As SldWorks.Component2
    Dim nodeObjectType As Long
    Dim nodeObject As Object
    Dim restOfString As String
    Dim indent As String
    Dim i As Long
    Dim displayNodeInfo As Boolean
    Dim compName As String
    Dim suppr As Long, supprString As String
    Dim vis As Long, visString As String
    Dim fixed As Boolean, fixedString As String
    Dim componentDoc As Object, docString As String
    Dim refConfigName As String    
    displayNodeInfo = False
    nodeObjectType = node.ObjectType
    Set nodeObject = node.Object
    Select Case nodeObjectType
    Case SwConst.swTreeControlItemType_e.swFeatureManagerItem_Feature:
        displayNodeInfo = True
        If Not nodeObject Is Nothing Then
            Set featureNode = nodeObject
            restOfString = "[FEATURE: " & featureNode.Name & "]"
        Else
            restOfString = "[FEATURE: object null?]"
        End If
    Case SwConst.swTreeControlItemType_e.swFeatureManagerItem_Component:
        displayNodeInfo = True
        If Not nodeObject Is Nothing Then
            Set componentNode = nodeObject
            compName = componentNode.Name2
            If (compName = "") Then
                compName = "?"
            End If
            suppr = componentNode.GetSuppression()
            Select Case (suppr)
            Case SwConst.swComponentSuppressionState_e.swComponentFullyResolved
                supprString = "Resolved"
            Case SwConst.swComponentSuppressionState_e.swComponentLightweight
                supprString = "Lightweight"
            Case SwConst.swComponentSuppressionState_e.swComponentSuppressed
                supprString = "Suppressed"
            End Select
            vis = componentNode.Visible            
            Select Case (vis)
            Case SwConst.swComponentVisibilityState_e.swComponentHidden
                visString = "Hidden"
            Case SwConst.swComponentVisibilityState_e.swComponentVisible
                visString = "Visible"
            End Select
            fixed = componentNode.IsFixed            
            If fixed = 0 Then
                fixedString = "Floating"
            Else
                fixedString = "Fixed"
            End If            
            Set componentDoc = componentNode.GetModelDoc
            If componentDoc Is Nothing Then
                docString = "Not loaded"
            Else
                docString = "Loaded"
            End If
            refConfigName = componentNode.ReferencedConfiguration
            If (refConfigName = "") Then
                refConfigName = "?"
            End If
            restOfString = "[COMPONENT: " & compName & " " & docString & " " & supprString & " " & visString & " " & refConfigName & "]"
        Else
            restOfString = "[COMPONENT: object null?]"
        End If
    Case Else:
        displayNodeInfo = True
        If Not nodeObject Is Nothing Then
            restOfString = "[object type not handled]"
        Else
            restOfString = "[object null?]"
        End If
    End Select
    For i = 1 To traverseLevel
        indent = indent & "  "
    Next i
    If (displayNodeInfo) Then
        Debug.Print indent & node.Text & " : " & restOfString
    End If
    traverseLevel = traverseLevel + 1
    Set childNode = node.GetFirstChild()
    While Not childNode Is Nothing
        traverse_node childNode
        Set childNode = childNode.GetNext
    Wend
    traverseLevel = traverseLevel - 1
End Sub


Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Traverse FeatureManager Design Tree Example (VBA)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:

x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2017 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.