Macro PDF3D,XT,STEP,STL unitaire

Je souhaite que la macro SolidWorks soit conçue pour automatiser le processus d’exportation de fichiers PDF3D, Parasolid (XT), STEP et l’export de chaque corps solide (Solid Body) d’un modèle au format STL. Je pense que tout fonctionne mais je n’arrive pas a régler le problème… Pouvez vous m’aider ?

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBodyFolder As SldWorks.BodyFolder
Dim swBody As SldWorks.Body2
Dim boolstatus As Boolean
Dim lErrors As Long
Dim lWarnings As Long
Dim ActiveConfig As String
Dim sModelFullPath As String
Dim sFilePath As String
Dim NomDossierDestination As String
Dim Ext_PART As String
Dim Ext_STEP As String
Dim Ext_STL As String

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

' Contrôle si un PART ou un ASM est ouvert
If swModel Is Nothing Then
    MsgBox "Aucun assemblage ou pièce en cours", vbCritical
    End
End If

If swModel.GetType <> swDocASSEMBLY And swModel.GetType <> swDocPART Then
    MsgBox "Cette Macro ne fonctionne que sur les assemblages ou les pièces", vbCritical
    End
End If

Set swModelDocExt = swModel.Extension

Set swModelDocExt = swModel.Extension
Set swExportData = swApp.GetExportData(swExportPDF)

' Paramètres d'export PDF3D
swExportData.ViewPdfAfterSaving = True ' Ouvrir le fichier PDF après l'enregistrement

' Paramètres d'export STL
Set swExportData = swApp.GetExportFileData(swExportSTL)
swExportData.ExportAsBinary = True ' Exporter en tant que fichier binaire
swExportData.Unit = 0 ' Unités en millimètres
swExportData.Quality = swSTLQuality_Fine ' Qualité fine
swExportData.IncludeInfo = True ' Afficher les informations avant l'enregistrement


' Controle si le fichier ouvert a déjà été sauvegardé
Dim filename As String
filename = swModel.GetPathName
If filename = "" Then
    MsgBox "Sauvegarder d'abord le fichier et réessayez", vbCritical
    End
End If

' Créer un objet BodyFolder pour accéder aux dossiers de corps
Set swBodyFolder = swModel.FirstFeature.GetSpecificFeature2
If Not swBodyFolder Is Nothing Then
    ' Récupérer le chemin du modèle pour déterminer le dossier de destination
    sModelFullPath = swModel.GetPathName
    sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))
    NomDossierDestination = sFilePath
    
    ' Boucler à travers chaque corps solide du dossier de corps
    Set swBody = swBodyFolder.GetFirstBody
    Do While Not swBody Is Nothing
        ' Exporter le corps solide au format STL
        ExportBodyToSTL swBody, NomDossierDestination
        ' Désélectionner le corps solide
        swModel.ClearSelection2 True
        ' Passer au corps solide suivant
        Set swBody = swBodyFolder.GetNextBody(swBody)
    Loop
End If

' Enregistrement en tant que Parasolid (XT)
NomDossierDestination = sFilePath
filename = filename & ".x_t"
boolstatus = swModelDocExt.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings)

' Enregistrement en tant que STEP
NomDossierDestination = sFilePath
filename = filename & ".stp"
boolstatus = swModelDocExt.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings)

' Enregistrement en tant que PDF3D
NomDossierDestination = sFilePath
sModelFullPath = swModel.GetPathName
sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))

Dim pdfOptions As Variant
pdfOptions = swApp.GetExportFileOptions(swExportPDF)
boolstatus = swModelDocExt.SaveAs3(sFilePath & swModel.GetTitle & "-PDF3D.PDF", 0, swSaveAsOptions_Silent, lErrors, lWarnings, pdfOptions)

' Message d'avertissement d'execution de la macro
MsgBox "MACRO TERMINEE :" & vbCrLf & "Contrôler les fichiers PDF3D, Parasolid, STEP et STL exportés", vbInformation

End Sub

Sub ExportBodyToSTL(swBody As SldWorks.Body2, destinationFolder As String)
’ Construire le nom de fichier STL en utilisant le nom du corps solide
Dim bodyName As String
bodyName = swBody.Name
If InStr(bodyName, « [ ») <> 0 Then
bodyName = Left(bodyName, InStr(bodyName, « [ ») - 1)
End If
Dim stlFileName As String
stlFileName = destinationFolder & bodyName & « .stl »

' Exporter le corps solide au format STL
boolstatus = swModelDocExt.SaveAs(stlFileName, 0, 0, swExportData, lErrors, lWarnings)

' Afficher le nom du fichier STL dans la console (peut être commenté/décommenté selon les besoins)
Debug.Print "Exported STL: " & stlFileName

End Sub

Bonjour,

Afin de pouvoir aider, qu’est-ce qui ne fonctionne pas? La génération du PDF3D ? Le STL de chaque corps …?

Merci de votre réponse :slight_smile: A l’origine j’ai 2 macro une pour faire le PDF3D XT STEP et une autre qui fait les STL unitaire de chaque volume. Je voudrai fusionner les 2 pour en faire qu’une seule. la génération de PDF3D XT et STEP fonctionne mais je n’arrive pas a intégrer la partie STL unitaire

Bonjour,

En l’état, je suis un peu surpris que la macro fonctionne car il y a quelques erreurs remontées si je laisse le code tel qu’il est.
Dans les appels de fonctions, les paramètres pour l’export PDF sont mal définis (du moins pour SW2022, vous êtes sur quelle version?), le nom d’enregistrement du step est mal réalisé (il se nomme au final .x_t.stp).
Le bout de macro STL est bien celui de la macro seule?
En le testant, SwBodyFolder reste vide puisqu’il n’y a pas d’analyse de l’arborescence.
Par rapport à ce sujet: Macro Enregistrer STL 1 corps selectionner - Conception 3D / Autres applications - Forum myCAD (visiativ.com), est-ce que vous utilisez le code stl que vous aviez généré suite à cette demande?