| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Teledoor setzt erfolgreich auf Configure-to-Order mit CIDEON Conify , ein Anwenderbericht
|
Autor
|
Thema: DXF per I-Logic (6751 mal gelesen)
|
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 02. Mai. 2013 08:16 <-- editieren / zitieren --> Unities abgeben:
Moin Moin, ich bin auf der Suche nach einer I-Logic Regel die erst dann eine DXF Datei beim speichern der Zeichnungsableitung erstellt wenn es bereits eine DXF Datei auf dem Laufwerk gibt. Der Sinn dahinter soll sein das einmalig per Hand eine DXF erstellt wird wenn es nötig ist und diese Datei dann immer mit dem aktuellen Stand überschrieben wird um eine aktuelle DXF für den Zuschnitt zu haben. Als Erweiterung wäre es noch nett wenn die Datei nicht im Arbeitsverzeichnis sondern auf einem Server abgelegt wird an den die Werkstattkollegen dran kommen. mfg Uwe ------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mikromeister Mitglied Dipl.Ing
Beiträge: 293 Registriert: 18.12.2003 IV 2021 @ Win10 + Vault basic
|
erstellt am: 06. Mai. 2013 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Kannst du nicht einfach prinzipiell ein dxf erstellen und aktualisieren? Bei mir wird per i-logic auf Kommando immer gleichzeitig ein dwf ein pdf und ein dxf erstellt. Dann hat man automatisch immer was man braucht und der Rest ist halt Müll. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 07. Mai. 2013 07:16 <-- editieren / zitieren --> Unities abgeben:
Moin, ja grundsätzlich funktioniert das, auch mit iLogic. Interessant wäre halt ein Automatismus der erst dann die Neutralformate aktualisiert wenn ich sie einmal händisch erstellt habe. ------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 23. Mai. 2013 10:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, kann mir denn keiner weiterhelfen? Ich kann mir irgendwie nicht vorstellen das es nicht möglich sein soll Neutralformate per I-Logic Regel auf ein anderes Laufwerk als das Arbeitsverzeichnis zu speichern... Da bin ich wohl gezwungen Geld in die Hand zu nehmen und uns einen Job programmieren zu lassen.... ------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
muellc Ehrenmitglied V.I.P. h.c. ICT Specialist
Beiträge: 3501 Registriert: 30.11.2006 Inventor 2017.4.12 64 bit Windows 10 Enterprise 64 bit 3DEXPERIENCE R2016x -------------------- HP Z-Book 15 G4 32 Gig Ram NVIDIA Quadro M2200 2x HP E243i
|
erstellt am: 23. Mai. 2013 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Wenn du doch mit PSP arbeitest, dann lass doch den jobserver diese Arbeit machen. Bei uns werden bei der Freigabe der Dokumente automatisch PDF und DXF erzeugt. Da an einer Freigegebenen Zeichnung ja keiner mehr was ändern kann, reicht das vollkommen aus. ------------------ Gruß, Gandhi It's not a bug, it's a feature! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
77Andreas Mitglied Techniker
Beiträge: 244 Registriert: 17.10.2012 Win 7 SP1.0 / 64 bit / IV 2014
|
erstellt am: 23. Mai. 2013 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
DXF - auslesen in iLogic 'Pfad & Dateinamen auslesen lassen path_and_name = ThisDoc.PathAndFileName(False) ' without extension 'Dokument als DXFverntlichen ThisDoc.Document.SaveAs(path_and_name & ".DXF" , True) Vielleicht hilft das..... Nicht vergessen dies in eine VORLAGE einzubauen!
------------------ ----------------------------- Thxs 77Andreas Tippfehler sind gewollt Einen Vorsprung im Leben hat, wer da anpackt, wo die anderen erst einmal reden. John F. Kennedy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 23. Mai. 2013 10:53 <-- editieren / zitieren --> Unities abgeben:
@muellc "leider" arbeiten wir nicht mehr mit PSP da sind nur noch unsere Altdaten, wir sind auf Vault umgestiegen und da geht das leider nicht im Standard. @77Andreas Die Regel legt doch aber die DXF "nur" am Ursprungsort ab oder? ------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
muellc Ehrenmitglied V.I.P. h.c. ICT Specialist
Beiträge: 3501 Registriert: 30.11.2006 Inventor 2017.4.12 64 bit Windows 10 Enterprise 64 bit 3DEXPERIENCE R2016x -------------------- HP Z-Book 15 G4 32 Gig Ram NVIDIA Quadro M2200 2x HP E243i
|
erstellt am: 23. Mai. 2013 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Ja, der Pfad wird anhand der IDW ausgelesen. Wenn du alle deine DXF in einen zentralen Ordner legen willst könnte dir das hier helfen: Code:
' Get the DXF translator Add-In. Dim DXFAddIn As TranslatorAddIn DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}") 'Set a reference to the active document (the document to be published). Dim oDocument As Document oDocument = ThisApplication.ActiveDocument Dim oContext As TranslationContext oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oDataMedium As DataMedium oDataMedium = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then Dim strIniFile As String strIniFile = "C:\temp\dxfout.ini" ' Create the name-value that specifies the ini file to use. oOptions.Value("Export_Acad_IniFile") = strIniFile End If 'Set the destination file name oPath = "C:\test\" oName = ThisDoc.FileName(False) ' without extension oDataMedium.FileName = oPath & oName & ".dxf" 'oDataMedium.FileName = ThisDoc.PathAndFileName(False) & ".dxf" 'Publish document. DXFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium) 'Launch the dxf file in whatever application Windows is set to open this document type with 'i = MessageBox.Show("Preview the DXF file?", "Title",MessageBoxButtons.YesNo,MessageBoxIcon.Question) 'If i = vbYes Then ThisDoc.Launch(oDataMedium.FileName)
Das ist eine abwandlung des von Inventor mitgelieferten Snippets, daher auch die verweise auf die Ini Dateien im Code. Unter oPath legst du den Ordner fest, in dem die Dateien gespeichert werden sollen. ------------------ Gruß, Gandhi It's not a bug, it's a feature! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 23. Mai. 2013 11:47 <-- editieren / zitieren --> Unities abgeben:
Hi, super das ist schon nahe dran an meiner Wunschvorstellung, leider legt er dann ja alle DXF Dateien in den selben Ordner oder? Es wäre noch besser wenn er die Daten dann in der gleichen Ordnerstruktur ablegen würde wie auf dem Lokalen LW, nur eben auf dem Server. Die Struktur ist schon vorhanden da dort die DWFs abgelegt werden. Kann man dazu evtl. den Pfad zurechtschneiden? Lokale Ablage: C:\Ebene1\Konstruktion\.... Server: X:\Ebene1\Ebene2\Konstruktion\..... Unterhalb Konstruktion gleichen sich die Strukturen.
------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
muellc Ehrenmitglied V.I.P. h.c. ICT Specialist
Beiträge: 3501 Registriert: 30.11.2006 Inventor 2017.4.12 64 bit Windows 10 Enterprise 64 bit 3DEXPERIENCE R2016x -------------------- HP Z-Book 15 G4 32 Gig Ram NVIDIA Quadro M2200 2x HP E243i
|
erstellt am: 23. Mai. 2013 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Da bin ich ehrlich gesagt überfragt, da meine iLogic kenntnisse eher Bruchstückhaft sind. Problematisch finde ich hier allerdings die Wiederverwendung der Teile, wenn du ein Bauteil aus einem alten Projekt in deiner Konstruktion verwendest, liegt die DXF davon trotzdem noch im alten Projektordner. Ein eindeutiger Dateiname in einem Sammelordner würde hier weniger Sucharbeit machen.
------------------ Gruß, Gandhi It's not a bug, it's a feature! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 23. Mai. 2013 15:30 <-- editieren / zitieren --> Unities abgeben:
Ja, das mit der Mehrfachverwendung macht mir auch ab und an Kopfschmerzen, kommt aber so selten vor das wir meist ein neues Bauteil erzeugen. Bei uns ist es schon ein Serienteil wenn es mal 4 Stück davon gibt, von daher ist das nicht so ein riesen Aufwand. ------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
muellc Ehrenmitglied V.I.P. h.c. ICT Specialist
Beiträge: 3501 Registriert: 30.11.2006 Inventor 2017.4.12 64 bit Windows 10 Enterprise 64 bit 3DEXPERIENCE R2016x -------------------- HP Z-Book 15 G4 32 Gig Ram NVIDIA Quadro M2200 2x HP E243i
|
erstellt am: 23. Mai. 2013 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Code:
path_and_name = ThisDoc.PathAndFileName(False) ' without extension newname = "d" & Right(path_and_name,Len(path_and_name)-1) ThisDoc.Document.SaveAs(newname & ".DXF" , True)
Dieser Code liest den Pfad und Dateinamen aus, Ändert den Laufwerksbuchstaben in d und speichert als DXF ab. Allerdings werden hierbei keine Unterordner angelegt, wenn also die Ordnerstruktur noch nicht vorhanden ist gibt es eine Fehlermeldung
------------------ Gruß, Gandhi It's not a bug, it's a feature! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
muellc Ehrenmitglied V.I.P. h.c. ICT Specialist
Beiträge: 3501 Registriert: 30.11.2006 Inventor 2017.4.12 64 bit Windows 10 Enterprise 64 bit 3DEXPERIENCE R2016x -------------------- HP Z-Book 15 G4 32 Gig Ram NVIDIA Quadro M2200 2x HP E243i
|
erstellt am: 24. Mai. 2013 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
So, zum Abschluss noch eine Funktion die auch Verzeichnuisse anlegt. Code:
Alterpfad = ThisDoc.Path Dateiname = ThisDoc.FileName(False) ' without extension Neueslaufwerk = "D:\" 'hier kommt der neue Laufwerksbuchstabe hin Dateiendung = ".DXF" 'hier die gewünschte Dateiendung eintragen Neuerpfad = Neueslaufwerk & Right(Alterpfad,Len(Alterpfad)-3) & "\"If Not System.IO.Directory.Exists(Neuerpfad) Then System.IO.Directory.CreateDirectory(Neuerpfad) End If ThisDoc.Document.SaveAs(Neuerpfad & Dateiname & Dateiendung , True)
Unter "Neueslaufwerk" einfach den gewünschten Laufwerksbuchstaben angeben. Auf diesem Laufwerk wird dann die gleiche Ordnerstruktur erstellt, in der deine Startdatei liegt.
------------------ Gruß, Gandhi It's not a bug, it's a feature! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 24. Mai. 2013 13:27 <-- editieren / zitieren --> Unities abgeben:
|
pietro46 Mitglied Technischer Zeichner / Konstrukteure
Beiträge: 12 Registriert: 28.01.2009
|
erstellt am: 26. Jun. 2013 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo noch einmal zusammen. Ich habe genau so die Code eingegeben path_and_name = ThisDoc.PathAndFileName(False) ' without extension newname = "d" & Right(path_and_name,Len(path_and_name)-1) ThisDoc.Document.SaveAs(newname & ".DXF" , True) Aber kommt bei mir ein Fehler Fehler in Regel: SaveDXF in Dokument: Zeichnung4 Das Argument Length muss größer als oder gleich 0 (null) sein. Kann jemand mir weiter helfen? Danke voraus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
muellc Ehrenmitglied V.I.P. h.c. ICT Specialist
Beiträge: 3501 Registriert: 30.11.2006 Inventor 2017.4.12 64 bit Windows 10 Enterprise 64 bit 3DEXPERIENCE R2016x -------------------- HP Z-Book 15 G4 32 Gig Ram NVIDIA Quadro M2200 2x HP E243i
|
erstellt am: 26. Jun. 2013 21:20 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Existiert der gewünschte Ordner auf dem Laufwerk d? absonsten muss der Befehl hier ausgeführt werden: Code: If Not System.IO.Directory.Exists(Neuerpfad) Then System.IO.Directory.CreateDirectory(Neuerpfad) End If
oder dumusst die Verzeichnisse per Hand erstellen Deswegen hatte ich in meinem Code auch Pfad und Dateiname voneinander getrennt. ------------------ Gruß, Gandhi It's not a bug, it's a feature! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 15. Dez. 2016 10:16 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo zusammen! Ich würde den Beitrag gerne nochmals aus der Versenkung holen und dabei auf eine -meiner Meinung nach- noch nicht geklärte Frage eingehen: Wie kann man der Regel sagen, dass bereits vorhandene Dateien ohne Rückfrage überschrieben werden sollen? Mein Code basiert auf dem o.g. und läuft halbwegs, allerdings hätte ich gerne beim Ausführen der Regel die alten Dateien durch neue, gleichnamige Dateien überschrieben. Kann das die Regel überhaupt oder ist die Rückfrage unabhängig vom Inventor irgendwo in Windows versteckt? Wenn ja, wie komme ich da ran? Danke! Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 15. Dez. 2016 11:25 <-- editieren / zitieren --> Unities abgeben:
|
Ruzy5624 Mitglied Konstruktionsleiter / staatl. gepr. Techniker
Beiträge: 280 Registriert: 01.07.2015 Product Design Suite 2018 Ultimate Visual Studio 2017 Windows 10 Pro Intel Xeon E3-1245 v5 @ 3,5GHz Nvidia Quadro M4000 8GB RAM 32GB 2x 24" Monitore FullHD SpaceMouse Pro
|
erstellt am: 15. Dez. 2016 12:31 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Genau so ist es... Die Datei wird immer wortlos überschrieben, vorausgesetzt das überschreiben ist möglich. Möglich wäre das Überschreiben zum Beispiel nicht, wenn einer die Datei noch geöffnet hat, wenn die Datei in einem Pfad liegt wo der Anwender nicht die notwendigen Rechte besitzt. Das Überschreiben der Datei könnte man abfangen mit einer If-Verzweigung, in zum Beispiel dieser From: Code: If System.IO.FileExists("DateiPfadUndName") then 'Hier der Code der ausgeführt wird falls Datei bereits vorhanden ist Else 'Hier der Code der ausgeführt wird falls die Datei noch nicht vorhanden ist End If
------------------ Mit Besten Grüßen Ruzy5624 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 15. Dez. 2016 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo zusammen! Bei mir ist das eben leider nicht der Fall, ich werde bei bestehenden Dateien immer gefragt, ob ich diese ersetzen will. Der Code unterscheidet sich aber nicht von o.g., lediglich die Namensfindung wurde an unsere Bedürfnisse angepasst. Im Ordner selbst kann ich die Dateien ohne Probleme von Hand löschen, dann werden die aktualisierten Dateien logischerweise auch ohne Rückfrage erzeugt. Interessanterweise meint AutoCAD beim öffnen der Dateien, dass diese derzeit benutzt werden und deshalb nur schreibgeschützt geöffnet werden können, obwohl nachweislich kein anderer die Datei offen hat. Kann mir jemand einen Wink mit dem Zaunpfahl geben, wo das Problem liegen könnte? Danke! Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ruzy5624 Mitglied Konstruktionsleiter / staatl. gepr. Techniker
Beiträge: 280 Registriert: 01.07.2015 Product Design Suite 2018 Ultimate Visual Studio 2017 Windows 10 Pro Intel Xeon E3-1245 v5 @ 3,5GHz Nvidia Quadro M4000 8GB RAM 32GB 2x 24" Monitore FullHD SpaceMouse Pro
|
erstellt am: 15. Dez. 2016 19:08 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Nochmal für mein Verständnis... Wenn due eine Datei als beispielsweise DXF mittels des Codes exportierst dann fragt er dich ob du die bestehende Datei ersetzten willst und du kannst dies mit ja oder nein beantworten? Oder wirft er einen Fehler, der besagt das die DXF Datei nicht erzeugt werden kann? ------------------ Mit Besten Grüßen Ruzy5624 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 16. Dez. 2016 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
|
Ruzy5624 Mitglied Konstruktionsleiter / staatl. gepr. Techniker
Beiträge: 280 Registriert: 01.07.2015 Product Design Suite 2018 Ultimate Visual Studio 2017 Windows 10 Pro Intel Xeon E3-1245 v5 @ 3,5GHz Nvidia Quadro M4000 8GB RAM 32GB 2x 24" Monitore FullHD SpaceMouse Pro
|
erstellt am: 16. Dez. 2016 09:20 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hmm das wundert mich... und du hast den Code von muellc verwendet? Genau diesen habe ich eben gerade auch nochmal kopiert und getestet und bei mir überschreibt er die bestehende Datei wortlos. Hast du am Code Änderungen vorgenommen? Wenn ja dann stell uns deinen Code doch nochmal zur Verfügung, dann werfen wir gerne nochmal einen Blick drauf und suchen den möglichen Fehler. ------------------ Mit Besten Grüßen Ruzy5624 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 16. Dez. 2016 11:29 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo! Danke für deine Mühen, hier ist meine Abwandlung des Codes; Der Zielort der DXF-Dateien sind wie der Quellort der IDW´s auch ein eingebundenes Netzwerklaufwerk Grüße, Thomas Code:
'Dateityp des Modells wird erkannt (.iam oder .ipt) oModellTyp = Right(ThisDoc.FileName(True), 4) If oModellTyp = ".idw" Then ' Get the DXF translator Add-In. Dim DXFAddIn As TranslatorAddIn DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}") 'Set a reference to the active document (the document to be published). Dim oDocument As Document oDocument = ThisApplication.ActiveDocument Dim oContext As TranslationContext oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oDataMedium As DataMedium oDataMedium = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then Dim strIniFile As String strIniFile = "L:\Inventor\0000\_Allgemein\Design Data 2016\DWG-DXF\exportdxf.ini" ' Create the name-value that specifies the ini file to use. oOptions.Value("Export_Acad_IniFile") = strIniFile End If oProject = Left(ThisDoc.FileName(False),5) 'without extension oBaugruppe = ThisDoc.FileName(False) 'without extension 'Hier den Ort zum Abspeichern der DXF-Daten eingeben (x:\xx\xxxxxx\) oPath = "L:\Export\DXF\" oName = ThisDoc.FileName(False) ' without extension 'Zusammensetzen von Pfad und Dateiname für DXF oFolder = oPath & oProject & "\" & oName & "\" oDataMedium.FileName = oPath & oProject & "\" & oName & "\" & oNameBlatt & ".dxf" 'Prüfen ob es den Ordner gibt, wenn nicht wird er erstellt If Not System.IO.Directory.Exists(oFolder) Then System.IO.Directory.CreateDirectory(oFolder) End If 'Publish document. DXFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium) '>>>>> Zur Vorschau der DXF Datei die nächsten 2 Zeilen scharf schalten 'i = MessageBox.Show("Preview the DXF file?", "Title",MessageBoxButtons.YesNo,MessageBoxIcon.Question) 'If i = vbYes Then ThisDoc.Launch(oDataMedium.FileName) End If
'Textausgabe: Erfolg MessageBox.Show("Fertig!","Status",MessageBoxButtons.OK) 'End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ruzy5624 Mitglied Konstruktionsleiter / staatl. gepr. Techniker
Beiträge: 280 Registriert: 01.07.2015 Product Design Suite 2018 Ultimate Visual Studio 2017 Windows 10 Pro Intel Xeon E3-1245 v5 @ 3,5GHz Nvidia Quadro M4000 8GB RAM 32GB 2x 24" Monitore FullHD SpaceMouse Pro
|
erstellt am: 20. Dez. 2016 18:44 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Sry, hat leider etwas gedauert bis ich die nötige Zeit gefunden habe... Ich habe deinen Code mal übernommen und etwas abgeändert. Dem String "oNameBlatt" hast du nichts zugewiesen, weshalb alle DXFs namenlos waren. Aber die eigentliche Frage war, ob er die Dateien wortlos überschreibt. Ja das tut er bei mir mit dem Code. Ich kann mir nicht vorstellen warum er das bei dir nicht tut Hier nochmal der Code wie ich ihn getestet habe: Code: Sub Main 'Prüfen ob Dokument eine Zeichnung ist Dim oDoc As Document = ThisApplication.ActiveDocument If oDoc.DocumentType <> DocumentTypeEnum.kDrawingDocumentObject Then Exit Sub ' Get the DXF translator Add-In. Dim DXFAddIn As TranslatorAddIn DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}") 'Set a reference to the active document (the document to be published). Dim oContext As TranslationContext oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oDataMedium As DataMedium oDataMedium = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If DXFAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then ' Create the name-value that specifies the ini file to use. oOptions.Value("Export_Acad_IniFile") = "Pfad zu ini Datei" End If oProject = Left(ThisDoc.FileName(False),5) 'without extension oBaugruppe = ThisDoc.FileName(False) 'without extension 'Hier den Ort zum Abspeichern der DXF-Daten eingeben (x:\xx\xxxxxx\) oPath = "Ablagepfad" oName = ThisDoc.FileName(False) ' without extension 'Zusammensetzen von Pfad und Dateiname für DXF oFolder = oPath & oProject & "\" oDataMedium.FileName = oFolder & oName & ".dxf" 'Prüfen ob es den Ordner gibt, wenn nicht wird er erstellt If Not System.IO.Directory.Exists(oFolder) Then System.IO.Directory.CreateDirectory(oFolder) End If 'Publish document. DXFAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium) MessageBox.Show("Fertig!","Status",MessageBoxButtons.OK) End Sub
------------------ Mit Besten Grüßen Ruzy5624 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 22. Dez. 2016 08:28 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo Ruzy! Vielen Dank für deine Mühen, echt toll! Mit meinem Code haben unsere DXF´s alle die richtigen Bezeichnungen und liegen in den automatisch erzeugten Ordnerstrukturen. Ich habe bei meinem letzten Post leider vergessen etwas zu erwähnen: Im Vorfeld zum DXF-Export läuft eine weitere externe Regel, die die Blätter unserer Zeichnungen entsprechend der Erstansicht umbenennt. (Code hänge ich ganz unten an) Beispiel: Name der auf dem Zeichnungsblatt dargestellten IPT: "xxxxx-yyy-zzz-001" Name der IDW selbst "aaaaa-bbb-ccc-000-ZEICHNUNG" Name des Zeichnungsblattes nach dem auto. Umbenennen "xxxxx-yyy-zzz-001" Pfad und Name der DXF-Datei: [...]\xxxxx\aaaaa-bbb-ccc-000-ZEICHNUNG\_xxxxx-yyy-zzz-001.dxf (woher auch immer das _ vor xxxxx kommt?!) Kann das Überschreiben damit zusammenhängen, dass: - es sich bei mir um externe Regeln handelt - das DXF-ini-file irgendwie reinpfuscht - die DXF lt. Autocad beim öffnen gerade durch einen anderen Benutzer bearbeitet werden, obwohl das definitiv nicht der Fall ist und auch der Inventor zuvor geschlossen wurde? Bei deinem Code steigt mir die externe Regel immer aus: System.Runtime.InteropServices.COMException (0x80004005): Unbekannter Fehler (Ausnahme von HRESULT: 0x80004005 (E_FAIL)) bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) bei Inventor.TranslatorAddIn.SaveCopyAs(Object SourceObject, TranslationContext Context, NameValueMap Options, DataMedium TargetData) bei LmiRuleScript.Main() bei Autodesk.iLogic.Exec.AppDomExec.ExecRuleInAssembly(Assembly assem) bei iLogic.RuleEvalContainer.ExecRuleEval(String execRule) Danke und Gruß, Thomas
Code: Sub Main If TypeOf ThisDoc.Document Is DrawingDocument Then Dim dwgDoc as DrawingDocument = ThisDoc.Document' Dim sheetNames As New Dictionary(Of String, ArrayList) 'Count all the sheets per part For Each dwgSheet As Sheet In dwgDoc.Sheets If dwgSheet.DrawingViews.Count > 0 Then modelFile = dwgSheet.DrawingViews(1).ReferencedDocumentDescriptor.FullDocumentName modelDoc = dwgSheet.DrawingViews(1).ReferencedDocumentDescriptor.ReferencedDocument prtNumber = modelDoc.PropertySets("Design Tracking Properties").Item("Part Number").Value If Not String.IsNullOrEmpty(prtNumber) Then If Not sheetNames.ContainsKey(prtNumber) Then sheetNames.Add(prtNumber, New ArrayList({1, 0})) Else sheetCount = sheetNames(prtNumber)(0) sheetCount = sheetCount + 1 sheetNames(prtNumber)(0) = sheetCount End If End If End If Next For Each dwgSheet As Sheet In dwgDoc.Sheets If dwgSheet.DrawingViews.Count > 0 Then modelFile = dwgSheet.DrawingViews(1).ReferencedDocumentDescriptor.FullDocumentName modelDoc = dwgSheet.DrawingViews(1).ReferencedDocumentDescriptor.ReferencedDocument prtNumber = modelDoc.PropertySets("Design Tracking Properties").Item("Part Number").Value prtRev = modelDoc.PropertySets("Summary Information").Item("Revision Number").Value If Not String.IsNullOrEmpty(prtNumber) Then If Not String.IsNullOrEmpty(prtRev) Then prtRev = String.Format(" - Rev {0}", prtRev) End If sheetOf = "" sheetCount = sheetNames(prtNumber)(0) If sheetCount > 1 Then sheetNames(prtNumber)(1) = sheetNames(prtNumber)(1) + 1 sheetOf = String.Format(" Sheet {0}", sheetNames(prtNumber)(1)) End If dwgSheet.Name = prtNumber & sheetOf & prtRev End If End If Next End If End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 02. Jan. 2017 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo liebe CAD.de Gemeinde! Ich hoffe, Ihr seid alle gut in das neue Jahr gerutscht. (Wir haben uns leider verlaufen und standen um 12 Uhr mitten in einem Wald bei 0m Sicht (Nebel).. Dementsprechend gabs für mich heuer kein Feuerwerk ) Habt Ihr denn noch eine Idee woran es liegen könnte, dass unsere Systeme partout keine Dateien ohne Rückfrage überschreiben wollen? Es gibt im Code ja Folgendes:
Code: If Not System.IO.Directory.Exists(Neuerpfad) Then System.IO.Directory.CreateDirectory(Neuerpfad)
Könnte man etwas Ähnliches mit File anstatt mit Directory aufbauen? Das ist zwar ein Ansatz von einer anderen Seite, aber könnte das funktionieren? 1) Prüfen ob zu erzeugende Datei bereits vorhanden 2) Vorhandene Datei löschen 3) Neue Datei erstellen Grüße, Thomas
[Diese Nachricht wurde von Barbatoss am 02. Jan. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ftg Mitglied Technischer Sklave
Beiträge: 550 Registriert: 16.09.2004 DELL Xeon Workstation Windows 10 Pro (besser als sein Ruf...) Inventor Pro 2016 PSP 2011 GAIN Collaboration
|
erstellt am: 02. Jan. 2017 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Zitat: Original erstellt von Barbatoss:
Habt Ihr denn noch eine Idee woran es liegen könnte, dass unsere Systeme partout keine Dateien ohne Rückfrage überschreiben wollen?
Moin, du sagst ja dass dein Zielordner im Netz liegt. Somit kann es fast auch nur an den Sicherheitseinstellungen / Richtlinien etc. vom Server liegen. Da würde ich die Admins mal drauf ansetzen, die können im Server auch mal die Dateioperationen loggen und schauen wieso es knallt. Notfalls auch mal den Ordner nicht als Map sondern als UNC angeben und schauen was dann passiert. Die Translator-Addins welche du mit dem Script ansprichst juckt es überhaupt nicht ob die Datei existiert oder nicht. Machen wir täglich zig mal mit eigenen Addins und hatten das Problem noch nie. Somit hätte sich dann auch der andere Teil deiner Frage wahrscheinlich erledigt, wenn dich der Server nicht überschreiben lässt, gehe ich mal davon aus, dass er auch das Löschen einer Datei nicht zulassen wird. (So eine "Lösung" wäre eh von hinten durch die Brust geschossen) ------------------ mfg ftg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 02. Jan. 2017 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo FTG! Danke für deine Rückmeldung! Wenn ich keine Berechtigungen auf dem Server habe, dann dürfte ich die Dateien eigentlich auch nicht über "wollen Sie überschreiben? --> ja" überschreiben können oder? Bzw. dürfte ich im Explorer dann auch nicht umbenennen, erzeugen, löschen etc... Ich habe das Makro jetzt eben auf einen lokalen Pfad bei mir auf der Festplatte gezogen. Gleiches Verhalten. Aber bei mir auf dem Laufwerk bin ich doch als Admin auch Admin?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ftg Mitglied Technischer Sklave
Beiträge: 550 Registriert: 16.09.2004 DELL Xeon Workstation Windows 10 Pro (besser als sein Ruf...) Inventor Pro 2016 PSP 2011 GAIN Collaboration
|
erstellt am: 03. Jan. 2017 05:39 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Moin, muss wohl an Ilogic selbst liegen, wie gesagt in einem normalen Addin kann ich das nicht nachvollziehen, da würde bei uns keins der Exportplugins mehr funktionieren. Eine mögliche Lösung hab ich bei Autodesk selbst gefunden, hier hat wohl jemand ein ähnliches Problem . In Post Nr.8 beschwert sich einer, dass er immer bestätigen muss, wenn seine Zeichnung aus mehreren Blättern besteht.
------------------ mfg ftg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 03. Jan. 2017 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Mahlzeit allerseits! Ich habe jetzt die etwas grobschlächtige Variante in Anlehnung an deinen geposteten Link (danke dafür!) zusammengebastelt und es funktioniert. Das freut mich! Code hänge ich unten an! Auch sollte es mit unserer Ablagestruktur zu keinen Problemen kommen, die ja denkbar sind wenn ich von verschiedenen Zeichnungsdateien in den gleichen Zielordner abspeichern möchte. Jetzt gibt es nurnoch zwei Schönheitsfehler, die mich stören. Hoffentlich finde ich da noch was dazu: 1) Ich zähle für die Messagebox die Dateien, die im Ordner vorhanden sind, eigentlich möchte ich aber auch nur vorhandene DXF-Dateien zählen. 2) Ich rufe das DXF-Addin einmal mit IF und einmal mit ELSEIF auf, damit ich in der Messagebox bei "Abbruch" nicht die gleiche Funktion wie bei "Nein" auslöse. Das verdient sicherlich auch keinen Preis für besonders gute Programmierung An alle Beteiligten ein DICKES Dankeschön für Rat, Tat und Geduld!
Grüße, Thomas
Code:
Sub Main 'Prüfen ob Dokument eine Zeichnung ist Dim oDoc As Document = ThisApplication.ActiveDocument If oDoc.DocumentType <> DocumentTypeEnum.kDrawingDocumentObject Then Exit Sub ' Get the DXF translator Add-In. Dim DXFAddIn As TranslatorAddIn DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}") 'Set a reference to the active document (the document to be published). Dim oContext As TranslationContext oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oDataMedium As DataMedium oDataMedium = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If DXFAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then ' Create the name-value that specifies the ini file to use. oOptions.Value("Export_Acad_IniFile") = "L:\Inventor\0000\_Allgemein\Design Data 2016\DWG-DXF\exportdxf.ini" End If oProject = Left(ThisDoc.FileName(False),5) 'without extension oBaugruppe = ThisDoc.FileName(False) 'without extension 'Specifiy target-path for dxf-export (x:\xx\xxxxxx\) oPath = "L:\Export\DXF\" oName = ThisDoc.FileName(False) ' without extension 'Combine path and name for dxf-target folder/name oFolder = oPath & oProject & "\" & oName & "\" oDataMedium.FileName = oPath & oProject & "\" & oName & "\" & oNameBlatt & ".dxf" 'Search for existing folder, create if not existing If Not System.IO.Directory.Exists(oFolder) Then System.IO.Directory.CreateDirectory(oFolder) End If 'Count existing files in folder Dim counter = My.Computer.FileSystem.GetFiles(oPath & oProject & "\" & oName & "\") 'query for action question = MessageBox.Show("Alle gefundenen DXF-Dateien im Ordner löschen?" _ & vbNewLine & "" _ & vbNewLine & "Anzahl = " & CStr(counter.Count) _ & vbNewLine & "" _ & vbNewLine & "Nein = Einzelauswahl" , "WARNUNG", MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning) 'set condition based on answer If question = vbYes Then 'Kill all *.dxf-Files in folder Kill(oPath & oProject & "\" & oName & "\" & "*.dxf") 'Publish document. DXFAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium) MessageBox.Show("Fertig!","Status",MessageBoxButtons.OK) ElseIf question = vbNo Then 'Publish document. DXFAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium) MessageBox.Show("Fertig!","Status",MessageBoxButtons.OK) End If End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ftg Mitglied Technischer Sklave
Beiträge: 550 Registriert: 16.09.2004 DELL Xeon Workstation Windows 10 Pro (besser als sein Ruf...) Inventor Pro 2016 PSP 2011 GAIN Collaboration
|
erstellt am: 03. Jan. 2017 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Zitat: Original erstellt von Barbatoss:
1) Ich zähle für die Messagebox die Dateien, die im Ordner vorhanden sind, eigentlich möchte ich aber auch nur vorhandene DXF-Dateien zählen.
Moin, eigentlich solltest du bei der GetFiles() Methode noch eine Wildcard (*.dxf) als Parameter mitgeben können. Ich mach normalerweise nix mit Ilogic, aber bei VB.Net bzw. C# sollte das gleich sein, sind ja native .Net Methoden. Daher schau am besten mal bei MSDN nach. Wenns funktioniert schaut keiner ob der Code "schön" ist. Mit wachsender Erfahrung erledigt sich sowas von selbst, man schreibt seine "Jugendsünden" halt irgendwann neu. Bei dir zählt momentan das Erfolgserlebnis <Ha, habs hingekriegt!>
------------------ mfg ftg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 03. Jan. 2017 16:24 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Da hast du natürlich absolut recht! Ich habe gerade noch eine kleine Ergänzung eingebaut, da beim bisherigen Code auch bei einem leeren Ordner die Rückfrage "Willst du überschreiben?" bringt... auch wenn 0 Daten überschrieben werden könnten, weshalb dann ein Fehler auftaucht. Eine Sache ist und bleibt mir jedoch ein Rätsel. Wieso funktioniert das Ganze erst bei einer IDW, die über mehr als ein Blatt verfügt? Wenn wirklich nur ein Blatt vorhanden ist, so erzeugt mir der Code im richtigen Ordner eine Datei ohne Namen, also ".dxf".. , die Zufriedenheit ist hart erkämpft :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ftg Mitglied Technischer Sklave
Beiträge: 550 Registriert: 16.09.2004 DELL Xeon Workstation Windows 10 Pro (besser als sein Ruf...) Inventor Pro 2016 PSP 2011 GAIN Collaboration
|
erstellt am: 03. Jan. 2017 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Moin, ein Grund wieso ich ILogic nie angefasst hab ist einfach die fehlende Debug-Möglichkeit und der unkomfortable Editor. Ich mach mein Zeug in Visual Studio da kann ich sowas mal schnell aufbauen und ausprobieren. Mit solchen zusammenkopierten Codefragmenten bin ich auch schon auf die Nase gefallen,meistens kapiert man eh nicht immer 100% genau was die da grade treiben und wenn mal der Wurm drin ist verbringt man viel Zeit den Fehler zu finden. Hat man mal das Prinzip von dem verstanden was man grade machen will, ist es oft besser das ganze nochmal sauber,im eigenen Stil neu aufzusetzen und Schritt für Schritt zu testen. Ohne Debugger würde ich hier mal überall wo du Variablen belegst und Pfade zusammenbaust eine Messagebox einbauen, die dir zeigt was denn nun grade drinsteht. Wahrscheinlich ist irgendwo ein logischer Fehler drin, der unter Umständen einen leeren Dateinamen zurückgibt. Es gibt auch eine Trace-Funktion in ILogic (Trace.WriteLine(Zeigmeinendxfnamen)) ,um da aber den Output zu sehen brauchst du noch nen Logger wie sowas hier: https://technet.microsoft.com/en-us/sysinternals/bb896647
------------------ mfg ftg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big-Daddy Mitglied Konstrukteur
Beiträge: 51 Registriert: 08.04.2015
|
erstellt am: 03. Mrz. 2017 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo zusammen, ich habe auch eine Frage zu den Layern beim DXF Export. Ich mache aus meiner Abwicklung eine DXF Datei, was bisher auch problemlos funktioniert. Die inneren und äußeren Konturen werden auf den gleichen Layer "Kontur" gesetzt. Jetzt meine Frage, wenn ich in meiner .ipt ein Stanzwerkzeug einfüge wird daraus ja ein "IFeature" Kann man die "IFeatures" bzw die eingefügen Stanzwerkzeuge auf einen anderen Layer legen lassen?? Mein bisheriger Code: Code: '**Document definieren Dim oDoc As Document = ThisDoc.Document Dim oCompDef As SheetMetalComponentDefinition = oDoc.ComponentDefinition Dim Version As StringTitle = ThisDoc.FileName (False) Pfad = ThisDoc.Path altPfad = Right(Pfad,Len(Pfad)-3) & "\" NeuPfad = "K:\" & altPfad Version = iProperties.Value("Summary", "Keywords") Dim sFname As String '**Variable für Namen deklarieren '**Variable für Abwicklungsoptionen deklarieren und mit Werten füllen Dim sOut As String = "FLAT PATTERN DWG?AcadVersion=2013&OuterProfileLayer=Kontur&InteriorProfilesLayer=Kontur&InvisibleLayers=IV_UNCONSUMEND_SKETCHES;IV_ALTREP_BACK;IV_ALTREP_FRONT;IV_ARC_CENTERS;IV_TOOL_CENTER_DOWN ;IV_TOOL_CENTER;IV_AR C_CE NTERS;IV_TANGENT;IV_BEND;IV_BEND_DOWN&SplineTolerance Double 0.01" '**Prüfung ob eine Abwicklung vorhanden ist: If oCompDef.HasFlatPattern = False Then 'wenn nein dann abwickeln oCompDef.Unfold Else 'ansonsten editieren oCompDef.FlatPattern.Edit End If If Version = "" Then
'**Dokumentennamen auslesen und daraus Name und Pfad für DXF Datei erstellen sFname = oDoc.PropertySets.Item("Design Tracking Properties").item("Part Number").Value sFname = NeuPfad + Title + ".dxf" Else '**Dokumentennamen auslesen und daraus Name und Pfad für DXF Datei erstellen sFname = oDoc.PropertySets.Item("Design Tracking Properties").item("Part Number").Value sFname = NeuPfad + Title + "_" + Version + ".dxf" End If 'Falls das Verzeichnis nicht exisitiert wird es erstellt If Not System.IO.Directory.Exists(NeuPfad) Then System.IO.Directory.CreateDirectory(NeuPfad) End If '**Daten schreiben oCompDef.DataIO.WriteDataToFile(sOut, sFname) '**Abwicklung verlassen oCompDef.flatpattern.exitedit
Vielen Dank im vorraus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 23. Okt. 2017 10:32 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Zitat: Original erstellt von Barbatoss: Da hast du natürlich absolut recht!Ich habe gerade noch eine kleine Ergänzung eingebaut, da beim bisherigen Code auch bei einem leeren Ordner die Rückfrage "Willst du überschreiben?" bringt... auch wenn 0 Daten überschrieben werden könnten, weshalb dann ein Fehler auftaucht. Eine Sache ist und bleibt mir jedoch ein Rätsel. Wieso funktioniert das Ganze erst bei einer IDW, die über mehr als ein Blatt verfügt? Wenn wirklich nur ein Blatt vorhanden ist, so erzeugt mir der Code im richtigen Ordner eine Datei ohne Namen, also ".dxf".. , die Zufriedenheit ist hart erkämpft :-)
Hallo zusammen! Ich möchte nochmal auf diesen ominösen Effekt zu sprechen kommen une kurz eure Schwarmintelligenz anzapfen. Das Problem scheint hier einfach zu sein, dass ich nicht an die gewünschten Namen rankomme Wenn ich in meinem Code den Blattnamen anzeigen lasse:
Code: 'Get the sheet-name MessageBox.Show(ActiveSheet.Name, "Title")
dann wird dieser korrekt ausgegeben! Wenn ich den Blattnamen dann aber übergeben möchte in ein Element oNameblatt (zuvor als String deklariert) und das Ergebnis anzeigen lasse Code: oNameblatt = ActiveSheet.Name(False) 'without extension MessageBox.Show(oNameblatt, "Title")
dann läuft irgendwas schief; Was muss ich denn machen um den Blattnamen in oNameblatt zu übergeben? Besten Dank, Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RolandD Mitglied
Beiträge: 559 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: 23. Okt. 2017 11:04 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
|
Barbatoss Mitglied Ingenieur
Beiträge: 38 Registriert: 17.02.2016 Inventor Professional 2018 Build 227 - Release 2018.2 Intel Xeon E5-1620 v3 32GB DDR4 Nvidia Quadro K2200 Win10 Pro
|
erstellt am: 23. Okt. 2017 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hallo zusammen, ich habe das Monster jetzt gezähmt, es tut was ich von ihm möchte! Nachdem ich mit meinen alten Codeschnipseln nicht mehr zurecht gekommen bin, habe ich mir selbst folgendes zusammengebastelt; Vielleicht kann es der ein oder andere verwenden.. Grüße, Tom Code: Sub Main 'Prüfen ob Dokument eine Zeichnung ist Dim oDoc As Document = ThisApplication.ActiveDocument If oDoc.DocumentType <> DocumentTypeEnum.kDrawingDocumentObject Then Exit Sub Dim oNameBlatt As String Dim oSheetName As String Dim oSheetNameMod As String Dim oSheetNr As String Dim erste_Seite As String Dim oSheets As Sheet Dim oDXFAddIn As TranslatorAddIn Dim oContext As TranslationContext Dim oOptions As NameValueMap Dim oDataMedium As DataMedium oPath = "L:\Export\DXF\" erste_Seite = ""oDXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}") oDocument = ThisApplication.ActiveDocument oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism oOptions = ThisApplication.TransientObjects.CreateNameValueMap oDataMedium = ThisApplication.TransientObjects.CreateDataMedium If oDXFAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then ' Create the name-value that specifies the ini file to use. oOptions.Value("Export_Acad_IniFile") = "L:\Inventor\0000\_Allgemein\Design Data 2018\DWG-DXF\exportdxf_neu.ini" End If For Each oSheets in oDoc.Sheets oSheets.Activate oSheet = ActiveSheet oFileName = ThisDoc.FileName(False) 'ohne Erweiterung oSheetNr = Right(oSheet.Name,1) 'Blattnummer OSheetName = oSheet.Name 'Blattname ohne Blattnummer 'MessageBox.Show(OSheetName, "Name mit :") Dim oLength As Integer oLength = Len(OSheetName)-2 'MessageBox.Show(oLength, "Länge") OSheetNameMod = Left(OSheetName, oLength) 'MessageBox.Show(OSheetNameMod, "Mod") oProject = Left(oSheet.Name,5) oAssembly = Left(oSheet.Name,13)&"-000" oFolder = oPath & oProject & "\" & oAssembly & "\" If oSheetNr = "1" Then erste_Seite = oSheet.Name oDataMedium.FileName = oPath & oProject & "\" & oAssembly & "\" & oSheetNameMod & ".dxf" 'MessageBox.Show(oDataMedium.FileName, "Pfad") 'MessageBox.Show(oFolder, "zu erzeugender Pfad") 'Search for existing folder, create if not existing If Not System.IO.Directory.Exists(oFolder) Then System.IO.Directory.CreateDirectory(oFolder) End If 'Search for existing DXF-export in folder, delete if existing If System.IO.File.Exists(ActiveSheet.Name) Then System.IO.File.Delete(ActiveSheet.Name) End If oDXFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium) Next End Sub
[Diese Nachricht wurde von Barbatoss am 23. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |