In diesem Artikel geht es darum, eine externe Regel zu erstellen. Diese soll eine IDW als PDF abspeichern. Hier die Links zu den iLogic Artikeln 1-5 mit denen ihr anfangen solltest, falls noch nicht geschehen. Alle Artikel zum Thema “iLogic” gibt’s hier.
Inventor automatisieren mit iLogic - Teil 1
Inventor automatisieren mit iLogic - Teil 2
Inventor automatisieren mit iLogic - Teil 3
Inventor automatisieren mit iLogic - Teil 4
Inventor automatisieren mit iLogic - Teil 5
Externe Regeln
Alle Regeln, die wir bisher erstellt haben, existieren nur in der Datei, in der wie sie erstellt haben. Um eine Regel “global” verfügbar zu machen, muss sie als globale Regel erstellt werden. Das ist recht simpel: Einfach in Regeln-Browser im Register “Extern” RMT > “neue externe Regel erstellen” aufrufen. Im nachfolgenden Dateidialog eine neue Datei erstellen mit dem gewünschten Dateinamen z.B. “pdf”. Die Angabe der Dateiendung ist nicht notwendig, iLogic fügt automatisch “iLogicVb” an.
PDF erstellen
Sobald die externe Regel besteht, kann’s schon los gehen. Um eine Kopie der IDW als PDF zu speichern, genügt eine Zeile Code. Über die Snippets einfach “Dokument > Datei speichern unter” hinzufügen und noch den – momentan noch statischen - Pfad ergänzen: ThisDoc.Document.SaveAs("c:\temp\test.pdf" , True). Das Verzeichnis, in meinem Beispiel “c:\temp”, muss natürlich existieren.
Nun sollte natürlich eine IDW geöffnet sein. Wenn nun die Regel ausgeführt wird, erstellt sie im Verzeichnis c:\temp die test.pdf Datei.
Jetzt wollen wir die Regel etwas erweitern. Zuerst ermitteln wir den aktuellen Dateinamen und Pfad und weisen ihn der Variable “Dateiname” zu. Durch die Option “(False)” wird der Pfad und Dateiname ohne Dateierweiterung “(z.B. .idw) ausgegeben.
Dateiname = ThisDoc.PathAndFileName(False)
Wenn die Datei noch nicht gespeichert wurde, dann gibt es keinen Pfad mit Dateiname und somit ist die Variable leer. Und wenn Sie leer ist, können wir auch keine PDF speichern. Deswegen machen wir jetzt eine Abfrage ob die Variable “Dateiname” leer ist…
If Dateiname = "" Then
… und wenn das der Fall ist, dann soll eine Meldung kommen, das die Datei noch nicht gespeichert ist. Die Meldung wird über den Befehl “Msgbox” ausgegeben. Solche Meldungen, lassen sich einfach über den entsprechenden Assistenten erstellen:
Sollte die Variable “Dateiname” nicht leer sein, dann wird der Befehl unter “Else” ausgeführt. In diesem verwenden wir die Variable “Dateiname” und hängen mittels “& “.pdf” an, da die Variable “Dateiname” den Pfad und Dateinamen ohne Dateierweiterung enthält. EndIf schließt das Programm ab.
Else
ThisDoc.Document.SaveAs(Dateiname & ".pdf" , True)
End If
Schaut am Stück so aus:
Sobald nun die Regel mittels RMT > Regel ausführen gestartet wird, wird aus der IDW eine PDF erstellt.
Einfach, oder?
Super! Weiter so. Macht immer Spaß und ist sehr informativ!
AntwortenLöschenSuper Anleitung. Danke!
AntwortenLöschenGibt es auch eine Möglichkeit, dass die externe Regel global bei jedem Bauteil zu einem bestimmten Punkt eingeleitet wird (zb Nach Speicherung), ohne dass dies in den Bauteilen jeweils einzeln über "Rules triggered by Events" eingestellt werden muss?
vielen Dank im Voraus
Find die Anleitung auch Prima. suche auch nach der gleichen Möglichkeit wie mein Vorredner. Externe Regeln auch einem "Globalen" Ereignisauslöser zuzuordnen, sonst muß man ja in jedem Dokument den Eregnissauslöser für die externe Regel neu definieren.
AntwortenLöschenDanke
Mit freundlichen Grüßen TG
Die Anleitung ist super vielen Dank dafür,
AntwortenLöschennur ein Problem habe wenn ich zwei oder drei Blätter habe dann erstellt er immer nur von der ersten Seite die PDF, kann mann das so einstellen dass er immer alle blätter nimmt?
Regel automatisch bei jeder Datei auslösen: Tool ==>
AntwortenLöschenhttp://inventorfaq.blogspot.com/2010/11/ilogic-regel-automatisch-beim-speichern.html
Vielen Dank mit dieser Verknüpfung habe ich es versucht aber es ging leider nicht. Mit volgendem Code habe ich es jetzt geschaft:
AntwortenLöschenpath_and_name = ThisDoc.PathAndFileName(False) ' without extension
PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
oDocument = ThisApplication.ActiveDocument
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
If PDFAddIn.HasSaveCopyAsOptions(oDataMedium, oContext, oOptions) Then
oOptions.Value("All_Color_AS_Black") = 1
oOptions.Value("Remove_Line_Weights") = 1
oOptions.Value("Vector_Resolution") = 400
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
'oOptions.Value("Custom_Begin_Sheet") = 2
'oOptions.Value("Custom_End_Sheet") = 4
End If
'Set the destination file name
oDataMedium.FileName = path_and_name & ".pdf"
'Publish document
PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions,oDataMedium)
Die Anleitungen sind echt Genial!
AntwortenLöschenGibt es denn auch die Möglichkeit ganze Baugruppen zu steuern?
Ich habe z.B. einen Behälter.
Nun möchte ich, dass ich durch Angabe der Segmetanzahl (Also die anzahl der zusammen zu schweißenden Mäntel) und deren Durchmesser, einen Lagerbehälter generieren lasse, indem auch die Klöpperböden von iLogic automatisch eingefügt werden?
Vielen dank schon mal
Liebe Grüße
Sascha
Hallo,
AntwortenLöschenwie setze ich denn den Dateinamen variabel? Wenn ich die ...\test.pdf stehen lasse wird die test.pdf immer wieder überschrieben.
Danke im Voraus.
Gruß Simon
@Simon
AntwortenLöschensteht doch alles oben:
"Jetzt wollen wir die Regel etwas erweitern. Zuerst ermitteln wir den aktuellen Dateinamen und Pfad und weisen ihn der Variable “Dateiname” zu. Durch die Option “(False)” wird der Pfad und Dateiname ohne Dateierweiterung “(z.B. .idw) ausgegeben.
Dateiname = ThisDoc.PathAndFileName(False)"...
@Jürgen
AntwortenLöschenOh... klasse habe die aller erste Zeile stehen lassen. jetzt Klappt es!
Danke
Gruß Simon
Guten Morgen,
AntwortenLöschenbei mir sind folgende zwei Probleme mit dieser Regel aufgetreten.
Zum einen kam es vor, dass inventor die pdf nicht in den gleichen ordner wie die idw abgespeichert hat,
kann das damit zusammenhängen das ich in meiner regel nur Dateiname = ThisDoc.FileName(False)als Variable
angeben habe?
Zum zweiten habe ich dann genau die obere Regel ausprobiert und dann kam bei mir folgende Fehlermeldung:
iLogic Event-Driven Rule
RunExternalRule: Cannot find the external rule file: PDF#
System.ArgumentException: RunExternalRule: Cannot find the external rule file: PDF
bei aq.b(String A_0)
bei iLogic.EventsRuleRunner.a(Document A_0, StandardAddInServer A_1, a A_2)
Um eure Hilfe wäre ich sehr dankbar.
Gruß Jan
Bei ThisDoc.FileName isz auch kein Pfad mit dabei sondern nur der Dateiname
LöschenRunExternalRule: Cannot find the external rule file: PDF
Hast du den überhaupt eine externe Regel mit Namen PDF?
Hallo Jürgen,
Löschenes ist so: In der Firma benutzen wir bis jetzt die Regel mit Namen PDF.
Eben ohne den Pfadnamen und eigentlich funktioniert sie auch, nur haben mich
meine Kollegen jetzt darauf aufmerksam gemacht, dass der Speicherort nicht immer
korrekt ist.
Jetzt habe ich an meinem Rechner eine neue Regel nach deiner Vorlage erstellt und
bekomme eben diese Fehlermeldungen.
aber ich verstehe nicht warum inventor die alte Regel mit einbindet?
hast du eine Idee?
Vielen Dank schonmal
Gibts ne Möglichkeit eine Abfrage einzubauen damit schon vorhandene Dateien nicht ohne nachzufragen überschrieben werden?
AntwortenLöschenHallo ,
Löschenmeine Frage geht so ziemlich am Thema vorbei, aber sie betrifft zumindestens die Externe Regel.
Ist es möglich in einer externen regel auf Parameter zuzugreifen?
Mir ist es bisher nicht gelungen, deswegen hier meine verzweifelte Frage