Welcome

Manage display states in SOLIDWORKS documents using SOLIDWORKS API

Edit ArticleEdit Article

This VBA macro demonstrates how to create new or edit existing display state in the active SOLIDWORKS document, change display state settings and apply to a file.

Option Compare Text

Const DISPLAY_STATE_NAME As String = "My Display State"

Dim swApp As SldWorks.SldWorks

Sub main()
        
    Set swApp = Application.SldWorks
        
    Dim swModel As SldWorks.ModelDoc2
    
    Set swModel = swApp.ActiveDoc
    
    Dim swConf As SldWorks.Configuration
    
    Set swConf = swModel.ConfigurationManager.ActiveConfiguration
    
    If Not Contains(swConf.GetDisplayStates(), DISPLAY_STATE_NAME) Then
        If False = swConf.CreateDisplayState(DISPLAY_STATE_NAME) Then
            Err.Raise vbError, "", "Failed to create display state"
        End If
    End If
    
    If False <> swConf.ApplyDisplayState(DISPLAY_STATE_NAME) Then
        
        Dim swSelMgr As SldWorks.SelectionMgr
        Set swSelMgr = swModel.SelectionManager
        
        Dim swFaces(0) As SldWorks.Face2
        Set swFaces(0) = swSelMgr.GetSelectedObject6(1, -1)
        
        Dim swDispStateSetts As SldWorks.DisplayStateSetting
        
        Set swDispStateSetts = swModel.Extension.GetDisplayStateSetting(swDisplayStateOpts_e.swSpecifyDisplayState)
        swDispStateSetts.Entities = swFaces
        swDispStateSetts.Option = swDisplayStateOpts_e.swSpecifyDisplayState
        
        Dim dispStateNames(0) As String
        dispStateNames(0) = DISPLAY_STATE_NAME
        swDispStateSetts.Names = dispStateNames
        
        swDispStateSetts.PartLevel = False
        
        Dim vAppearances As Variant
        
        vAppearances = swModel.Extension.DisplayStateSpecMaterialPropertyValues(swDispStateSetts)
        
        Dim swAppearanceSetts(0) As SldWorks.AppearanceSetting
        
        Set swAppearanceSetts(0) = vAppearances(0)
        
        swAppearanceSetts(0).Color = RGB(0, 255, 0)
        swAppearanceSetts(0).Diffuse = 1#
        swAppearanceSetts(0).Specular = 0.5
        swAppearanceSetts(0).SpecularColor = RGB(0, 255, 0)
        swAppearanceSetts(0).Luminous = 0.4
        swAppearanceSetts(0).Transparent = 0#
    
        swModel.Extension.DisplayStateSpecMaterialPropertyValues(swDispStateSetts) = swAppearanceSetts
        
        swModel.EditRebuild3
        
    End If
    
End Sub

Function Contains(arr As Variant, item As Variant) As Boolean
    
    If Not IsEmpty(arr) Then
    
        Dim i As Integer
        
        For i = 0 To UBound(arr)
                    
            If TypeOf item Is Object  Then
                Contains = arr(i) Is item
            Else
                Contains = arr(i) = item
            End If
        
            If Contains Then
                Exit Function
            End If
        Next
        
    End If
    
    Contains = False
    
End Function

Notifications

Join session by SOLIDWORKS and PDM API expert Artem Taturevych at 3DEXPERIENCE World 2026 on Wednesday, Feb 4 at 08:30 AM CST to explore 10 essential macros for automating drawings, assemblies, custom properties, and more


Product of Xarial Product of Xarial