Macro API - DXF-Export von Volumenteilen (ohne Flat-Patern)

Hallo

Ich verwende die Methode: ExportFlatPatternView-Methode (IPartDoc) häufig

https://help.solidworks.com/2019/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ipartdoc~exportflatpatternview.html

zum Export von Blechen, die für den Versand an Plasma/Laser/Wasserstrahl entwickelt wurden...

 

Auf der anderen Seite zeichnen wir manchmal einfache Teile (stellen wir uns eine einfache Unterlegscheibe vor) in Volumen und nicht in Blech.

Diese Methode, die für ein Volumenkörper verwendet wird, exportiert das Teil wie erwartet, jedoch immer unter Verwendung der ursprünglichen Vorderansicht des Teils.

Wenn wir also die Unterlegscheibe in der Vorderansicht zeichnen, ist es in Ordnung, wenn wir sie in der Seitenansicht zeichnen, wir haben einen DXF der Kante der Unterlegscheibe (ein langes Rechteck und nicht zwei konzentrische Kreise).

Wenn wir die Ansicht aktualisieren, um zu sagen, dass dies "dies" die Vorderansicht ist, wird dies in SW berücksichtigt (wir klicken auf die Vorderansicht, um die richtige Ansicht zu haben), aber für den Export ändert sich nichts.

 

Haben Sie eine Idee, um jedes Mal das richtige Sehvermögen exportieren zu können?

Oder eine andere Technik, die es Ihnen ermöglicht, DXF-Teile für das NC-Schneiden zu exportieren, ohne eine Zeichnung durchlaufen zu müssen.

(Tatsächlich besteht die Methode, die wir bisher verwenden, darin, eine Zeichnung im Maßstab 1:1 ohne Patrone zu erstellen und sie dann in DXF zu exportieren, aber das ist überhaupt nicht effizient).

Vielen Dank im Voraus für Ihre Ratschläge zu diesem Thema.

Rafael

Haaa ich habe gerade gesehen, dass es tatsächlich gibt:

https://help.solidworks.com/2019/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IPartDoc~ExportToDWG2.html

und dass Anmerkungsansichten exportiert werden können.

Ich schaue, was wir damit machen können, und ich werde die Ergebnisse hier veröffentlichen.

1 „Gefällt mir“

Hallo

Ja, es ist die ExportToDWG2-Funktion, die Sie für das verwenden sollten, was Sie tun möchten, diese Funktion ersetzt die ExportFlatPatternView-Funktion seit der Version 2017 von SW.

Herzliche Grüße

Hallo

Hier ist mein Code:

je le met dans un post suivant car on est limité à 6000 caractères sur le Forum

und Ausgabe:

Also zwei Probleme:

1- Wenn ich keine Ansicht in dataView(0) definiere, funktioniert der Volumenexport, wenn ich eine auf folgende Weise definiere:

    'Variable pour l'export DXF/DXG
    Dim varViews As Variant
    Dim dataViews(2) As String
    
    'Vues d'annotation que l'on veux exporter en DXF
    dataViews(0) = "*Current"
    dataViews(1) = "*Front"
    dataViews(2) = "*DXF"
    varViews = dataViews

 

Mein Export funktioniert also nicht mehr...

 ElseIf flagTole = 0 Then 'Si on est en volumique:
                                    'value = instance.ExportToDWG2(FilePath, ModelName, Action, ExportToSingleFile, Alignment, IsXDirFlipped, IsYDirFlipped, SheetMetalOptions, Views)
                                    varViews = dataViews
                                    swPart.ExportToDWG2 dxfFilePath, filePath, swExportToDWG_ExportAnnotationViews, False, varAlignment, False, False, 0, varViews
                                    bRet = swPart.ExportToDWG2(dxfFilePath, filePath, swExportToDWG_ExportAnnotationViews, True, varAlignment, False, False, 0, varViews)
                                    If bRet Then
                                        Debug.Print "On a exporté la pièce de volumique en DXF:  " & dxfFilePath
                                    Else
                                        Debug.Print ("Erreur enregistrement DXF: " & dxfFilePath)
                                    End If
                                End If 'Fin du If flagTole

swPart.ExportToDWG2 --> gibt FALSE zurück

Auch wenn ich nur eine Vorderansicht einsetze...

Mein Ziel ist es, eine Anmerkungsansicht mit dem Namen "DXF" in den Volumenteilen zu erstellen, die wir zum Schneiden senden möchten. In der Tat sind einige im Kontext der Montage gezeichnet und daher weder auf den Ursprung noch auf die Grundpläne zentriert, und in diesem Fall ist es angebracht, dass der Zeichner die Ansicht wählt, die er für den Schnitt verwendet. Ein bisschen so, wie wenn Sie "Fläche exportieren" in DXF machen.

Ich kann Folgendes nicht verwenden: swExportToDWG_ExportSelectedFacesOrLoops, weil ich nicht glaube dass ich das richtige Gesicht automatisch finden kann.

(es sei denn, ich kann automatisch die Fläche mit der größten Oberfläche auswählen.... aber hey, es ist nicht toll und es kann zeitaufwändig sein)

 

2- Bei Blechteilen exportiere ich jede Konfiguration gut, es funktioniert cool. Auf der anderen Seite möchte ich sicher sein, dass es die Geometrie des Teils in seinem entwickelten Zustand mit den Funktionen verwendet, die wir mit dem entwickelten Zustand (im Ordner für den entfalteten Zustand) verknüpft haben. Denn kleine Modifikationen werden oft nur beim Schneiden vorgenommen, zum Beispiel:

- Kleine Faltmarkierungen werden am Ende der Falten angebracht

- Wir verstecken einige Flächen, wie z.B. die Senkungen, die wir bei der Überarbeitung machen, sonst haben wir am Ende ein dxf mit zwei konzentrischen Kreisen, und das Ziel ist es, nur geschlossene Konturen zu haben.

In meinem oben geposteten Code habe ich die Konfigurationen durchlaufen, um die FLATs zu finden, aber die Blechteile haben keine FLAT-Konfiguration, bis Sie die Zeichnung erstellen. Die Verwendung von swExportToDWG passt gut zu mir, denn auch wenn das Teil keine Abwicklungskonfiguration hat, ist der Export gut gemacht.

 

Da haben Sie es, Ihr Rat ist auch in den anderen Teilen des Codes willkommen.

Vielen Dank!

Hier ist ein Code-Snippet, das vollständig abgeschnitten/entfettet wurde, da wir weniger als 600 Zeichen betragen müssen:

Ich habe nur die Teile übrig gelassen, die uns für dieses Thema interessieren:

Option Explicit

Public Enum swSMBendState_e
    swSMBendStateNone = 0       '  No bend state - not a sheet metal part
    swSMBendStateSharps = 1     '  Bends are in the sharp state - bends currently not applied
    swSMBendStateFlattened = 2  '  Bends are flattened
    swSMBendStateFolded = 3     '  Bends are fully applied
End Enum

Public Enum swSMCommandStatus_e
    swSMErrorNone = 0               '  No errors
    swSMErrorUnknown = 1            '  Failed for an unknown reason
    swSMErrorNotAPart = 2           '  Sheet metal commands only apply to SolidWorks parts
    swSMErrorNotASheetMetalPart = 3 '  Part contains no sheet metal features
    swSMErrorInvalidBendState = 4   '  Invalid bend state was specified
End Enum


Sub main()

    'Objet SW
    Dim swApp               As SldWorks.SldWorks
    Dim swModel             As SldWorks.ModelDoc2
    Dim swPart              As SldWorks.PartDoc
    Dim swExportPDFData     As SldWorks.ExportPdfData
    Dim swView              As ModelView

    Dim flagTole            As Long
        
    'Bitmasq pour régler l'export DXF
    Dim exportFlatPat As Long
    Dim dataAlignment(11) As Double
    Dim varAlignment As Variant
    dataAlignment(0) = 0#
    dataAlignment(1) = 0#
    dataAlignment(2) = 0#
    dataAlignment(3) = 1#
    dataAlignment(4) = 0#
    dataAlignment(5) = 0#
    dataAlignment(6) = 0#
    dataAlignment(7) = 1#
    dataAlignment(8) = 0#
    dataAlignment(9) = 0#
    dataAlignment(10) = 0#
    dataAlignment(11) = 1#
    varAlignment = dataAlignment

    'Variable pour l'export DXF/DXG
    Dim varViews As Variant
    Dim dataViews(2) As String
    
    'Vues d'annotation que l'on veux exporter en DXF
    dataViews(0) = "*Current"
    dataViews(1) = "*Front"
    dataViews(2) = "*DXF"
    varViews = dataViews
    
    'On crée un instance de SW
    Set swApp = CreateObject("SldWorks.Application")

######### TRONQUE ICI car le forum refuse quand c'est trop long ##########

                If flagAsm Or flagPart Then
                
                    'et qu'on veut un DXF
                    If flagPart And flagDXF Then
                        flagTole = swModel.GetBendState
                        If flagTole = 0 Then
                            Debug.Print "La pièce est volumique:  " & flagTole
                        Else
                            Debug.Print "La pièce est en tôlerie:  " & flagTole
                        End If
                    End If
                
                    'On récupère le nom des configs
                    vConfNameArr = swModel.GetConfigurationNames
                    
                    'Pour chaque config : ---------------------------------------------
                    For i = 0 To UBound(vConfNameArr)
                        sConfigName = vConfNameArr(i)
                        Debug.Print "On traite la config:  " + sConfigName
                        
                        
                        'Pour chaque config pas FLAT : ---------------------------------------------
                        If InStr(sConfigName, "FLAT") = 0 Then
                            bShowConfig = swModel.ShowConfiguration2(sConfigName)
                            
                            
                            'Export DXF
                            If flagPart And flagDXF Then
                                dxfFilePath = exportPathNoExtention & "-" & sConfigName & ".DXF"
                                Set swPart = swModel
                                If flagTole <> 0 Then 'Si on est en tôlerie:
                                    exportFlatPat = 1
                                    bRet = swPart.ExportToDWG2(dxfFilePath, filePath, swExportToDWG_ExportSheetMetal, True, varAlignment, False, False, exportFlatPat, Null)
                                    If bRet Then
                                        Debug.Print "On a exporté la pièce de tôlerie en DXF:  " & dxfFilePath
                                    Else
                                        Debug.Print ("Save DXF : " & bRet)
                                    End If
                            
                                ElseIf flagTole = 0 Then 'Si on est en volumique:
                                    varViews = dataViews 'ici j'ai remis ca juste pour test mais c'est déjà fait plus haut, ou est le meilleur endroit ?
                                    'Reference de la fonction pour mémoire: value = instance.ExportToDWG2(FilePath, ModelName, Action, ExportToSingleFile, Alignment, IsXDirFlipped, IsYDirFlipped, SheetMetalOptions, Views)
                                    bRet = swPart.ExportToDWG2(dxfFilePath, filePath, swExportToDWG_ExportAnnotationViews, False, varAlignment, False, False, 0, varViews)
                                    If bRet Then
                                        Debug.Print "On a exporté la pièce de volumique en DXF:  " & dxfFilePath
                                    Else
                                        Debug.Print ("Erreur enregistrement DXF: " & dxfFilePath)
                                    End If
                                End If 'Fin du If flagTole
                                
                            End If 'Fin du if flagPart et FlagDXF
                        

            

 

Hallo

Punkt 1: Ja, es ist bei den Beispielen in der Hilfe nicht offensichtlich, aber um die Ansichten zu exportieren, müssen Sie sie genau so benennen, wie sie in der Zeichnungspalette sind, also zum Beispiel:

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim sModelName As String
Dim sPathName As String
Dim varAlignment As Variant
Dim dataAlignment(11) As Double
Dim varViews As Variant
Dim dataViews(10) As String
Dim options As Long

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
   

    sModelName = swModel.GetPathName
    sPathName = swModel.GetPathName
    sPathName = Left(sPathName, Len(sPathName) - 6)
    sPathName = sPathName + "dxf"

    Set swPart = swModel

    dataAlignment(0) = 0#
    dataAlignment(1) = 0#
    dataAlignment(2) = 0#
    dataAlignment(3) = 1#
    dataAlignment(4) = 0#
    dataAlignment(5) = 0#
    dataAlignment(6) = 0#
    dataAlignment(7) = 1#
    dataAlignment(8) = 0#
    dataAlignment(9) = 0#
    dataAlignment(10) = 0#
    dataAlignment(11) = 1#

    varAlignment = dataAlignment

    dataViews(0) = "*Face"
    dataViews(1) = "*Dessus"
    dataViews(2) = "*Dessous"
    dataViews(3) = "*Droite"
    dataViews(4) = "*Gauche"
    dataViews(5) = "*Arrière"
    dataViews(6) = "*Isométrique"
    dataViews(7) = "*Dimétrique"
    dataViews(8) = "*Trimétrique"
    dataViews(9) = "*En cours"
    dataViews(10) = "dxf"

    varViews = dataViews

    swPart.ExportToDWG2 sPathName, sModelName, swExportToDWG_ExportAnnotationViews, False, varAlignment, False, False, 0, varViews

End Sub

Wir können sehen, dass die Ansicht mit dem Namen dxf nicht das Zeichen * vor ihrem Namen hat und dass die anderen Ansichten auf Französisch sind.

Punkt 2: Ich habe nicht geschaut ... [BEARBEITEN] Sie können es versuchen, indem Sie einfach den Export einer Ansicht mit dem Namen "Unfolded State" hinzufügen, also indem Sie eine Zeile hinzufügen dataViews(11) = "Unfolded State", ohne zu vergessen, die Zeile "Dim dataViews(11) As String" zu ändern. [ENDE BEARBEITEN]

Herzliche Grüße