Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

21.06.2010

Inventor automatisieren mit iLogic - Teil 6

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.

image

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.

image

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:

image

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:

image

Sobald nun die Regel mittels RMT > Regel ausführen gestartet wird, wird aus der IDW eine PDF erstellt.

Einfach, oder?

15 Kommentare:

  1. Super! Weiter so. Macht immer Spaß und ist sehr informativ!

    AntwortenLöschen
  2. Super Anleitung. Danke!

    Gibt 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

    AntwortenLöschen
  3. 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.

    Danke

    Mit freundlichen Grüßen TG

    AntwortenLöschen
  4. Die Anleitung ist super vielen Dank dafür,
    nur 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?

    AntwortenLöschen
  5. Regel automatisch bei jeder Datei auslösen: Tool ==>
    http://inventorfaq.blogspot.com/2010/11/ilogic-regel-automatisch-beim-speichern.html

    AntwortenLöschen
  6. Vielen Dank mit dieser Verknüpfung habe ich es versucht aber es ging leider nicht. Mit volgendem Code habe ich es jetzt geschaft:
    path_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)

    AntwortenLöschen
  7. Die Anleitungen sind echt Genial!
    Gibt 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

    AntwortenLöschen
  8. Hallo,

    wie 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

    AntwortenLöschen
  9. @Simon
    steht 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)"...

    AntwortenLöschen
  10. @Jürgen

    Oh... klasse habe die aller erste Zeile stehen lassen. jetzt Klappt es!

    Danke

    Gruß Simon

    AntwortenLöschen
  11. Guten Morgen,

    bei 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

    AntwortenLöschen
    Antworten
    1. Bei ThisDoc.FileName isz auch kein Pfad mit dabei sondern nur der Dateiname

      RunExternalRule: Cannot find the external rule file: PDF
      Hast du den überhaupt eine externe Regel mit Namen PDF?

      Löschen
    2. Hallo Jürgen,

      es 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

      Löschen
  12. Gibts ne Möglichkeit eine Abfrage einzubauen damit schon vorhandene Dateien nicht ohne nachzufragen überschrieben werden?

    AntwortenLöschen
    Antworten
    1. Hallo ,
      meine 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

      Löschen

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: