Welcome

VBA macro to remove appearance from all faces usign SOLIDWORKS API

Edit ArticleEdit Article

Thsi VBA macro demonstrates how to delete appearance from all faces in the active part or SOLIDWORKS document

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    
    Dim swModel As SldWorks.ModelDoc2
    
    Set swModel = swApp.ActiveDoc
    
    Dim vAppearances As Variant
    
    vAppearances = swModel.Extension.GetRenderMaterials2(swDisplayStateOpts_e.swAllDisplayState, Empty)
    
    If Not IsEmpty(vAppearances) Then
    
        Dim i As Integer
        
        For i = 0 To UBound(vAppearances)
            Dim swAppearance As SldWorks.RenderMaterial
            Set swAppearance = vAppearances(i)
            
            If HasFace(swAppearance) Then
                Dim matId1(0) As Long
                Dim matId2(0) As Long
                swAppearance.GetMaterialIds matId1(0), matId2(0)
                                
                swModel.Extension.DeleteDisplayStateSpecificRenderMaterial matId1, matId2
            End If
            
        Next
    
    End If
    
End Sub

Function HasFace(appearance As SldWorks.RenderMaterial) As Boolean
    
    Dim vEnts As Variant
    vEnts = appearance.GetEntities
    
    If Not IsEmpty(vEnts) Then
        Dim i As Integer
        For i = 0 To UBound(vEnts)
            If TypeOf vEnts(i) Is SldWorks.Face2 Then
                HasFace = True
                Exit Function
            End If
        Next
    End If
    
    HasFace = False
    
End Function


Product of Xarial Product of Xarial