Wir benötigen ein Makro für solidwork, das eine dxf-Datei mit Brennlinien zum Falten ausgibt

Wir benötigen ein Makro für solidwork, das eine dxf-Datei mit Brennlinien zum Falten ausgibt.

Wir setzen 1/2" gelbe Gravurlinien auf die oberen Falten der gefalteten Stücke.

Jetzt fügen wir sie alle von Hand hinzu .

Hat irgendjemand die gleiche Art, Dinge zu tun, oder eine Art, Dinge zu tun, die denen nahe kommen, die uns nach einer Modifikation passen könnten?


exemple.jpg

Hallo

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.

1 „Gefällt mir“

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"

Stefbeno,

Wenn Sie sich das Bild genau ansehen, sehen Sie zwei kleine gelbe Linien für die Gravur der Falten an den Rändern des Stücks...

1 „Gefällt mir“

Gleiches Verfahren für uns, aber auch Handbuch für die Markierung.

Fügen Sie die Linien nach dem Export zur Ansicht in Solidworks oder zur DXF-Datei hinzu ?

Denn es ist möglich, Linien in der Ansicht mit der Funktion CreateLine zu erstellen

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

1 „Gefällt mir“

Wir fügen die Linien direkt zu einer Zeichnung hinzu, die dem DXF in Solidwork gewidmet ist.

Sie könnten ein Beispiel für diese Zeichnung an einen Raum anhängen.

Wenn möglich mit den gelben Linien.

Ich habe zu Beginn des Gesprächs ein Bild von dem eingefügt, wonach ich suche.

Hallo

Kann Ihnen der Export in das DXF-Format mit aktivierter Option "Biegelinie" nicht helfen?

Nun, von dort aus kann ich es in ein Makro integrieren, ich weiß es nicht, aber es erspart Ihnen, sie in einem 1. Mal von Hand zu legen

A+

Hubert


tole_pliee.jpg

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

 

 

5 „Gefällt mir“

  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.

1 „Gefällt mir“

Um sie gelb zu machen, fügen Sie Folgendes hinzu:

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

Nach jedem:

 Legen Sie swSketchSeg = swModel.SketchManager.CreateLine fest

4 „Gefällt mir“

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"

und die nächste Zeile danach: "Wend"

swLayerMgr.SetCurrentLayer SavedLayerName

2 „Gefällt mir“

Hallo, nochmals vielen Dank JeromeP, wissen Sie, ob es möglich ist, der Gravurlinie Einschränkungen zu geben, wenn wir das Makro verwenden?

 

Vielen Dank


sans_titre.jpg

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.

3 „Gefällt mir“

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!


pi_092441.sldprt

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


markfoldlines.jpg
2 „Gefällt mir“

Um die Linien auf einer neuen Ebene zu platzieren, ersetzen Sie:

swLayerMgr.SetCurrentLayer "myLayer"

bis:

swLayerMgr.AddLayer "myLayer", "", 0, 0, 0
 

1 „Gefällt mir“