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.
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"
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
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.
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"
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.
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!
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