DXF Macro Munt Exporteren

Hallo, ik heb lang geprobeerd om een eenvoudige macro te maken om de huidige weergave van mijn onderdeel (.part) in DXF te exporteren, hoe vaak ik ook probeer exporttoDWG2 te gebruiken, ik slaag er nooit in om mijn maccro aan het werk te krijgen, ik begin van ver in VBA, ook heb ik geprobeerd om verschillende code te hacken die ik over andere onderwerpen heb gevonden, maar niets helpt. en ChatGPT slaagde er niet in om aan mijn behoefte te voldoen, ook al lijkt het eenvoudig.

Kan niet wachten om je te lezen het forum ingenieurs :slight_smile:

ChatGPT ... Maar wat hebben jullie nu allemaal met dit ding? Het is nooit zomaar een robot die stukjes tekst kopieert en plakt die hij ziet. Kort

Heb je geprobeerd een macro te maken door te leren door je bewegingen op te nemen bij het maken van een DXF? Het kan u in staat stellen de basisfuncties te zien die voor uw actie worden opgeroepen

1 like

Het is een Gpt-tool, het is naar mijn mening veel meer dan dat, maar ja, het haalt deze informatie uit een grote database. in het kort²

Ja, ik ben begonnen met dit te doen, maar zelfs als ik een DXF van mijn onderdeel maak, voert het een code uit, ik probeer het opnieuw met hetzelfde onderdeel door de DXF die eerder is gedaan te verwijderen, het wordt gestart maar lijkt geen actie te ondernemen, en geen DXF-creatie in de uitvoer ...

' ******************************************************************************
' 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 is de code die het komt naar mij toe ... en als ik het daarna uitvoer, krijg ik een synthaxis-foutmelding

boolstatus = Part.DeleteNamedView(*En cours)

Hallo
Voor de syntaxisfout is dit te wijten aan het vergeten van de aanhalingstekens rond *In uitvoering. Zonder de aanhalingstekens beschouwt het het als een variabele, dus aangezien het niet bestaat of leeg is, retourneert het een fout.

2 likes

Hallo Cyril, bedankt voor je antwoord, het heeft de synthaxe-fout opgelost, maar het probleem beweegt een beetje lager, wanneer ik de macro start, heb ik het bericht
volgend:
image

De lijn

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

is nu gemarkeerd,

Als ik de macro uitvoer, wordt er ook een lege tekening geopend.

Hallo
Na analyse is de macro naar mijn mening niet gemaakt voor de behoefte.
We moeten eerder naar deze code kijken en deze zo nodig aanpassen.

Waar kan ik dat vinden? Kopieer public_documents \samples\tutorial\api\2012-sm.sldprt naar ' c:\temp . ’

Normaal gesproken staat dit in de openbare map Documenten van Windows.
C:\Gebruikers\Openbaar\Documenten\SOLIDWORKS\SOLIDWORKS XXXX\samples\tutorial

Hallo @leon.c

De bijgevoegde macro moet in staat zijn om de huidige weergave van een onderdeel in DXF- of DWG-formaat op te slaan.
Het document moet open en het document actief zijn.
Houd er rekening mee dat oppervlaktelichamen niet in aanmerking worden genomen in de exportfunctie van SolidWorks.

Vriendelijke groeten
PartToDxfDwg.swp (76.5 KB)

3 likes

EDIT: het werkt perfect op 2 van de 3 stations, op de 3e werkt de macro, maar dan is het onmogelijk om een nieuwe kamer te maken, het probleem blijft bestaan tot de opening van een andere kamer. Enig idee waar deze bug vandaan zou kunnen komen? (Dit is een detail, gezien het feit dat we in de DXF-creatiefase theoretisch niet langer in een fase van het maken van nieuwe onderdelen zitten)

Hallo

Ik heb hetzelfde gedrag op mijn pc, het menu dat is gekoppeld aan de creatiefunctie reageert niet na het uitvoeren van de macro.
Door de stapsgewijze uitvoering te volgen, is het maken van een nieuw onderdeel mogelijk gedurende de hele macro, tot aan de ExportToDWG2-functie, en wordt het onmogelijk nadat...
Het lijkt de oorzaak van het probleem te zijn, en ik heb geen idee hoe ik het kan omzeilen.

2 likes

Het lijkt erop dat deze GPT de code niet goed heeft gestructureerd, maar het toonde een goede logica van {think}, maak een MEP van de huidige weergave en exporteer vervolgens naar dxf, niet slecht,

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

Hij zou hebben kunnen raden dat de naam (*In uitvoering) bij het weergavepalet hoort, niet bij het sjabloon :grin:

Misschien vanwege de tabel met weergaven, gedeclareerd voor 2 weergaven, maar slechts 1 is gedefinieerd,

Hallo
Ik denk dat het meer te maken heeft met het feit dat je geen objecten uit het geheugen leegt.
Het formulier blijft thuis actief, maar weerhoudt me er niet van om in ieder geval een nieuw bestand aan te maken (ik heb niet geprobeerd er iets in te doen).
Ik denk dat ik "Set xxx = Nothing" op verschillende punten in de macro moet toevoegen.

1 like

@m_blt met deze macro heb ik geen problemen na de export voor het maken van een nieuw onderdeel, maar ik had het probleem met een ander, ik had geen tijd om ernaar te kijken om het verschil tussen de twee te zien, maar als het helpt.

DXF met buiglijn.swp (36 KB)