8 Replies Latest reply on Feb 10, 2019 12:21 PM by Deepak Gupta

    Batch export sheet metal flat patterns to DXF from assembly

    Hunter Hinson

      I'm trying to batch export multiple sheet metal flat patterns of an assembly to DXFs instead of opening and saving as each individual parts.  I'm just wondering if there is a tool in Solidworks that can enable me to do this or a macro I can implement?

          • Re: Batch export sheet metal flat patterns to DXF from assembly
            Hunter Hinson

            It exports the DXF but if they are the same thickness it overwrites each part almost like its naming them the same thing. Only really works if all my parts are of varying thicknesses and outright does not work if I use custom materials in place.

              • Re: Batch export sheet metal flat patterns to DXF from assembly
                Deepak Gupta

                I do not recall any such issue but try the macro from this post Macro to Export Flat Pattern to DXF

                  • Re: Batch export sheet metal flat patterns to DXF from assembly
                    Hunter Hinson

                    Only issue is that it exports to DWG instead of DXF (Weird I know).  I'm gonna try to look through the code itself and see if I can pinpoint where it saves as a DWG.

                    • Re: Batch export sheet metal flat patterns to DXF from assembly
                      Hunter Hinson

                      It worked! I had to go into the code and update to save as DXF instead of DWG but it should totally work now, macro pasted below. Thanks again for your help!

                       

                      Sub main()

                       

                       

                         Dim swApp                       As SldWorks.SldWorks

                         Dim swModel                     As SldWorks.ModelDoc2

                         Dim swAssy                      As SldWorks.AssemblyDoc

                         Dim swConf                      As SldWorks.Configuration

                         Dim swRootComp                  As SldWorks.Component2

                         Dim nStart                      As Single

                         Dim bRet                        As Boolean

                       

                         Set swApp = Application.SldWorks

                         Set swModel = swApp.ActiveDoc

                         Set swConf = swModel.GetActiveConfiguration

                         Set swRootComp = swConf.GetRootComponent3(True)

                       

                         Debug.Print "File = " & swModel.GetPathName

                       

                         TraverseComponent swRootComp, 1

                       

                         Debug.Print "Finished!"

                       

                       

                      End Sub

                       

                       

                      Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)

                       

                       

                      Dim vChildComp                  As Variant

                       

                       

                         Dim swApp                       As SldWorks.SldWorks

                         Dim swpart                      As SldWorks.PartDoc

                       

                         Dim swChildComp                 As SldWorks.Component2

                         Dim swConfig                    As SldWorks.Configuration

                         Dim swConfMgr                   As SldWorks.ConfigurationManager

                         Dim swChildModel                As SldWorks.ModelDoc2

                         Dim swOpenModel                 As SldWorks.ModelDoc2

                       

                         Dim swChildCustPropMngr         As CustomPropertyManager

                         Dim swChildModelDocExt          As ModelDocExtension

                         Dim swsheetmetal                As SldWorks.SheetMetalFeatureData

                         Dim swFeat                      As SldWorks.Feature

                         Dim swBody                      As SldWorks.Body2

                       

                       

                         Dim Sheet_metal                 As Boolean

                         Dim Boolstatus                  As Boolean

                           

                         Dim Thickness                   As Double

                         Dim conv                        As Double

                       

                       

                         Dim i                           As Long

                         Dim loptions                    As Long

                         Dim lerrors                     As Long

                       

                       

                         Dim sPadStr                     As String

                         Dim FilePath                    As String

                         Dim FileName                    As String

                         Dim swThkDir                    As String

                         Dim swMatDir                    As String

                         Dim swCurrent                   As String

                         Dim RefCfg                      As String

                         Dim ChildConfigName             As String

                         Dim sMatName                    As String

                         Dim sMatDB                      As String

                         Dim exFileName                  As String

                       

                         Dim Bodies                      As Variant

                       

                         vChildComp = swComp.GetChildren

                       

                       

                         For i = 0 To UBound(vChildComp)

                             Set swChildComp = vChildComp(i)

                           

                             'Check to see if current component is suppressed

                             If swChildComp.IsSuppressed = False Then GoTo Active Else GoTo Skip

                           

                      Active:

                      Set swApp = Application.SldWorks

                       

                       

                      Set swChildModel = swChildComp.GetModelDoc2

                         'Check to see if child component is an Assembly or part

                         If (swChildModel.GetType <> swDocPART) Then GoTo Jump 'Skips Subassemby level

                       

                       

                      Set swpart = swChildModel 'Applies part commands for current component

                       

                       

                      FilePath = Left(swComp.GetPathName, InStrRev(swComp.GetPathName, "\") - 1)

                       

                      FileName = swChildModel.GetTitle 'Get title of component

                      swCurrent = swChildComp.ReferencedConfiguration 'Get current configuration of component

                       

                       

                      Bodies = swpart.GetBodies2(swBodyType_e.swAllBodies, True)

                      Set swBody = Bodies(0)

                       

                       

                         If swBody.IsSheetMetal = 0 Then 'If Body is not sheet metal

                       

                       

                             'Debug.Print "Component " & FileName & " is not a sheet metal component"

                             'Debug.Print "Current Config is : "; swCurrent

                                 GoTo Jump

                         End If

                       

                         If swBody.IsSheetMetal = 1 Then 'If body is sheet metal

                       

                       

                             Debug.Print "Processing component " & FileName & " as a sheet metal component"

                             Debug.Print "Current Config is : "; swCurrent

                             GoTo Process

                         End If

                       

                       

                      Process:

                       

                       

                      'Get Part Material

                       

                       

                      Set swpart = swChildModel

                      sMatName = swpart.GetMaterialPropertyName2(swCurrent, sMatDB)

                       

                       

                      If sMatName = "" Then sMatName = "None"

                       

                       

                      Debug.Print "    Current material is : "; sMatName

                       

                       

                      'Get part Thickness

                       

                       

                      Set swFeat = swChildModel.FirstFeature

                         While Not swFeat Is Nothing

                       

                       

                         If swFeat.GetTypeName = "SheetMetal" Then

                             Set swsheetmetal = swFeat.GetDefinition

                           

                             Thickness = swsheetmetal.Thickness

                           

                             conv = 39.3700787401575

                             Thickness = Thickness * conv

                       

                       

                      Debug.Print "    Thickness is :"; Thickness; "inches"

                               

                         End If

                       

                       

                      Set swFeat = swFeat.GetNextFeature

                                   

                         Wend

                       

                      swMatDir = FilePath & "\" & sMatName

                      Debug.Print swMatDir

                       

                       

                      If Dir(swMatDir, vbDirectory) = "" Then MkDir swMatDir

                       

                       

                      swThkDir = FilePath & "\" & sMatName & "\" & Thickness

                      Debug.Print swThkDir

                       

                       

                      If Dir(swThkDir, vbDirectory) = "" Then MkDir swThkDir

                       

                       

                      exFileName = FilePath & "\" & sMatName & "\" & Thickness & "\" & FileName & "-" & swCurrent

                       

                       

                      Debug.Print exFileName

                       

                       

                      Set swOpenModel = swApp.ActivateDoc3(swChildModel.GetPathName, True, loptions, lerrors)

                       

                       

                      Boolstatus = swChildModel.ShowConfiguration2(swCurrent)

                       

                       

                      swChildModel.ExportFlatPatternView exFileName & ".DWG", 0

                       

                       

                      swApp.CloseDoc (swChildModel.GetPathName)

                       

                       

                              

                      GoTo Jump

                              

                      Skip:

                       

                       

                         Debug.Print "Skipped"

                       

                       

                      Jump:

                             TraverseComponent swChildComp, nLevel + 1

                                Next i

                       

                       

                      End Sub

                • Re: Batch export sheet metal flat patterns to DXF from assembly
                  Duncan Gillis

                  Hi Hunter, if you're doing a lot of this type of exporting it might be worth investing in an external software program like CUSTOMTOOLS.
                  Eliminate your SW routines! | Home

                  I've been using this program daily for around 8 years, and is excellent for this operation. Check out the youtube video below too, noting how you can not only export the DXF (or DWG) files, but PDFs as well.

                  Batch convert your SOLIDWORKS assemblies - YouTube

                  • Re: Batch export sheet metal flat patterns to DXF from assembly
                    Pete Wiebe

                    Hi Hunter, Super handy macro. How would I edit this so I could change the file location it saves to or have it ask me where I want to save it to? (let me browse to file location) I know very little about macro's and coding so any help would be great.