Nous avons besoin d'une macro pour solidwork qui sort un fichier dxf avec des lignes de gravure pour le pliage

Nous avons besoin d'une macro pour solidwork qui sort un fichier dxf avec des lignes de gravure pour le pliage.

nous mettons des lignes de gravure de 1/2" jaune sur les plies haut des pièces plié.

présentement nous les ajoutons tous a la main.

est-ce que quelqu'un a la même façon de faire ou une façon de faire proche de celle la qui pourrait nous convenir après modification?


exemple.jpg

Bonjour,

Nous fonctionnons de la même manière, nous mettons le marquage manuellement lors de la création du fichier que l'on utilisera pour le logiciel de découpe. Je ne pense pas que se soit possible de le faire via une macro car votre marquage n'est pas réalisé via Solidworks.

1 « J'aime »

SW peut afficher des lignes de pliage sur la vue déplié (en mise en plan).
Y-a-t-il une différence avec ce que vous cherchez ?
Sur votre exemple, il n'y a pas de "lignes jaunes"

stefbeno,

Si tu regardes bien l'image, tu verras deux petits traits jaunes pour le gravage des plis aux bords de la pièce...

1 « J'aime »

Même procédure pour nous mais manuel aussi pour le marquage.

Est ce que vous ajoutez les lignes sur la vue dans Solidworks ou sur le dxf après l'export?

Car il est possible de creer des lignes sur la vue avec la fonction CreateLine

http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchmanager~createline.html

1 « J'aime »

Nous ajoutons les lignes directement sur une mise en plan dédié au DXF dans solidwork.

Est que tu pourrais joindre un exemple de cette mise en plan avec une pièce.

Si possible avec les lignes jaunes.

j'ai inclus une image de ce que je recherche au début de la conversation.

Bonjour

est ce que exporter au format DXF avec l'option "ligne de pliage" activée ne peut pas vous aider?

Bon de là a l'intégrer dans une macro j'en sais rien , mais ca vous évite de les mettre à la main dans un 1er temps

A+

Hubert


tole_pliee.jpg

Le code ci-dessous créera des lignes de 3 mm a chaque extremitées des lignes de plie.

 

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swMathUtil As SldWorks.MathUtility
Dim BendlinesArr As Variant
Dim Bendline As Variant
Dim swSketch As SldWorks.Sketch
Dim swModelToViewXForm As SldWorks.MathTransform
Dim swModelToSketchXForm As SldWorks.MathTransform
Dim swDrawingToViewXForm As SldWorks.MathTransform
Dim swSketchLine As SldWorks.SketchLine
Dim swSkStartPt As SldWorks.SketchPoint
Dim swSkEndPt As SldWorks.SketchPoint
Dim swSketchSeg As SldWorks.SketchSegment
Dim nPt(2) As Double
Dim vPt As Variant
Dim swStartPt As SldWorks.MathPoint
Dim swEndPt As SldWorks.MathPoint
Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
Dim X3 As Double, Y3 As Double, X4 As Double, Y4 As Double
Dim Length As Double, Delta As Double

Sub main()
Set swApp = Application.SldWorks
Set swMathUtil = swApp.GetMathUtility
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView

Dim swLayerMgr As SldWorks.LayerMgr
Set swLayerMgr = swModel.GetLayerManager
Dim SavedLayerName As String
SavedLayerName = swLayerMgr.GetCurrentLayer
'optionnel: ajoute les lignes sur un nouveau calque'
'swLayerMgr.AddLayer "nouveauCalque", "", 0, 0, 0
'optionnel: ajoute les lignes sur un calque existant'
'swLayerMgr.SetCurrentLayer "monCalque"

While Not swView Is Nothing
    If swView.IsFlatPatternView Then
        swDraw.ActivateView swView.GetName2
        If swView.GetBendLineCount > 0 Then
            BendlinesArr = swView.GetBendLines
            For Each Bendline In BendlinesArr
                Set swSketchLine = Bendline
                If swSketchLine.IsBendLine Then
                    Set swSkStartPt = swSketchLine.GetStartPoint2
                    Set swSkEndPt = swSketchLine.GetEndPoint2
                    Set swSketch = swSketchLine.GetSketch
                    Set swModelToSketchXForm = swSketch.ModelToSketchTransform.Inverse
                    Set swModelToViewXForm = swView.ModelToViewTransform
                    Set swDrawingToViewXForm = drawingToViewTransform(swView).Inverse

                    nPt(0) = swSkStartPt.X
                    nPt(1) = swSkStartPt.Y
                    nPt(2) = swSkStartPt.Z
                    vPt = nPt
                    Set swStartPt = swMathUtil.CreatePoint(vPt)
                    Set swStartPt = swStartPt.MultiplyTransform(swModelToSketchXForm)
                    Set swStartPt = swStartPt.MultiplyTransform(swModelToViewXForm)
                    Set swStartPt = swStartPt.MultiplyTransform(swDrawingToViewXForm)

                    nPt(0) = swSkEndPt.X
                    nPt(1) = swSkEndPt.Y
                    nPt(2) = swSkEndPt.Z
                    vPt = nPt
                    Set swEndPt = swMathUtil.CreatePoint(vPt)
                    Set swEndPt = swEndPt.MultiplyTransform(swModelToSketchXForm)
                    Set swEndPt = swEndPt.MultiplyTransform(swModelToViewXForm)
                    Set swEndPt = swEndPt.MultiplyTransform(swDrawingToViewXForm)

                    X1 = swStartPt.ArrayData(0)
                    Y1 = swStartPt.ArrayData(1)
                    X2 = swEndPt.ArrayData(0)
                    Y2 = swEndPt.ArrayData(1)

                    Set swSketchSeg = swSketchLine
                    'set lines length to 3mm'
                    Delta = 0.003
                    Length = swSketchSeg.GetLength

                    X3 = (X2 - X1) * Delta / Length + X1
                    Y3 = (Y2 - Y1) * Delta / Length + Y1
                    X4 = (X1 - X2) * Delta / Length + X2
                    Y4 = (Y1 - Y2) * Delta / Length + Y2

                    swModel.SetAddToDB True
                    Set swSketchSeg = swModel.SketchManager.CreateLine(X1, Y1, 0#, X3, Y3, 0#)
                    swSketchSeg.Color = RGB(255, 255, 0)
                    Set swSketchSeg = swModel.SketchManager.CreateLine(X2, Y2, 0#, X4, Y4, 0#)
                    swSketchSeg.Color = RGB(255, 255, 0)
                    swModel.SetAddToDB False
                End If
            Next
        End If
    End If
    Set swView = swView.GetNextView
Wend
swLayerMgr.SetCurrentLayer SavedLayerName
swModel.ClearSelection2 True
End Sub

Public Function drawingToViewTransform(swView As SldWorks.View) As SldWorks.MathTransform
    Dim swMathUtil  As SldWorks.MathUtility
    Dim transformData(15) As Double
    Set swMathUtil = swApp.GetMathUtility
    transformData(0) = Cos(swView.Angle)
    transformData(1) = Sin(swView.Angle)
    transformData(2) = 0#
    transformData(3) = -Sin(swView.Angle)
    transformData(4) = Cos(swView.Angle)
    transformData(5) = 0#
    transformData(6) = 0#
    transformData(7) = 0#
    transformData(8) = 1#
    transformData(9) = swView.Position(0)
    transformData(10) = swView.Position(1)
    transformData(11) = 0#
    transformData(12) = swView.ScaleDecimal
    transformData(13) = 0#
    transformData(14) = 0#
    transformData(15) = 0#
    Set drawingToViewTransform = swMathUtil.CreateTransform(transformData)
End Function

 

 

5 « J'aime »

Merci  JeromeP pour la macro elle fonctionne super bien.
il ne nous manque seulement qu'a trouvé le moyen de rendre les lignes d'esquisse de la bonne couleur, quelle soient contraint sur les lignes de pliage étant donné que nous les enlevons après et qu'elles soient seulement pour les plies up.

1 « J'aime »

pour les rendre jaune, ajoute:

swSketchSeg.Color = RGB(255, 255, 0)

après chaque:

 Set swSketchSeg = swModel.SketchManager.CreateLine

4 « J'aime »

Salut, cette macro pourrait également m'intéresser, mais je n'ai pas réussi à la faire fonctionner. Comment fonctionne elle exactement?

Depuis une MEP avec les lignes de pliage montré, caché?

Ou sinon c'est en copiant le code que je fais une erreur...

Dernier point est il possible de passer ces trait jaunes sur un certain calques également? (Nous avons un nettoyage des plan de découpe en automatique avec intégration qui cache certain calques, les filetages et le calque fond de plan avant d'enregistrer en dxf)

Avant de lancer la macro il faut que les lignes de pliage soient visibles.

Pour créer les lignes sur le calque "moncalque", ajoute les lignes suivantes après "Set swView = swView.GetNextView" :

Dim swLayerMgr As SldWorks.LayerMgr
Set swLayerMgr = swModel.GetLayerManager
Dim SavedLayerName As String
SavedLayerName = swLayerMgr.GetCurrentLayer
swLayerMgr.SetCurrentLayer "monCalque"

et la ligne suivante après: "Wend"

swLayerMgr.SetCurrentLayer SavedLayerName

2 « J'aime »

Bonjour, merci encore JeromeP est-ce que tu sais si il est possible de donné des contrainte au ligne de gravure lorsque nous utilisons la Macro?

 

Merci


sans_titre.jpg

oui. il faut juste mettre une apostrophe ' devant les lignes :(ou supprimer ces lignes)

' swModel.SetAddToDB True

' swModel.SetAddToDB False

par contre ca va mettre des relations automatiques, alors ca peut faire n'importe quoi, surtout si y a un zoom arrière, alors faire un zoom avant (même si la pièce devient plus grosse que l'écran) avant de lancer la macro.

Faire des relations plus spécifiques est possible, mais ca demanderai plus de travail.

3 « J'aime »

Macro très sympa maintenant que j'ai réussi à la faire fonctionner! Par contre sur certaine pièce impossible cela bug Exemple 1 ci-joint les traits ne sont pas au bon endroit et erreur dans la macro.

De plus impossible de mettre les trait sur un calque non créé. Mais déjà sur les pièces ou ça fonctionnent cela va nous faire gagner pas mal de temps!


pi_092441.sldprt

Bonjour, quand j'ai besoin de marquer les lignes aux extrémités je me sert d'un outil dans Mycadtools qui s'appelle "MarkFoldLines".

Il génère la forme désirée au bout des lignes de pliages. (dans ce cas là, un triangle de 1mm, mais on peut très bien mettre une ligne ou autre. ce tracé est un bloc donc à voir si dans les options, on peut lui dire que les blocs sont jaunes.

Edit : en changeant la couleur de l'esquisse du bloc ça fonctionne


markfoldlines.jpg
2 « J'aime »

Pour mettre les lignes sur un nouveau calque, remplace:

swLayerMgr.SetCurrentLayer "monCalque"

par:

swLayerMgr.AddLayer "monCalque", "", 0, 0, 0
 

1 « J'aime »