Read configuration specific cut-list property from the selected component using SOLIDWORKS API
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) Sheet<1> 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 Else MsgBox "Please select component" End If Else MsgBox "Active document is not an assembly" End If Else 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) Next Next Else 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) Else ReDim Preserve swCutListFeats(UBound(swCutListFeats) + 1) End If Set swCutListFeats(UBound(swCutListFeats)) = swFeat End If Set swFeat = swFeat.GetNextFeature Loop If isInit Then GetCutLists = swCutListFeats Else GetCutLists = Empty End If End Function