Makro PDF3D,XT,STEP,STL jednostka

Chcę, aby makro SolidWorks zostało zaprojektowane tak, aby automatyzować proces eksportowania plików PDF3D, Parasolid (XT), STEP oraz eksportowania każdego ciała bryłowego modelu do formatu STL. Myślę, że wszystko działa, ale nie mogę rozwiązać problemu... Czy możesz mi pomóc?

Opcja jawna

Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBodyFolder jako SldWorks.BodyFolder
Dim swBody jako SldWorks.Body2
Dim boolstatus As Boolean
Dim lErrors tak długo
Dim lOstrzeżenia tak długo
Dim ActiveConfig As Ciąg
Dim sModelFullPath As String
Dim sFilePath As String
Dim FolderNameDestination As String
Dim Ext_PART As String
Dim Ext_STEP As String
Dim Ext_STL As String

Sub main()
Ustaw swApp = Application.SldWorks
Ustaw 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

Koniec subwoofera

Sub ExportBodyToSTL(swBody As SldWorks.Body2, destinationFolder As String)
' Skonstruuj nazwę pliku STL przy użyciu nazwy bryły
Dim bodyName As Ciąg
bodyName = swBody.Name
Jeśli InStr(bodyName, "[") <> 0 Następnie
bodyName = Left(nazwa_ciała, InStr(nazwa_ciała, "[") - 1)
Zakończ jeżeli:
Dim stlFileName As String
stlFileName = folder_docelowy & nazwa_treści & ".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

Koniec subwoofera

Witam

Aby pomóc, co nie działa? Generowanie PDF3D? STL każdego korpusu ...?

Dziękuję za odpowiedź :slight_smile: Oryginalnie mam 2 makra, jedno do wykonania PDF3D XT STEP, a drugie, które wykonuje jednostkę STL każdego woluminu. Chciałbym połączyć te 2, aby stworzyć jeden. generowanie PDF3D, XT i STEP działa, ale nie mogę zintegrować jednolitej części STL

Witam

W tej chwili jestem trochę zaskoczony, że makro działa, ponieważ zgłaszane są pewne błędy, jeśli zostawię kod tak, jak jest.
W wywołaniach funkcji parametry eksportu PDF są słabo zdefiniowane (przynajmniej dla SW2022, na której wersji jesteś?), nazwa rejestracyjna kroku jest słabo zrealizowana (ostatecznie nazywa się .x_t.stp).
Koniec makra STL to naprawdę koniec samego makra?
Podczas testowania SwBodyFolder pozostaje pusty, ponieważ nie ma analizy drzewa.
W związku z tym tematem: Rejestr makr STL 1 wybór ciała - Projektowanie 3D / Inne zastosowania - myCAD Forum (visiativ.com), czy używasz kodu stl, który wygenerowałeś w odpowiedzi na to żądanie?