Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Export Skizze als .dxf

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Export Skizze als .dxf (917 mal gelesen)
DaveS
Mitglied



Sehen Sie sich das Profil von DaveS an!   Senden Sie eine Private Message an DaveS  Schreiben Sie einen Gästebucheintrag für DaveS

Beiträge: 10
Registriert: 08.05.2018

Inventor Professionel 2020

erstellt am: 16. Apr. 2020 15:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich stehe vor dem Problem, dass ich eine Skizze in einem Bauteil in einer Baugruppe als .dxf exportieren muss. Diese Skizze.dxf dient als Input für eine Wasserstrahlschneide-Maschine. Ich habe auch schon einen Code gebastelt und habe damit geschafft die Skizze zu finden und zu exportieren. Hier der Code:

-------------------------------------------------------------
Public Sub PublishDXF()

' Set reference to active document
Dim oAssDoc As AssemblyDocument
Set oAssDoc = ThisApplication.ActiveDocument

' Get assembly component definition
Dim oCompDef As Inventor.ComponentDefinition
Set oCompDef = oAssDoc.ComponentDefinition
   
Dim oSubOcc As ComponentOccurrence

'Get any occurrences in the assembly
For Each oSubOcc In oCompDef.Occurrences

    'Check if occurrence is a partobject
   
    If oSubOcc.DefinitionDocumentType = kPartDocumentObject Then
   
        Dim oSubPartDef As PartComponentDefinition
        Set oSubPartDef = oSubOcc.Definition
       
        Dim oSketch As PlanarSketch
        Set oSketch = oSubPartDef.Sketches.Item("SK_Daemmung_ges")
                   
            Call oSketch.DataIO.WriteDataToFile("DXF", "U:\XXXXX\CAD-Daten\Sketch.dxf")
            MsgBox ("Schneideskizze erstellt")
            Exit Sub
    End If
Next
End Sub
-------------------------------------------------------------

Leider habe ich das Problem, dass ich hier keine Möglichkeit habe die Exportoptionen anzugeben. Ich habe es dann mit DXFAddIn versucht (analog zum Beispiel aus der Hilfe API), allerdings erkennt DXFAddIn.SaveCopyAs(oSketch, oContext, oOptions, oDataMedium) das oSketch nicht als Objekt an. Gibt es einen Weg wie man das lösen könnte?

Ich hoffe es kann mir hierbei jemand behilflich sein. Danke schonmal

Gruß
Dave

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 17. Apr. 2020 06:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaveS 10 Unities + Antwort hilfreich

Moin


Welche Exportoptionen benötigst du denn? Der erste Parameter von WriteDataToFile sind Exportoptionen. Man muss sie nur als einen langen String schreiben oder eine ini-Datei in den String einlesen.

------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaveS
Mitglied



Sehen Sie sich das Profil von DaveS an!   Senden Sie eine Private Message an DaveS  Schreiben Sie einen Gästebucheintrag für DaveS

Beiträge: 10
Registriert: 08.05.2018

Inventor Professionel 2020

erstellt am: 20. Apr. 2020 07:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen Ralf,

erstmal Danke für deinen Antwort. Im wesentlichen muss ich nur die dxf-Version festlegen können, da unsere Maschine nur 2010er dxf einlesen kann.

Das der erste Parameter die Exportoptionen sind, habe ich gelesen, aber wenn ich einen String definiere habe ich eine Fehlermeldung bekommen.

Wenn ich in meinen Code folgendes Einfüge:

...
Dim sOut As String
sOut = "DXF?AcadVersion=2010&OuterProfileLayer=Outer"
                 
oSketch.DataIO.WriteDataToFile sOut, "U:\XXXXXXXX\CAD-Daten\Sketch.dxf"
...

dann bekomme ich in der "WriteDataToFile"-Zeile immer den Laufzeitfehler '5':
Ungültiger Prozeduraufruf oder ungültiges Argument. Woran könnte das liegen?

Wie würde es denn funktionieren eine .ini Datei einzulesen und in meinem Fall zu verwenden? Ich habe vom manuellen Export eine .ini Datei, die die entsprechenden Optionen enhält.

Gruß
David

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RolandD
Mitglied



Sehen Sie sich das Profil von RolandD an!   Senden Sie eine Private Message an RolandD  Schreiben Sie einen Gästebucheintrag für RolandD

Beiträge: 533
Registriert: 07.01.2005

i7-9700k
32GB DDR4-RAM
Nvidia RTX 2060
SSD 970 m.2
Win10-64 (21H2)
AIP 2020.3
Dell U3417W

erstellt am: 20. Apr. 2020 09:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaveS 10 Unities + Antwort hilfreich

Klammer vergessen??

Code:
oSketch.DataIO.WriteDataToFile (sOut, "U:\XXXXXXXX\CAD-Daten\Sketch.dxf")

------------------
Gruß Roland

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaveS
Mitglied



Sehen Sie sich das Profil von DaveS an!   Senden Sie eine Private Message an DaveS  Schreiben Sie einen Gästebucheintrag für DaveS

Beiträge: 10
Registriert: 08.05.2018

Inventor Professionel 2020

erstellt am: 20. Apr. 2020 09:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Roland,

wenn ich das ganze mit Klammern schreibe, dann gibt er mir "Fehler beim Kompilieren: Erwartet: =" und wenn ich das ganze mit "call" aufrufen will, dann bekomme wieder den Laufzeitfehler '5'.

Ich hab das ganze analog zum "Translate - Sheet Metal to DXF API Sample" aus der API Hilfe übernommen. Hier ist es auch ohne Klammer geschrieben.
Code:
------------------------------------------------------------
...
' Build the string that defines the format of the DXF file.
    Dim sOut As String
    sOut = "FLAT PATTERN DXF?AcadVersion=R12&OuterProfileLayer=Outer"

    ' Create the DXF file.
    oDataIO.WriteDataToFile sOut, "C:\temp\flat2.dxf"
End Sub
------------------------------------------------------------

Gruß
Dave

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 20. Apr. 2020 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaveS 10 Unities + Antwort hilfreich

Moin

Immer das Gleiche, man darf nix schreiben was man nicht selbst vorher ausprobiert hat. 
Bei Skizzen gibt es die Optionen noch nicht. Bisher kann man wirklich nur den Typ DXF oder DWG angeben.
Aber ich hab vielleicht einen Weg.

Erstelle eine Konfigurationsdatei mit den erforderlichen Einstellungen und speicher sie irgendwo ab. Jetzt kopierst du die Datei mal in C:\Benutzers\$dein_Benutzername$\AppData\Local\Temp und benennst sie in exportdxf240DEU.ini um.
Danach sollte es mit folgendem Code funktionieren. Pfade usw. musst du entsprechend anpassen.

Code:

Private Sub ExportGeom()

Dim oDoc As PartDocument
Set oDoc = ThisApplication.ActiveDocument

Dim oControlDef As ControlDefinition
Set oControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("GeomToDXFCommand")

Dim sPath As String
sPath = "C:\TEMP\"

Dim sFilename As String
sFilename = "flat.dxf"

Dim sFullFilename As String
sFullFilename = sPath & sFilename

Dim oSelectSet As SelectSet
Set oSelectSet = oDoc.SelectSet

Dim oSketch As PlanarSketch
Set oSketch = oDoc.ComponentDefinition.Sketches.Item(1)

'Call SetRegLastUsed

Call ThisApplication.CommandManager.PostPrivateEvent(PrivateEventTypeEnum.kFileNameEvent, sFullFilename)

Call oDoc.SelectSet.Clear

Call oDoc.SelectSet.Select(oSketch)
   
Call oControlDef.Execute2(True)

Call oDoc.SelectSet.Clear

End Sub


------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaveS
Mitglied



Sehen Sie sich das Profil von DaveS an!   Senden Sie eine Private Message an DaveS  Schreiben Sie einen Gästebucheintrag für DaveS

Beiträge: 10
Registriert: 08.05.2018

Inventor Professionel 2020

erstellt am: 21. Apr. 2020 08:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen Ralf,

zunächst mal vielen Dank für deinen Code.

Zitat:
Original erstellt von rkauskh:
Moin

Immer das Gleiche, man darf nix schreiben was man nicht selbst vorher ausprobiert hat.  


falls ich hier irgendwie gegen die Netiquette oder speziellen Regeln für das VBA Forum verstoßen hab, tut's mir leid. Falls ja, dann wäre für entsprechende Info sehr dankbar, da der Link zu Netiquette in der Hilfe leider nicht funktioniert 

Aber jetzt wieder zurück zum Thema. Ich habe deinen Code an einem Bauteil getestet und das ganze funktioniert super. Auch die .dxf-Version ist die richtige.

Muss für dein Vorgehen die .ini Datei zwangsläufig entsprechend benannt und an dem Speicherort liegen?

Funktioniert das Vorgehen auch, wenn ich mich in einer Baugruppe befinde und mich erst zum entsprechenden Bauteil mit der Skizze vorarbeite?

Vielen Dank schonmal.

Gruß
Dave

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 21. Apr. 2020 13:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaveS 10 Unities + Antwort hilfreich

Moin

Netiquette? Nein, das hast du komplett falsch verstanden. Das bezog sich auf meine erste Antwort, das der erste Parameter von WriteDataToFile alle Optionen als einen langen String akzeptiert. Ist, wie ich nach meinem Posting gelernt habe, oft so, aber nicht in dem Fall. Ich hätte es vor dem Antworten ausprobieren müssen.

Die .ini muss leider genau da liegen und genau so heißen. Ich habe bei meinem Gebastel und herumprobieren gesehen, dass Inventor die Datei erstellt, wenn man den Export über die GUI ausführt. Alle anderen Versuche, auch in der Registry den Pfad zur letzten genutzten ini zu setzen, wurden ignoriert. Es gibt leider keinen mir bekannten anderen Weg dem Skizzenexport als DXF Parameter mitzugeben.
Man kann in einer Schleife durch die gesamte BG gehen und nach Bauteilen mit der Skizze suchen. Der Export funktionierte aber nur, wenn ich die Datei in einem separaten Fenster geöffnet habe. Eventuell funktioniert es auch, wenn man das Bauteil innerhalb der BG zum Bearbeiten aktiviert, aber das nimmt sich zeitlich nix.

Falls es mehrere Bauteile mit dieser Skizze gibt, brauchst du noch eindeutige Namen. Sonst überschreibst du jedes Mal das DXF. Ich hab mal eindeutige Dateiname unterstellt und es so gemacht, dass die DXF den gleichen Dateinamen bekommen.

Code:

Public Sub PublishDXF()

' Set reference to active document
Dim oAssDoc As AssemblyDocument
Set oAssDoc = ThisApplication.ActiveDocument

' Get assembly component definition
Dim oCompDef As Inventor.ComponentDefinition
Set oCompDef = oAssDoc.ComponentDefinition
 
Dim oSubOcc As ComponentOccurrence

'Get any occurrences in the assembly
For Each oSubOcc In oCompDef.Occurrences.AllLeafOccurrences

    'Check if occurrence is a partobject
    If oSubOcc.DefinitionDocumentType = kPartDocumentObject Then
 
        Dim oSubPartDef As PartComponentDefinition
        Set oSubPartDef = oSubOcc.Definition
     
        Dim oSketch As PlanarSketch
        For Each oSketch In oSubPartDef.Sketches
            If oSketch.Name = "SK_Daemmung_ges" Then
                Call ExportGeom(oSketch, oSubOcc)
            End If
        Next
    End If
Next

MsgBox ("Schneideskizze(n) erstellt")

End Sub


Private Sub ExportGeom(ByVal oSketch As PlanarSketch, oSubOcc As ComponentOccurrence)

Dim oDoc As PartDocument
Set oDoc = oSubOcc.Definition.Document
Set oDoc = ThisApplication.Documents.Open(oDoc.FullFileName)

Dim oControlDef As ControlDefinition
Set oControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("GeomToDXFCommand")

Dim sPath As String
sPath = "U:\XXXXX\CAD-Daten\"

Dim sFullFileName As String
sFullFileName = oDoc.FullDocumentName

Dim sFileName As String
sFileName = FileName(sFullFileName) '"sketch.dxf"

Dim sNewFullFileName As String
sNewFullFileName = sPath & sFileName & ".dxf"

Dim oSelectSet As SelectSet
Set oSelectSet = oDoc.SelectSet

Call ThisApplication.CommandManager.PostPrivateEvent(PrivateEventTypeEnum.kFileNameEvent, sFullFileName)

Call oDoc.SelectSet.Clear

Call oDoc.SelectSet.Select(oSketch)
 
Call oControlDef.Execute2(True)

Call oDoc.SelectSet.Clear

Call oDoc.Close(True)

End Sub

Private Function FileName(ByVal sFullFileName As String) As String

Dim oArray() As String
oArray = Split(sFullFileName, "\")

Dim sFileName As String
sFileName = oArray(UBound(oArray))

FileName = Left(sFileName, Len(sFileName) - 4)

End Function



------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz