In letzter Zeit bin ich wieder im Autodesk Inventor Forum aktiv nach einer Pause, in der ich mich mit anderen Themen beschäftigt habe. Nun also mal wieder mehr Inventor "Freizeitbeschäftigung". Dort sind nur ein paar Fragen aufgefallen, bei denen es immer darum ging, Programmcode (meist iLogic) abzuspeichern und dann auch noch automatisch bei einem bestimmten Ereignis auszuführen. Ein paar Beispiele:
- Beim Speichern soll geprüft werden, ob Komponenten einer Baugruppe ein iProperty mit einem bestimmten Wert enthalten sind.
- Beim Speichern sollen iProperties abgefragt werden.
Bei beiden (und allen anderen gleichartigen Fragestellungen) geht es immer um zwei Aufgabenstellungen:
- Es gibt einen Programmcode, der ausgeführt werden soll
- Das Ausführen des Programms soll über ein Ereignis erfolgen, z.B. immer vor dem Speichern
Programmcode erstellen
In meinen Programmieranleitungen habe ich im ersten Beitrag die verschiedenen Möglichkeiten erwähnt, die es erlauben, den Inventor über eine Programm zu automatisieren.
- iLogic
- VBA
- Add-In / externes Programm
Die Einsteiger unter den Hobbyprogrammierern werden sich auf iLogic und VBA konzentrieren, da hier die Programmierumgebungen direkt im Inventor integriert sind. Es sind keine anderen Programm notwendig, die wieder neues Know How (neben dem beherrschen der eigentlichen Programmiersprache) benötigen.
Hier der iLogic Codeeditor:
Die VBA IDE:
Im Gegensatz dazu das MS Visual Studio in der kostenlosen Express Edition, das heruntergeladen, installiert und eben auch bedient werden können muss:
Und was soll den nun angewendet werden? Einfache Antwort: Das hängt davon ab ;)
iLogic ist stark darin, mit wenigen Zeilen Programmcode etwas zu automatisieren, "Intelligenz" in ein Modell zu bekommen und dank der iLogic Ereignisauslöser auch noch bei bestimmten Ereignissen (Events) den Code automatisch auslösen zu können.
VBA hat eine bessere Entwicklungsumgebung mit mehr Debugging-Möglichkeiten, kann schönere Formulare darstellen, bietet bessere Möglichkeiten der Objektuntersuchung und kann einfacher als Button in die Oberfläche integriert werden.
Programmierung in Visual Studio in c# oder VB.net ist wie gesagt am komplexesten bietet aber alle Möglichkeiten, die eine moderne Programmiersprache bietet. Der Code ist (einigemaßen) vor Manipulation und Diebstahl sicher (bei VBA gibt es einen Passwortschutz des Projektes) und es lassen sich die gesamten Möglichkeiten der Inventor API nutzen, wie die ganzen Events. Das Debugging ist sehr gut und die gesamte IDE ist eben fürs Programmieren gemacht und das merkt man. Und schöne Forms (Fenster) lassen sich damit auch noch erstellen.
Als Hobbyprogrammierer mit wenig Zeit und wenigen Programmierprojekten sollten sich auf VBA und iLogic konzentrieren. Ihr könnt übrigens VBA-Code relativ einfach in iLogic-Code umwandeln. Anders herum ist es – abhängig von den iLogic-spezifischen Funktionen – schwer bis "unmöglich".
Programmcodeablage
Der Programmcode kann, abhängig von der gewählten Umgebung, an verschiedenen Stellen gespeichert werden.
VBA Speicherort
VBA Code kann gespeichert werden in:
- Inventor Modell oder Zeichnung (also IPT, IAM, IDW, DWG IPN)
Code, der nur für diese eine Datei relevant ist, sollte in der Datei als Dokumentprojekt gespeichert werden. Beispiel: In den Parametern eine VBA Funktion nutzen - in der Vorgabe VBA-Projektdatei
Code, der Inventorweit zur Verfügung stehen soll um ihn zu beliebigen Zeiten auszuführen, kommt in das Vorgabe-VBA-Projekt. Programmcode aus dieser Datei lässt sich sehr einfach als Icon in die Inventoroberfläche einbinden. Weitere Infos dazu hier: Inventor automatisieren: Programmieren für Konstrukteure (Teil 12)
- In einer externen Projektdatei
Zum Testen (bevor das fertige Programm in das Vorgabe-VBA-Projekt für die Kollegen verfügbar gemacht wird) kann man sein eigenes Projekt anlegen, das man allerdings nach dem Inventorstart manuell nachladen muss. Mehr dazu hier.
Ich nutze in meiner Inventor FAQ Toolbox ein VBA-Projekt, das beim laden des Inventor Addins mit geladen wird.
iLogic Speicherort
iLogic kennt interne/lokale und externe/globale Komponenten wobei es jeweils interne und externe Regeln und Formulare gibt.
- lokale Regeln und Formulare
Lokale Regeln/Formulare werden in der Datei selbst gespeichert und sollten immer dann zum Einsatz kommen, wenn der Code tatsächlich IPT oder IAM spezifisch ist. Hier ein typisches Beispiel, bei dem der Code nur in dieser Datei Anwendung findet: Fläche einer Skizze als Wert in den iProperties und in der Zeichnung [iLogic].
WICHTIG: Code, der für viele/alle IPTs oder IAMs gilt, sollte nicht in der Vorlage gespeichert werden um so jeden Datei mit den Programm auszustatten, den das bedeutet, nach einer gewissen Zeit hunderte oder tausenden Dateien mit einem identischen Programm, der in Kopie jeder einzelnen Datei enthalten ist. Wenn nun der Programmcode geändert (oder gelöscht) werden muss, müssen im Extremfall alle dieser 100ten oder 1000den Dateien manuell geöffnet, geändert und wieder gespeichert werden. Das kann bei der Migration oder einem Wechsel eines EDM-System zu einem echten Problem werden. ALSO GILT: CODE, DER GLOBAL BEI ALLEN DATEIEN VERFÜGBAR SEIN SOLLEN, NICHT LOKAL IN DEN DATEIEN/VORLAGEN SPEICHERN SONDERN ALS EXTERNEN/GLOBALEN REGELN UND FORMULAREN. - externe/globale Regeln und Formulare
iLogic-Code, der für viele Dateien verfügbar sein soll, sollte unbedingt als externe/globale Regeln und Formular gespeichert werden. Wichtige Grundlagen dazu in diesem Beitrag: Logic: externe Regeln global verfügbar machen (Einstellungen)
Globale Formulare werden übrigens im Design Data Verzeichnis gespeichert. Infos zum Design Data Verzeichnis hier.
Programmcode ausführen (manuell/automatisch)
Sobald der benötigte Programmcode in der gewünschten Sprache und – dadurch bedingt – auch in der entsprechenden Stelle, müssen wir entscheiden, wie und wann wie den Programmcode ausführen wollen.
iLogic manuell
Hier ein paar Möglichkeiten, iLogiccode manuell auszuführen:
Über den iLogic-Browser
Mittels iTrigger, wobei hier interne Regel funktionieren!
iLogicregeln über einen VBA-Macro ausführen (VBA-Makros lassen sich einfach in die Benutzeroberfläche einbinden) => iLogic Regel über VBA ausführen und wenn es um ein Formular geht: iLogic Formular als Icon in die Inventoroberfläche einbinden
Auch über eine Formular lassen sich Regel ausführen: iLogic: Regeln über einen Klick aufrufen mittels Formular
iLogic Automatisch
Hier Möglichkeiten, eine Regel automatisch, beim Eintreten eines bestimmten Ereignisses, auszulösen
Ereignisauslöser
Seit Inventor 2018 (mit Update 2) kann der Ereignisauslöser auch global für alle Dokumente (oder Bauteile, Baugruppe, Zeichnungen) definiert werden wobei bestimmten Events eine externe Regel zugewiesen werden kann. Aufruf über Verwalten > iLogic > Ereignisauslöser
Über ein Addin das selbst erstellt werden muss oder bzw. man nutzt die Inventor FAQ Toolbox: Beim Speichern einer Inventordatei (inkl. Komponenten bei Baugruppen) eine externe iLogicregel ausführen (Toolbox). Damit klappt das Ausführen externen Regeln auch mit älteren Inventorversionen.
VBA manuell
VBA-Code lässt sich einfach als Button in die Benutzeroberfläche integrieren. Das habe ich hier beschrieben inkl. der Möglichkeit, ein eigenes Icon zu verwenden.
VBA automatisch
Früher konnte man noch über Events in VBA, VBA Code ausführen. Das wurde aus Sicherheitsgründen entfernt. Wer jetzt z.B. beim Speichern einen VBA Code ausführen will, der kann u.a. einen neuen Speichernbutton erstellen, also ein VBA-Programm, das erstmal den eigenen Code ausführt und dann erst, am Ende des Codes, die Speichernfunktion (über die API) aufruft.
Über iLogic und dessen Ereignisauslöser kann auch ein VBA-Code ausgeführt werden nach dem System: iLogic Ereignisauslöser > iLogic Regel > VBA Code wie hier beschrieben.
Eine dritte Möglichkeit ist es, die Inventor Toolbox zu nutzen. Die führt beim Speichern beliebigen VBA-Code aus. Das Toolbox Addin hat einen Event Trigger, der den Event Speichern gemeldet bekommt und dann den entsprechenden VBA-Code ausführt.
Wieder einmal ein Klasse Beitrag von dir Jürgen!
AntwortenLöschenIch halte es meist so, daß ich zunächst in VBA entwickel wegen der guten Entwicklungsumgebung und danach in iLogic bzw .NET übertrage.
Viele Grüße Martin
Danke, Martin!
Löschen