Wir arbeiten auf die gleiche Weise, wir setzen die Markierung manuell ein, wenn wir die Datei erstellen, die wir für die Schneidesoftware verwenden werden. Ich glaube nicht, dass es möglich ist, dies über ein Makro zu tun, da Ihre Markierung nicht über Solidworks erfolgt.
SW kann Falzlinien in der abgewickelten (Zeichnungs-)Ansicht anzeigen. Gibt es einen Unterschied zu dem, was Sie suchen? In Ihrem Beispiel gibt es keine "gelben Linien"
Der folgende Code erstellt 3-mm-Linien an jedem Ende der Flunder-Leinen.
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
Danke JeromeP für das Makro, es funktioniert super. Alles, was wir brauchen, ist, einen Weg zu finden, die Skizzenlinien in der richtigen Farbe zu haben, die auf die Faltlinien beschränkt sind, da wir sie nachträglich entfernen und sie nur für das Hochklappen sind.
Hallo, ich könnte auch an diesem Makro interessiert sein, aber ich konnte es nicht zum Laufen bringen. Wie genau funktioniert das?
Von einem MEP, bei dem die Kurvenlinien eingeblendet sind, versteckt?
Oder ich mache einen Fehler, indem ich den Code kopiere...
Letzter Punkt: Ist es möglich, diese gelben Linien auch auf einer bestimmten Ebene zu verlaufen? (Wir haben eine automatische Reinigung der Schnittebenen mit Integration, die einige Ebenen, Fäden und die Hintergrundebene vor dem Speichern in DXF ausblendet)
Vor dem Starten des Makros müssen die Biegelinien sichtbar sein.
Um die Linien auf der Ebene "mylayer" zu erstellen, fügen Sie die folgenden Zeilen nach "Sand swView = swView.GetNextView" hinzu:
Dim swLayerMgr As SldWorks.LayerMgr Legen Sie swLayerMgr = swModel.GetLayerManager fest Dim SavedLayerName als Zeichenfolge SavedLayerName = swLayerMgr.GetCurrentLayer swLayerMgr.SetCurrentLayer "myLayer"
Ja. Sie müssen nur ein Apostroph ' vor die Zeilen setzen :(oder diese Zeilen löschen)
' swModel.SetAddToDB Wahr
' swModel.SetAddToDB Falsch
Auf der anderen Seite werden automatische Beziehungen gesetzt, so dass es alles tun kann, insbesondere wenn es ein Verkleinern gibt, also zoomen Sie hinein (auch wenn der Raum größer als der Bildschirm wird), bevor Sie das Makro starten.
Es ist möglich, spezifischere Beziehungen herzustellen, aber es würde mehr Arbeit erfordern.
Sehr schönes Makro, jetzt, wo ich es geschafft habe, es zum Laufen zu bringen! Auf der anderen Seite, bei einem unmöglichen Teil, diesem Fehler Beispiel 1 angehängt, sind die Zeilen nicht an der richtigen Stelle und Fehler im Makro.
Darüber hinaus ist es unmöglich, die Striche auf eine nicht erstellte Ebene zu legen. Aber schon an den Stellen, an denen es funktioniert, sparen wir viel Zeit!
Hallo, wenn ich die Linien an den Enden markieren muss, verwende ich ein Werkzeug in Mycadtools namens "MarkFoldLines".
Er erzeugt die gewünschte Form am Ende der Falzlinien. (In diesem Fall ein 1mm Dreieck, aber wir können sehr gut eine Linie oder etwas anderes setzen. Dieser Pfad ist ein Block, also müssen wir sehen, ob wir in den Optionen sagen können, dass die Blöcke gelb sind.
Bearbeiten: Ändern der Farbe der Skizze der Blockarbeiten