Export assemblage vers DXF

Bonjour,

Nous aurions besoin d'exporter des fichiers assemblage vers du DXF (échelle 1:1)
Pas d'export de masse mais dans l'idée, ca serait plutôt un export en cours de conception

Premier soucis, comme vous le savez peut-être, il est impossible d'exporter directement un assemblage vers du DXF (en tout cas à ma connaissance sous 2017)
On a peut être la possibilité de faire une macro, pour exporter vers un part puis export vers du DXF, ici deuxième soucis car nous n'avons aucune connaissance sur les macros

A notre disposition, nous avons des myCADtools ou du myPDMtools
Mais nous ne connaissons pas trop toutes les capacités de ces outils.

Auriez vous des pistes à donner ?
Merci d'avance,
Séb 

Bonjour,

J'ai trouvé il y a longtemps cette macro sur le forum qui enregistre tout les fichiers d'un assemblage en PDF; si vous vous y connaissez vous pouvez l'adapter 


pdf_des_composants_de_lassemblage.swp

Merci ac cobra 427 pour ton fichier
Mais je n'arrive pas à la lancer, rien ne s'exécute j'ai l'impression, aucun fichier PDF ne se génère
Et niveau édition de macro je suis une bille

Edit : Je viens de comprendre qu'il faut un plan drw déjà créé
Du coup, la macro s'exécute

Il n'est pas possible d'exporter un assemblage vers un dxf il faut obligatoirement passer par une mise en plan avec le choix des vues à exporter.

Bien entendu il faudra ré-enregistrer la MEP au fur et à mesure de l'avancement.

Pas sûr qu'une macro te fasse gagner énormément de temps sur la question. il est aussi rapide de poser toi m^me tes 3 vues et d'exporter que d'appuyer sur un bouton et de laisser la macro faire.

Pour les outil MyCad même chose pas vraiment d'intérêt pour le sujet

Salut,

J'ai une macro qui fait des DXF de pièces et d'assemblages.

Il suffit de créer un fond de plan vide( chemin à indiquer dans la macro) et la macro enregistre en dxf à l'échelle 1.

J'espère que cela répondra à ta demande

a+


dxf.txt
1 « J'aime »

Merci beaucoup gwygwy
Voici une avancée déjà formidable !

Le DXF depuis l'assemblage se génère correctement
Il faut juste que j'arrive à position l'assemblage en 0,0,0 (par forcément l'origine du 3D)
Et à renommer le fichier

Est-ce possible depuis une macro d'avoir une boite de dialogue pour écrire le nom du fichier souhaité ? ou bien récupérer le nom d'une propriété SW du fichier ?

1 « J'aime »

Bonjour,

Un petit exemple ICI pour récupérer une propriété personnalisée ...

Sinon pour une boite de dialogue qui attend une réponse :

Dim maValeur As String
maValeur = InputBox("Ma question ?", "Mon titre", "Ma valeur par défaut")

Cordialement,

Merci d.roger pour le complément,

Donc, si je souhaite que le DXF généré soit nommé par "maValeur"
Il faut que je modifie dans la macro envoyée par gwygwy le bloc Part.SaveAs ?

    
'--- Sauvegarde du dxf et fermeture de la MEP temporaire
    Part.SaveAs PathNoExtension & ".DXF"
    Part.ClearSelection2 True
    Set Part = swApp.ActiveDoc
    swApp.CloseDoc swDraw.GetTitle 'Quitte sans sauvegarder la MEP.

 

 .

Je rencontre des difficultés également à positionner mon assemblage en 0,0,0
Par défaut, l'origine du DXF se met toujours au centre de mon assemblage

Oui il faut modifier le bloc Part.SaveAs pour recalculer la variable PathNoExtension.

Un petit exemple :

Dim maValeur As String
maValeur = InputBox("Ma question ?", "Mon titre", "Ma valeur par défaut")
    
Dim FilePath As String
Dim FileTitle As String
Dim PathSize As Long
Dim TitleSize As Long
Dim PathNoExtension As String
FilePath = Part.GetPathName
FileTitle = Part.GetTitle
PathSize = Strings.Len(FilePath)
TitleSize = Strings.Len(FileTitle)
PathNoExtension = Strings.Left(FilePath, PathSize - TitleSize)

MsgBox PathNoExtension & maValeur & ".dxf"

Cordialement,

Merci beaucoup d.roger

Exécutant la macro depuis un assemblage,
J'ai remplacé les Part par sw.model

FilePath = Part.GetPathName
FileTitle = Part.GetTitle

Le resultat est vraiment pas mal,
Reste plus qu'a positionner l'ensemble en 0,0,0
Et a enregistrer le DXF dans un dossier en brut et non à l'empalcement du 3D

Qu'est-ce que tu entends par "Reste plus qu'a positionner l'ensemble en 0,0,0" ? une capture d'écran de ce que tu obtiens et de ce que tu voudrais serait la bienvenue.

Et pour enregistrer le dxf dans un dossier en brut il te faut retravailler la variable "PathNoExtension" à ta guise.

A gauche, dxf issu de la macro
A droit, dxf modifié manuellement avec repositionnement de la projection sur l'origine

Concernant le chemin, j'ai gratté un peu et c'est ok ;)


origine.png

OK, donc à voir si quelque chose comme ce qui suit te convient :

Option Explicit

Sub main()

    Dim swApp           As SldWorks.SldWorks
    Dim swModel         As SldWorks.ModelDoc2
    Dim swDraw          As SldWorks.DrawingDoc
    Dim swView          As SldWorks.View
    Dim retval          As String
    Dim FilePath        As String
    Dim FileTitle       As String
    Dim PathSize        As Long
    Dim TitleSize       As Long
    Dim PathNoExtension As String
    Dim maValeur        As String

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc

'--- Création du nom du fichier
    FilePath = swModel.GetPathName
    FileTitle = swModel.GetTitle
    PathSize = Strings.Len(FilePath)
    TitleSize = Strings.Len(FileTitle)
    PathNoExtension = Strings.Left(FilePath, PathSize - TitleSize)
    
    maValeur = InputBox("Veuillez indiquer le nom du fichier dxf ?", "Macro Asm To DXF", "MonFichier")

    PathNoExtension = PathNoExtension & maValeur & ".dxf"

'--- Calcul du décalage de l'origine
    Dim vBox                    As Variant
    Dim swAssy                  As SldWorks.AssemblyDoc
    Dim X_max                   As Double
    Dim X_min                   As Double
    Dim Y_max                   As Double
    Dim Y_min                   As Double
    Dim Z_max                   As Double
    Dim Z_min                   As Double

    If swModel.GetType() <> swDocASSEMBLY Then Exit Sub
    
    Set swAssy = swModel
    vBox = swAssy.GetBox(swBoundingBoxIncludeRefPlanes)

    X_max = vBox(3)
    X_min = vBox(0)
    Y_max = vBox(4)
    Y_min = vBox(1)
    Z_max = vBox(5)
    Z_min = vBox(2)

    Dim decalX As Double
    Dim decalY As Double
    decalX = (X_max - X_min) / 2
    decalY = (Y_max - Y_min) / 2
    
'--- Création de la mise en plan
    retval = swApp.GetUserPreferenceStringValue(swDefaultTemplateDrawing)
    Set swDraw = swApp.NewDocument(retval, 0, 0, 0)

'--- Insertion de la vue
    Set swView = swDraw.CreateDrawViewFromModelView3(swModel.GetPathName, "*Face", decalX, decalY, 0)
    
'--- Rend invisible les annotations de plis
    swView.ShowSheetMetalBendNotes = False

'--- Force la vue à l'échelle 1:1
    Dim swSheet As Sheet
    Dim status As Boolean
    Set swView = swDraw.GetFirstView
    Set swSheet = swDraw.GetCurrentSheet
    status = swSheet.SetScale(1, 1, True, True)
    
'--- Sauvegarde du dxf et fermeture de la MEP temporaire
    swDraw.SaveAs PathNoExtension & ".DXF"
    swDraw.ClearSelection2 True
    swApp.CloseDoc swDraw.GetTitle

End Sub

Je n'ai pas géré le fait de sauvegarder le fichier dxf dans un autre dossier ...

Cordialement,

Salut

@sjoly_TRI

Je suis content que ma macro t'ai aidé à avancer

A+

Merci d.roger
Un repositionnement est fait mais ce n'est pas bien calé sur x0 y0 (CF image)

Je t'avoue ne pas comprend le principe de decalX et decalY avec les xMax xMin (...)


2020-10-27_16_02_01-draftsight_enterprise_-_monfichier1.dxf_.png

Finalement, je viens de trouver la raison,
Nous avons un squelette de plans qui sont hors 3D
Et la conversion avec les Xmax Xmin... prennent en compte les plans

 


2020_10_27_16_16_58_solidworks_premium_2017_x64_edition_r_a.106568.sldasm_lecture_seule_.png

Le principe est de calculer les cotes du "BoundingBox" de l'assemblage et de déplacer la vue de la moitié de celles-ci puisque par défaut l'origine de la vue est le centre de l'assemblage.

Essayes en remplaçant la ligne :

vBox = swAssy.GetBox(swBoundingBoxIncludeRefPlanes)

par celle-ci :

vBox = swAssy.GetBox(False)

dès fois que tu aurais un plan qui gênerait ...

Cordialement,

Daniel

En effet, c'est mieux ainsi
Merci beaucoup à vous tous pour le temps passé et de votre aide !

1 « J'aime »