2 Replies Latest reply on Jun 8, 2015 4:30 AM by Simon Turner

    Cutlist item length of imported part can not be resolved

    Ben D.



      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:

      LENGTH@@@TUBE, SQUARE 40 X 40 X 4<1>@Part1.SLDPRT


      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