Makro PDF3D,XT,STEP,STL Einheit

Ich möchte, dass das SolidWorks Makro so konzipiert ist, dass es den Prozess des Exportierens von PDF3D-, Parasolid (XT)-, STEP-Dateien und des Exports jedes Volumenkörpers eines Modells in das STL-Format automatisiert. Ich denke, alles funktioniert, aber ich kann das Problem anscheinend nicht lösen... Kannst du mir helfen?

Option Explizit

Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBodyFolder als SldWorks.BodyFolder
Dim swBody As SldWorks.Body2
Dim boolstatus als boolescher Wert
Fehler so lange dimmen
Dim lWarnungen so lange
ActiveConfig als Zeichenfolge dimmen
Dim sModelFullPath als Zeichenfolge
Dim sFilePath als Zeichenfolge
Dim FolderNameDestination As String
Ext_PART als Zeichenfolge dimmen
Ext_STEP als Zeichenfolge dimmen
Ext_STL als Zeichenfolge dimmen

Sub main()
Legen Sie swApp = Application.SldWorks fest
Festlegen von 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

Ende Sub

Sub ExportBodyToSTL(swBody As SldWorks.Body2, destinationFolder As String)
' Erstellen Sie den STL-Dateinamen anhand des Volumenkörpernamens
Dim bodyName As String
bodyName = swBody.Name
Wenn InStr(bodyName, "[") <> 0, dann
bodyName = Left(bodyName, InStr(bodyName, "[") - 1)
Ende, wenn
Dim stlFileName als Zeichenfolge
stlFileName = Zielordner & 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

Ende Sub

Hallo

Um zu helfen, was funktioniert nicht? Die Generierung des PDF3D? Die STL jedes Korps ...?

Danke für Ihre Antwort :slight_smile: Ursprünglich habe ich 2 Makros, eines für den PDF3D XT-SCHRITT und ein anderes, das die Einheit STL jedes Volumens ausführt. Ich möchte die 2 zusammenführen, um eins zu machen. die Generierung von PDF3D XT und STEP funktioniert, aber ich kann den unitären STL-Teil nicht integrieren

Hallo

So wie es aussieht, bin ich ein wenig überrascht, dass das Makro funktioniert, da einige Fehler gemeldet werden, wenn ich den Code so lasse, wie er ist.
In den Funktionsaufrufen sind die Parameter für den PDF-Export schlecht definiert (zumindest für SW2022, auf welcher Version sind Sie?), der Registrierungsname des Schritts ist schlecht realisiert (er heißt schließlich .x_t.stp).
Ist das Ende des STL-Makros wirklich das des Makros allein?
Beim Testen bleibt SwBodyFolder leer, da es keine Baumanalyse gibt.
Verwenden Sie in Bezug auf dieses Thema: Makroregister STL 1 body select - 3D-Konstruktion / Andere Anwendungen - myCAD Forum (visiativ.com), verwenden Sie den stl-Code, den Sie nach dieser Anfrage generiert haben?