API Macro - Export DXF des pièces volumiques (sans Flat-Patern)

Bonjour,

J'utilise beaucoup la methode: ExportFlatPatternView Method (IPartDoc)

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

pour exporter les développé de tôlerie à envoyer au plasma/laser/jet d'eau...

 

En revanche, nous dessinons parfois des pièces simple (imaginons une simple rondelle) en volumique et non pas en tôlerie.

Cette méthode utilisé sur une pièce volumique exporte bien la pièce comme prévu mais en prennant toujours la vue de face originale de la pièce.

Ainsi si on dessine la rondelle sur la vue de face, c'est OK si on la dessine sur la vue de coté, on aura un DXF de la tranche de la rondelle (un long rectangle et pas deux cercle concentrique).

Si on met à jour les vue pour dire que c'est "ça" la vue de face, ca le prend en compte dans SW (on clique sur vue de face on a bien la bonne vue) mais pour l'export ca ne change rien.

 

Avez vous une idée pour pouvoir exporter la bonne vue à chaque fois ?

Ou une autre technique qui permet d'exporter les pièces en DXF pour de la découpe CN sans avoir à passer par un Drawing.

(en effet la méthode qu'on utilise jusque là est de faire un drawing à l'échelle 1:1 sans cartouche pour ensuite l'exporter en DXF mais ce n'est pas du tout performant).

Merci avance pour vos conseil à ce sujet.

Rafael

Haaa je viens de voir qu'il y a en fait:

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

et qu'on peut exporter des vues d'annotation.

Je regarde ce qu'on peut faire avec et je posterai les résultats ici.

1 « J'aime »

Bonjour,

Oui c'est bien la fonction ExportToDWG2 qu'il faut utiliser pour ce que tu veux faire, cette fonction remplace la fonction ExportFlatPatternView depuis la version 2017 de SW.

Cordialement,

Bonjour,

Voici mon code:

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

et l'output:

Donc deux problèmes:

1- Si je ne définie pas de vue dans dataView(0), l'export volumique fonctionne, si j'en définie de la manière suivante:

    '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

 

Alors mon export ne fonctionne plus...

 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 --> retourne FAUX

Même si je ne met qu'une vue front...

Mon but est de créer un vue d'annotation qui s'appelle "DXF" dans les pièces volumique que l'on veut envoyer en découpe. En effet, certaines sont dessinées dans les contexte de l'assemblage et ne sont donc pas centrée sur l'origine, ni sur les plans de bases et il convient dans ce cas que le dessinateur choisisse la vue qu'il sert à la découpe. Un peu comme quand on fait "Exporter la face" en DXF.

Je ne peux pas utiliser: swExportToDWG_ExportSelectedFacesOrLoops  car je ne pense pas pouvoir trouver la bonne face de manière automatique.

(a moins que je puisse sélectionner automatique la face qui a la plus grande surface.... mais bon c'est pas top et ca risque d'être gourmant en temps)

 

2- Pour les pièces de tôlerie, j'exporte bien chaque configuration, ca marche cool. En revanche, j'aimerai être sur qu'il utilise bien la géométrie de la pièce dans son état développé avec les fonctions qu'on a associées au développé (dans le dossier état déplié). Car on y fait souvent des petites modifs uniquement pour la découpe, exemple:

- On ajoute des petites marques de pliages à l'extrémité des plis

- On cache certaines face, comme par exemple les lamages que l'on fait en reprise, sinon on se retrouve avec un dxf avec deux cercle concentrique, et le but est de n'avoir que des contour fermés.

Dans mon code posté ci dessus, je traversais les configuration pour trouver les FLAT, mais les pièces de tôlerie n'ont pas de config FLAT tant qu'on a pas créer la mise en plan. L'utilisation de swExportToDWG me convient donc bien car même si la pièce n'a pas de config flat pattern, l'export se fait bien.

 

Voilà vos conseils sont les bienvenues sur les autres parties du code également.

Merci beaucoup !

Voici un extrait de code complètement Tronqué/dégraissé car on doit être inférieur à 600char:

Je n'ai laissé que les parties qui nous intéresse pour ce sujet:

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
                        

            

 

Bonjour,

Point 1 : Oui ce n'est pas évident sur les exemples que l'on trouve dans l'aide mais pour exporter les vues il faut nommer celles-ci exactement comme elles le sont dans la palette de vues des mises en plan donc par exemple :

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

On voit que la vue nommée dxf n'a pas le signe * devant son nom et que les autres vues sont en français.

Point 2 : Je n'ai pas regardé ... [EDIT] tu peux essayer en rajoutant juste l'export d'une vue nommée "Etat déplié" donc par ajout d'une ligne dataViews(11) = "Etat déplié" sans oublier de modifier la ligne "Dim dataViews(11) As String" [FIN EDIT]

Cordialement,