Read configuration specific cut-list property from the selected component using SOLIDWORKS API

Edit ArticleEdit Article

Cut list properties
Cut list properties

This VBA macro example demonstrates how to read and print all custom properties from all cut-list elements of the selected component in assembly using SOLIDWORKS API.

Cut-lists are read from the respective referenced configuration of the component.

Result is output to the immediate window of VBA editor in the following format.

CS-02-1 (A)
        Bounding Box Length: 150
        Bounding Box Width: 50
        Sheet Metal Thickness: 0.74
        Bounding Box Area: 7500
        Bounding Box Area-Blank: 7500
        Cutting Length-Outer: 400
        Cutting Length-Inner: 0
        Cut Outs: 0
        Bends: 0
        Bend Allowance: 0.5
        Material: Material <not specified>
        Mass: 5.52
        Description: Sheet
        Bend Radius: 0.74
        Surface Treatment: Finish <not specified>
        Cost-TotalCost: 0
        QUANTITY: 1

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swApp.ActiveDoc
    If Not swModel Is Nothing Then
        If swModel.GetType() = swDocumentTypes_e.swDocASSEMBLY Then
            Dim swSelMgr As SldWorks.SelectionMgr
            Set swSelMgr = swModel.SelectionManager
            Dim swComp As SldWorks.Component2
            Set swComp = swSelMgr.GetSelectedObjectsComponent2(1)
            If Not swComp Is Nothing Then
                PrintComponentCutListProperties swComp
                MsgBox "Please select component"
            End If
            MsgBox "Active document is not an assembly"
        End If
        MsgBox "Please open assembly"
    End If
End Sub

Sub PrintComponentCutListProperties(comp As SldWorks.Component2)
    Dim vCutLists As Variant
    vCutLists = GetCutLists(comp)
    Debug.Print comp.Name2 & " (" & comp.ReferencedConfiguration & ")"
    If Not IsEmpty(vCutLists) Then
        Dim i As Integer
        For i = 0 To UBound(vCutLists)
            Dim swCutListFeat As SldWorks.Feature
            Set swCutListFeat = vCutLists(i)
            Debug.Print "    " & swCutListFeat.Name
            Dim swCustPrpsMgr As SldWorks.CustomPropertyManager
            Set swCustPrpsMgr = swCutListFeat.CustomPropertyManager
            Dim vPrpNames As Variant
            Dim vPrpTypes As Variant
            Dim vPrpVals As Variant
            Dim vResVals As Variant
            Dim vPrpsLink As Variant
            Dim prpsCount As Integer
            prpsCount = swCustPrpsMgr.GetAll3(vPrpNames, vPrpTypes, vPrpVals, vResVals, vPrpsLink)
            Dim j As Integer
            Dim indent As String
            indent = "        "
            For j = 0 To prpsCount - 1
                Debug.Print indent & vPrpNames(j) & ": " & vPrpVals(j)
        Debug.Print "    -No Cut Lists-"
    End If
End Sub

Function GetCutLists(comp As SldWorks.Component2) As Variant
    Dim swCutListFeats() As SldWorks.Feature
    Dim isInit As Boolean
    isInit = False
    Dim swFeat As SldWorks.Feature
    Dim swBodyFolder As SldWorks.BodyFolder
    Set swFeat = comp.FirstFeature
    Do While Not swFeat Is Nothing
        If swFeat.GetTypeName2 = "CutListFolder" Then
            If Not isInit Then
                isInit = True
                ReDim swCutListFeats(0)
                ReDim Preserve swCutListFeats(UBound(swCutListFeats) + 1)
            End If
            Set swCutListFeats(UBound(swCutListFeats)) = swFeat
        End If
        Set swFeat = swFeat.GetNextFeature
    If isInit Then
        GetCutLists = swCutListFeats
        GetCutLists = Empty
    End If

End Function

Product of Xarial Product of Xarial