PrusaSlicer export macro from Solidworks
 
Notifications
Clear all

PrusaSlicer export macro from Solidworks  

  RSS
steyn.guelen
(@steyn-guelen)
Member
PrusaSlicer export macro from Solidworks

Hi,

I've been using Solidworks as my main design software, but it always bugged me to not have an export button that directly opens in PrusaSlicer (similar to Fusion360), so I made one. It exports the 3MF file in the same directory as where the part is saved, so you can always find it later. 

It is a custom VBA macro that is quite easy to install. In Solidworks, go to Tools > Macro > New. Save the file in a directory that will not be removed, and give it a reasonable name (like ExportToPrusaSlicer). Press Save and the VBA edit screen opens. Paste this:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Dim PrusaSlicerPath As String
    PrusaSlicerPath = """C:\Program Files\Prusa3D\PrusaSlicer\prusa-slicer.exe"""
    
    Dim swFeat As SldWorks.Feature
    Set swFeat = swModel.FirstFeature
    Dim BodyNameTag As String
    BodyNameTag = "Description"
    Dim BodyName As String
    Dim swBodyFolder As SldWorks.BodyFolder
    Dim swCustPropMgr As SldWorks.CustomPropertyManager
    Dim swFeat2 As SldWorks.Feature
    Dim Bodies As Variant
    Dim swBody As SldWorks.Body2
    Dim pName As String
    Dim errors As Long
    Dim warnings As Long
    
    Dim noCLFlag As Boolean 'Catching if there is no cutlist
    noCLFlag = True
    
    Dim fName As String
    fName = swModel.GetPathName
    fName = Left(fName, InStrRev(fName, ".") - 1) 'removing the original extension
    fName = Right(fName, Len(fName) - InStrRev(fName, "\")) 'Getting just the file name bit
    
    Do While Not swFeat Is Nothing
        
        If swFeat.GetTypeName2 = "CutListFolder" Then
            noCLFlag = False
            
            Set swBodyFolder = swFeat.GetSpecificFeature2
            Set swCustPropMgr = swFeat.CustomPropertyManager
            Dim DummyVal As String
            swCustPropMgr.Get4 BodyNameTag, False, DummyVal, BodyName
            
            If Not BodyName = "" And swBodyFolder.GetBodyCount > 0 Then
                
                Bodies = swBodyFolder.GetBodies
                Set swBody = Bodies(0)
                
                'Select and isolate body:
                Dim Mark As Long
                swBody.Select False, Mark
                Set swFeat2 = swModel.FeatureManager.InsertDeleteBody2(True)
                
                'Export File at body name:
                pName = swModel.GetPathName
                pName = Left(pName, InStrRev(pName, "\")) 'removing the original extension
                
                Dim savefName As String
                savefName = pName & BodyName & ".3MF"

                swModel.Extension.SaveAs savefName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, errors, warnings
                
                'Open the exported file in PrusaSlicer
                Shell PrusaSlicerPath & " " & """" & savefName & """", vbNormalFocus
                
                swFeat2.Select False
                
                Dim DeleteOption As Long
                Dim ModelDocExt As SldWorks.ModelDocExtension
                Set ModelDocExt = swModel.Extension
                DeleteOption = swDeleteSelectionOptions_e.swDelete_Absorbed
                Dim status As Boolean
                
                status = ModelDocExt.DeleteSelection2(DeleteOption)
                
            End If

        End If
        
        Set swFeat = swFeat.GetNextFeature
    Loop
    
    If noCLFlag Then 'If there is no cutlist then just save with the filename of the part without any doing any body isolation
    
        Dim SaveName As String
        pName = swModel.GetPathName
        pName = Left(pName, InStrRev(pName, "\")) 'Getting just the pathname
        
        SaveName = pName & fName & ".3MF"
        swModel.Extension.SaveAs SaveName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, errors, warnings
        
        'Open the exported file in PrusaSlicer
        Shell PrusaSlicerPath & " " & """" & SaveName & """", vbNormalFocus
        
        MsgBox "Done"
    End If

End Sub

My PrusaSlicer is installed in the path given (line 5), edit if needed, keep the triple quotes. To test it, you can run it by pressing F5. Save the file, and you can close the editor. 

To add it to the toolbar, we need to create and add the shortcut. In the topbar, press the arrow next to the settings icon -> customize. New screen opens, click tab Commands, search for macro. Drag the most right button (New Macro Button) to the bar you want it. I added it to features. A screen opens, select the macro we just created. For the icon, use this:. Should be a 16x16 4bit BMP icon. If this is unclear, you can always use this guide: https://help.solidworks.com/2022/english/Solidworks/sldworks/t_assigning_macro_toolbar_button.htm?rid=137228

Now, all should work as intended!

If you have any questions, please let me know. 

This topic was modified 4 months ago by steyn.guelen
Posted : 30/10/2023 4:05 pm
steyn.guelen
(@steyn-guelen)
Member
Topic starter answered:
RE:

I believe it also works with different slicers - haven't tested, but the code should be similar other than the slicer path. 

Posted : 30/10/2023 4:17 pm
Brutus325
(@brutus325)
Member
RE: PrusaSlicer export macro from Solidworks

Hi, 

First thank you for taking the time to make it really easy for all of us! 

Second, do you think it would also be possible to open it up in PrusaSlicer window that i have open?
I usually just add things in the open window and work on multiple parts at the same time to make it time effective.

Posted : 31/01/2024 8:39 pm
Share: