Potrzebujemy makra dla solidworku, które wyprowadza plik dxf z liniami wybicia do składania

Potrzebujemy makra dla solidwork, które wyprowadza plik dxf z liniami wybicia do składania.

Na górnych fałdach złożonych kawałków umieszczamy żółte linie grawerowania 1/2 cala.

Teraz dodajemy je wszystkie ręcznie.

Czy ktoś ma taki sam sposób robienia rzeczy lub sposób robienia rzeczy zbliżony do tego, który mógłby nam odpowiadać po modyfikacji?


exemple.jpg

Witam

Pracujemy w ten sam sposób, oznaczenie umieszczamy ręcznie podczas tworzenia pliku, który wykorzystamy do oprogramowania do cięcia. Nie sądzę, aby można to było zrobić za pomocą makra, ponieważ twoje oznaczanie nie jest wykonywane przez Solidworks.

1 polubienie

SW może wyświetlać linie zagięcia w widoku rozwiniętym (rysunkowym).
Czy jest jakaś różnica w stosunku do tego, czego szukasz?
W Twoim przykładzie nie ma "żółtych linii"

stefbeno,

Jeśli przyjrzysz się uważnie obrazkowi, zobaczysz dwie małe żółte linie do grawerowania fałd na krawędziach elementu...

1 polubienie

Ta sama procedura dla nas, ale także instrukcja znakowania.

Czy linie są dodawane do widoku w Solidworks, czy do pliku dxf po eksporcie?

Ponieważ możliwe jest tworzenie linii w widoku za pomocą funkcji CreateLine

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

1 polubienie

Linie dodajemy bezpośrednio do rysunku dedykowanego dla DXF w solidworku.

Czy mógłbyś dołączyć przykład tego rysunku z pokojem.

Jeśli to możliwe, za pomocą żółtych linii.

Na początku rozmowy zamieściłem zdjęcie tego, czego szukam.

Witam

Czy eksport do formatu DXF z włączoną opcją "linia gięcia" może Ci nie pomóc?

Cóż, stamtąd, aby zintegrować go z makrem, nie wiem, ale oszczędza to przed ręcznym umieszczaniem ich za pierwszym razem

Klasa A+

Hubert


tole_pliee.jpg

Poniższy kod utworzy linie o średnicy 3 mm na każdym końcu linii flądry.

 

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 polubień

  Dziękuję JeromeP za makro, działa świetnie.
Wszystko, czego potrzebujemy, to znaleźć sposób, aby linie szkicu miały odpowiedni kolor, które są ograniczone na liniach zagięcia, ponieważ usuwamy je później i służą tylko do składania.

1 polubienie

Aby zmieniły kolor na żółty, dodaj:

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

Po każdym:

 Ustaw swSketchSeg = swModel.SketchManager.CreateLine

4 polubienia

Cześć, ja też mogę być zainteresowany tym makrem, ale nie mogłem go zmusić do działania. Jak to dokładnie działa?

Z MEP z pokazanymi, ukrytymi liniami zagięcia?

Albo to kopiując kod, popełniam błąd...

Ostatni punkt, czy możliwe jest przepuszczenie tych żółtych linii również na określonej warstwie? (Mamy automatyczne czyszczenie płaszczyzn cięcia z integracją, która ukrywa niektóre warstwy, gwinty i warstwę tła przed zapisaniem w dxf)

Przed uruchomieniem makra linie gięcia muszą być widoczne.

Aby utworzyć linie na warstwie "mylayer", dodaj następujące wiersze po "Sand swView = swView.GetNextView" :

Dim swLayerMgr jako SldWorks.LayerMgr
Ustaw swLayerMgr = swModel.GetLayerManager
Przyciemnij SavedLayerName jako ciąg
SavedLayerName = swLayerMgr.GetCurrentLayer
swLayerMgr.SetCurrentLayer "mojaWarstwa"

i następna linijka po: "Wend"

swLayerMgr.SetCurrentLayer SavedLayerNazwa_warstwy

2 polubienia

Witam, jeszcze raz dziękuję JeromeP czy wiesz, czy można nadać ograniczenia linii grawerowania, gdy używamy makra?

 

Dziękuję


sans_titre.jpg

Tak. Wystarczy, że umieścisz apostrof ' przed wierszami :(lub usuniesz te wiersze)

' swModel.SetAddToDB Prawda

' swModel.SetAddToDB Fałsz

Z drugiej strony umieści automatyczne relacje, więc może zrobić wszystko, zwłaszcza jeśli nastąpi pomniejszenie, więc powiększ (nawet jeśli pomieszczenie stanie się większe niż ekran) przed uruchomieniem makra.

Nawiązanie bardziej szczegółowych relacji jest możliwe, ale wymagałoby to więcej pracy.

3 polubienia

Bardzo fajne makro teraz, gdy udało mi się go uruchomić! Z drugiej strony, z jakiejś niemożliwej części, ten błąd Przykład 1 dołączony, linie nie są we właściwym miejscu i błąd w makrze.

Ponadto nie można umieścić pociągnięć na nieutworzonej warstwie. Ale już na częściach, na których to działa, zaoszczędzi nam to dużo czasu!


pi_092441.sldprt

Witam, kiedy muszę zaznaczyć linie na końcach, używam narzędzia w Mycadtools o nazwie "MarkFoldLines".

Generuje pożądany kształt na końcu linii zagięcia. (w tym przypadku trójkąt o średnicy 1 mm, ale bardzo dobrze możemy umieścić linię lub inną. Ta ścieżka to blok, więc musimy zobaczyć, czy w opcjach możemy powiedzieć, że bloki są żółte.

Edycja: zmiana koloru szkicu bloku działa


markfoldlines.jpg
2 polubienia

Aby umieścić linie na nowej warstwie, zamień:

swLayerMgr.SetCurrentLayer "mojaWarstwa"

przez:

swLayerMgr.AddLayer "mojaWarstwa", "", 0, 0, 0
 

1 polubienie