We werken op dezelfde manier, we plaatsen de markering handmatig bij het maken van het bestand dat we zullen gebruiken voor de snijsoftware. Ik denk niet dat het mogelijk is om het via een macro te doen, omdat je markering niet via Solidworks wordt gedaan.
De onderstaande code maakt lijnen van 3 mm aan elk uiteinde van de botlijnen.
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
Bedankt JeromeP voor de macro, het werkt geweldig. Het enige dat we nodig hebben, is een manier vinden om de schetslijnen de juiste kleur te geven, die beperkt zijn tot de vouwlijnen omdat we ze daarna verwijderen en ze alleen voor de vouw zijn.
Hallo, ik zou ook geïnteresseerd kunnen zijn in deze macro, maar ik kon hem niet aan de praat krijgen. Hoe werkt het precies?
Van een Europarlementariër met de getoonde buiglijnen, verborgen?
Of anders maak ik een fout door de code te kopiëren...
Laatste punt, is het mogelijk om deze gele lijnen ook op een bepaalde laag te passeren? (We hebben een automatische opschoning van de snijvlakken met integratie die enkele lagen, draden en de achtergrondlaag verbergt voordat ze worden opgeslagen in dxf)
Voordat de macro wordt gestart, moeten de buiglijnen zichtbaar zijn.
Om de lijnen op de "mijnlaag" laag te maken, voeg je de volgende regels toe na "Sen swView = swView.GetNextView" :
Dim swLayerMgr Als SldWorks.LayerMgr Stel swLayerMgr = swModel.GetLayerManager in Dim SavedLayerName als tekenreeks SavedLayerName = swLayerMgr.GetCurrentLayer swLayerMgr.SetCurrentLayer "mijnLayer"
Ja. Je hoeft alleen maar een apostrof ' voor de regels te zetten :(of deze regels te verwijderen)
' swModel.SetAddToDB Waar
' swModel.SetAddToDB Onwaar
Aan de andere kant zal het automatische relaties plaatsen, dus het kan alles doen, vooral als er uitgezoomd wordt, dus zoom in (zelfs als de kamer groter wordt dan het scherm) voordat u de macro start.
Het is mogelijk om specifiekere relaties te leggen, maar het zou meer werk vergen.
Zeer mooie macro nu ik erin geslaagd ben om het aan het werk te krijgen! Aan de andere kant, op een onmogelijk deel, deze bug Voorbeeld 1 bijgevoegd, de lijnen zijn niet op de juiste plaats en fout in de macro.
Bovendien is het onmogelijk om de streken op een niet-gemaakte laag te plaatsen. Maar al op de delen waar het werkt, zal het ons veel tijd besparen!
Hallo, als ik de lijnen aan de uiteinden moet markeren, gebruik ik een tool in Mycadtools genaamd "MarkFoldLines".
Het genereert de gewenste vorm aan het einde van de vouwlijnen. (in dit geval een driehoek van 1 mm, maar we kunnen heel goed een of andere lijn plaatsen. Dit pad is een blok, dus we moeten kijken of we in de opties kunnen zien dat de blokken geel zijn.
Edit: het veranderen van de kleur van de schets van het blok werkt