AnsweredAssumed Answered

Cutlist item length of imported part can not be resolved

Question asked by Ben D. on Jun 6, 2015
Latest reply on Jun 8, 2015 by Simon Turner



I have a weldment part, which contains multiple bodies. Due to the policy of our company, every assembly must be an assembly in a drawing, not a part of multiple bodies as it is a default policy of Solidworks software. To achieve this, I create a weldment structure as a parent part file, and then create a separate child part files for each structural element. I import a full parent part (Insert>Part) into a child and leave only one body in each of child parts by using "Delete bodies" feature. When I am done with all the child parts, I bring all these parts into an assembly ...


I described this because I would welcome any suggestion, how to get every structural member as a separate part in "Parts only" BOM (again, this is a requirement in our company, there are further actions being processed from these BOMs). I have wrote an enhancement request so that SW would implement a feature to "Show detailed cut list" in "Parts only" BOM with a possibility to dissolve it. But even if they will I guess it will take a while, so I have to get another solution until then ..


Anyhow, after bringing all the child parts to assembly, every child part must have a file's custom property "Length" with a value of the length of an imported tube. I am composing a simple macro which would do that automatically. For this exact task i know that I will always have one solid body, therefore one element in a "Solid bodies" folder. So I am finding the first one, and reading the "Length" of an cut list item. I am using "Get5" method of CustomPropertyManager. The problem I am facing is that the "Resolved value" it returns is still value of calculation, not a result. It returns the same values for ValOut and ResolvedValOut, which is:



The code is working fine with a part that has native features, with native values (not "from parent" values).


Solidworks shows a good value if I manually go on the item in the feature tree and right click for properties.


Question: How do I get the resolved value of a cutlist item?


This is my macro code is bellow.

I also attach the .swb file of this macro code,

the parent part with few structural members,

the child part with imported parent and deleted bodies,

and a separate file with structural member (macro works good with this one)


Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim SelMgr As SldWorks.SelectionMgr
Dim cutFolder As SldWorks.BodyFolder
Dim boolFound As Boolean

Dim swFeature As SldWorks.Feature
Dim swSubFeature As SldWorks.Feature
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swCutListFolder As Feature
Dim swCustPropCL As CustomPropertyManager
Dim swCustPropFile As CustomPropertyManager

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

    If Not swModel.GetType = swDocPART Then
        swApp.SendMsgToUser "File type: non Part. Exiting"
        Exit Sub
    End If
    Set swFeature = swModel.FirstFeature
    boolFound = False

    Do While (Not swFeature Is Nothing) And (boolFound = False)
        Debug.Print swFeature.GetTypeName
        Set swSubFeature = swFeature.GetFirstSubFeature
        Do While (Not swSubFeature Is Nothing) And (boolFound = False)
            If swSubFeature.GetTypeName = "CutListFolder" Then
                Set swCustPropCL = swSubFeature.CustomPropertyManager
                Dim strValue As String
                Dim strResolvedValOut As String
                Dim blnWasResolved As Boolean
                Dim lRetVal As Long

                lRetVal = swCustPropCL.Get5("LENGTH", False, strValue, strResolvedValOut, blnWasResolved)
                Debug.Print "Length = " & strValue
                Debug.Print "Resolved length = " & strResolvedValOut
                Set swModelDocExt = swModel.Extension
                Set swCustPropFile = swModelDocExt.CustomPropertyManager("")
                'next two lines are for the future
                swCustPropFile.Add2 "AssignedLength", swCustomInfoText, "-"
                swCustPropFile.Set "AssignedLenth", "-"
                boolFound = True
            End If
            Set swSubFeature = swSubFeature.GetNextSubFeature
        Debug.Print " "
    Set swFeature = swFeature.GetNextFeature
End Sub