We hebben een macro nodig voor solidwork die een dxf-bestand uitvoert met brandlijnen om te vouwen

We hebben een macro nodig voor solidwork die een dxf-bestand uitvoert met brandlijnen om te vouwen.

We plaatsen 1/2" gele graveerlijnen op de bovenste vouwen van de gevouwen stukken.

Nu voegen we ze allemaal met de hand toe .

Heeft iemand dezelfde manier om dingen te doen of een manier om dingen te doen die dicht bij degene ligt die na aanpassing bij ons zou kunnen passen?


exemple.jpg

Hallo

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.

1 like

SW kan vouwlijnen weergeven op de uitgeklapte (teken)weergave.
Is er een verschil met wat je zoekt?
In uw voorbeeld zijn er geen "gele lijnen"

Stefbeno,

Als je goed naar de foto kijkt, zie je twee kleine gele lijnen voor het graveren van de vouwen aan de randen van het stuk...

1 like

Dezelfde procedure voor ons, maar ook handleiding voor het markeren.

Voeg je de lijnen toe aan de weergave in Solidworks of aan de dxf na export?

Omdat het mogelijk is om lijnen op de weergave te maken met de CreateLine-functie

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

1 like

We voegen de lijnen rechtstreeks toe aan een tekening gewijd aan de DXF in massiewerk.

Is je zou een voorbeeld van deze tekening kunnen bijvoegen met een kamer.

Als het even kan met de gele lijnen.

Ik heb aan het begin van het gesprek een afbeelding bijgevoegd van waar ik naar op zoek ben.

Hallo

Kan exporteren naar DXF-formaat met de optie "buiglijn" ingeschakeld u niet helpen?

Nou, van daaruit om het in een macro te integreren, weet ik niet, maar het bespaart je om ze in een 1e keer met de hand te zetten

A+

Hubert


tole_pliee.jpg

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

 

 

5 likes

  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.

1 like

Om ze geel te maken, voeg je toe:

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

Na elk:

 Stel swSketchSeg = swModel.SketchManager.CreateLine in

4 likes

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"

en de volgende regel erna: "Wend"

swLayerMgr.SetCurrentLayer SavedLayerName

2 likes

Hallo, nogmaals bedankt JeromeP, weet je of het mogelijk is om beperkingen te geven aan de graveerlijn wanneer we de macro gebruiken?

 

Bedankt


sans_titre.jpg

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.

3 likes

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!


pi_092441.sldprt

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


markfoldlines.jpg
2 likes

Als u de lijnen op een nieuwe laag wilt plaatsen, vervangt u:

swLayerMgr.SetCurrentLayer "mijnLayer"

bij:

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

1 like