DXF Makro Coin Export

Hallo, ich habe lange versucht, ein einfaches Makro zu erstellen, um die aktuelle Ansicht meines Teils (.part) in DXF zu exportieren, egal wie sehr ich versuche, exporttoDWG2 zu verwenden, ich schaffe es nie, mein Maccro zum Laufen zu bringen, ich fange von weit in VBA an, auch habe ich versucht, mehrere Codes zu hacken, die ich zu anderen Themen gefunden habe, aber nichts hilft. und ChatGPT hat es nicht geschafft, meine Bedürfnisse zu erfüllen, auch wenn es einfach erscheint.

Ich kann es kaum erwarten, Ihnen das Forum Ingenieure zu lesen :slight_smile:

ChatGPT ... Aber was habt ihr jetzt alle mit diesem Ding drauf? Es ist nie nur ein Roboter, der Textstücke, die er sieht, kopiert und einfügt. Kurz

Haben Sie versucht, ein Makro zu erstellen, indem Sie gelernt haben, indem Sie Ihre Bewegungen beim Erstellen eines DXF aufgezeichnet haben? Es könnte Ihnen ermöglichen, die grundlegenden Funktionen zu sehen, die für Ihre Aktion erforderlich sind

1 „Gefällt mir“

Es ist ein Gpt-Tool, es ist meiner Meinung nach viel mehr als das, aber ja, es nimmt diese Informationen aus einer großen Datenbank. In Kürze²

Ja, ich habe damit angefangen, aber selbst wenn ich ein DXF von meinem Teil erstelle, gibt es einen Code aus, ich versuche es erneut mit demselben Teil, indem ich das zuvor erstellte DXF lösche, es wird gestartet, scheint aber keine Aktion auszuführen und keine DXF-Erstellung in der Ausgabe ...

' ******************************************************************************
' macro recorded on 04/21/23 by CAO21
' ******************************************************************************
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

' Save As
longstatus = Part.SaveAs3("mon chemin.DXF", 0, 2)

' Redraw
Part.GraphicsRedraw2
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 22
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2020\templates\Mise en plan.drwdot", 0, 0, 0)
swApp.ActivateDoc2 "Mise en plan25 - Feuille1", False, longstatus
Set Part = swApp.ActiveDoc
Set Part = swApp.ActiveDoc
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 22
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
swApp.ActivateDoc2 "nom piece", False, longstatus
Set Part = swApp.ActiveDoc

' New View
Part.NameView "*En cours"
Dim myView As Object
Set myView = Part.CreateDrawViewFromModelView3("cheminpiece", "*En cours", 0, 0, 0)
boolstatus = Part.DeleteNamedView(*En cours)
Part.ClearSelection2 True
End Sub

Hier ist der Code, den es mir gibt... und wenn ich es danach ausführe, bekomme ich einen synthaxis-Fehler auf

boolstatus = Part.DeleteNamedView(*En cours)

Hallo
Der Syntaxfehler liegt daran, dass die Anführungszeichen um *In Bearbeitung vergessen wurden. Ohne die Anführungszeichen wird sie als Variable betrachtet, sodass sie nicht existiert oder leer ist, und gibt daher einen Fehler zurück.

2 „Gefällt mir“

Hallo Cyril danke für Ihre Antwort, es hat den synthaxe-Fehler gelöst, trotzdem bewegt sich das Problem etwas tiefer, wenn ich das Makro starte, habe ich die Nachricht
nächster:
image

Die Linie

Set myView = Part.CreateDrawViewFromModelView3("chemin de ma pièce.SLDPRT", "*En cours", 0, 0, 0)

wird nun hervorgehoben,

Wenn ich das Makro ausführe, wird auch eine leere Zeichnung geöffnet.

Hallo
Nach der Analyse ist das Makro meiner Meinung nach nicht für den Bedarf gemacht.
Wir sollten uns diesen Code lieber anschauen und gegebenenfalls anpassen.

Wo finde ich das? Kopieren Sie public_documents \samples\tutorial\api\2012-sm.sldprt nach ' c:\temp . ’

Normalerweise befindet sich dies im öffentlichen Dokumentenordner von Windows.
C:\Benutzer\Öffentliche\Dokumente\SOLIDWORKS\SOLIDWORKS XXXX\Beispiele\tutorial

Hallo @leon.c

Das angehängte Makro sollte in der Lage sein, die aktuelle Ansicht eines Teils im DXF- oder DWG-Format zu speichern.
Das Dokument muss geöffnet und das Dokument aktiv sein.
Beachten Sie, dass Flächenkörper in der SolidWorks Exportfunktion nicht berücksichtigt werden.

Herzliche Grüße
PartToDxfDwg.swp (76.5 KB)

3 „Gefällt mir“

EDIT: Es funktioniert auf 2 der 3 Stationen einwandfrei, auf der 3. funktioniert das Makro, aber dann ist es unmöglich, einen neuen Raum zu erstellen, das Problem bleibt bis zur Eröffnung eines anderen Raums bestehen. Haben Sie eine Idee, woher dieser Fehler kommen könnte? (Dies ist ein Detail, da wir uns in der Phase der DXF-Erstellung theoretisch nicht mehr in einer Phase der Erstellung neuer Teile befinden)

Hallo

Ich habe das gleiche Verhalten auf meinem PC, das Menü, das der Erstellungsfunktion zugeordnet ist, reagiert nach dem Ausführen des Makros nicht.
Durch die Befolgung der schrittweisen Ausführung ist das Anlegen eines neuen Teils im gesamten Makro bis hin zur Funktion ExportToDWG2 möglich und wird nach...
Es scheint die Ursache des Problems zu sein, und ich habe keine Ahnung, wie ich es umgehen kann.

2 „Gefällt mir“

Es scheint, dass dieses GPT den Code nicht gut strukturiert hat, dennoch zeigte es eine gute Logik von {think}, erstellen Sie ein MEP der aktuellen Ansicht und exportieren Sie dann nach dxf, nicht schlecht,

Option Explicit

Dim swApp As Object
Dim swModel As ModelDoc2
Dim swdrawing As DrawingDoc
Dim status As Boolean
Const modelPath As String = "C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2018\templates\Drawing.drwdot"
Const nameView As String = "Current"

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    If Not (swModel.GetType() = 1 Or swModel.GetType() = 2) Then
        MsgBox "Fonctional only on  'Part' or 'Assembly' documents.", vbCritical
        End
    End If
    Dim path As String
    path = swModel.GetPathName
    On Error GoTo err
    swModel.nameView nameView
    Set swdrawing = swApp.NewDocument(modelPath, 0, 0, 0)
    swdrawing.CreateDrawViewFromModelView3 path, nameView, 0, 0, 0
    Set swModel = swApp.ActiveDoc
    path = Left(path, InStr(1, path, ".")) + "dxf"
    Dim error As Long, warning As Long
    status = swModel.Extension.SaveAs(path, 0, 1, Nothing, error, warning)
    swApp.CloseDoc ""
    Set swModel = swApp.ActiveDoc
    swModel.DeleteNamedView nameView
    If status = False Then GoTo err
    MsgBox "Success", vbInformation
Exit Sub
err:
    MsgBox "Error in processing", vbCritical
End Sub

Er hätte erraten können, dass der Name (*In Bearbeitung) zur Ansichtspalette gehört, nicht zur Vorlage :grin:

Vielleicht wegen der Tabelle der Ansichten, die für 2 Ansichten deklariert ist, aber nur 1 definiert ist,

Hallo
Ich denke, es hängt eher mit der Tatsache zusammen, dass Objekte nicht aus dem Speicher geleert werden.
Das Formular bleibt zu Hause aktiv, hindert mich aber nicht daran, zumindest eine neue Datei zu erstellen (ich habe nicht versucht, etwas darin zu tun).
Ich denke, ich sollte "Set xxx = Nothing" an verschiedenen Stellen im Makro hinzufügen.

1 „Gefällt mir“

@m.blt mit diesem Makro habe ich nach dem Export keine Probleme mit der Erstellung neuer Teile, aber ich hatte das Problem mit einem anderen, ich hatte keine Zeit, es zu untersuchen, um den Unterschied zwischen den beiden zu sehen, aber wenn es hilft.

DXF mit Biegelinie.swp (36 KB)