Hide Table of Contents

Traverse FeatureManager Design Tree (VBA)

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




' Preconditions: Model document containing a part

                 or an assembly is open.


' Postconditions: None



Option Explicit

Dim traverseLevel As Integer

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


        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 Integer

    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 & "]"


            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"


                fixedString = "Fixed"

            End If

            Set componentDoc = componentNode.GetModelDoc

            If componentDoc Is Nothing Then

                docString = "NotLoaded"


                docString = "Loaded"

            End If

            refConfigName = componentNode.ReferencedConfiguration

            If (refConfigName = "") Then

                refConfigName = "???"

            End If


            restOfString = "[COMPONENT: " & compName & " " & docString & " " & supprString & " " & visString & " " & refConfigName & "]"


            restOfString = "[COMPONENT: object Null?!]"

        End If

    Case Else:

        displayNodeInfo = True

        If Not nodeObject Is Nothing Then

            restOfString = "[object type not handled]"


            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


    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

Subject:   Feedback on Help Topics
Page:   Traverse FeatureManager Design Tree (VBA)
*   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:


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

Web Help Content Version: API Help (English only) 2013 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.