Macro at Startup/de

Einführung
In dieser Dokumentation wird erklärt, wie ein Makro so eingerichtet wird, dass es beim Start von FreeCAD automatisch ausgeführt wird.

Vor Beginn sind folgende Dinge zu beachten :
 * Das automatische Ausführen von Makros beim Start kann als Sicherheitsrisiko betrachtet werden. Du solltest nur Makros ausführen, denen du vertraust und die du zuvor getestet hast.
 * Du benötigst wahrscheinlich einige Python- und Codierungsbegriffe, um diesem Verfahren zu folgen
 * Wenn auf Benutzerordner ('Mod', 'Makro', ...) verwiesen wird, befinden sich diese in deinem FreeCAD Benutzerordner. Du kannst sie unter Start und Konfiguration → Benutzerbezogene Informationen finden.
 * Dies sollte nicht für Makros gemacht werden, die sich mit der Teilemodellierung befassen. Dies ist eher für Makros geeignet, die Funktionen hinzufügen, die Benutzeroberfläche verbessern, ...

Das Makro vorbereiten
Im Allgemeinen wird es vorkommen, dass ein Makro nicht direkt mit einem Programmstart kompatibel ist und feinabgestimmt werden muss

Betrachte das untenstehende Makro, das du von irgendwo heruntergeladen hast und das in deinem 'Makro' Ordner mit dem Namen 'MeinSuperMakro.FCMakro' gespeichert ist:

from PySide import QtGui
 * 1) Import section ##

class MyMsgBox(QtGui.QMessageBox):
 * 1) Definition section (classes, functions, ...)

def __init__(self): super(MyMsgBox, self).information(None, "MyTitle", "MyText")

MyMsgBox
 * 1) Main instruction section

Alle Makros zeigen generell eine ähnliche Struktur: Zuerst ein Import-, dann ein Definitions- und abschließend der Hauptbefehlsabschnitt. Wir werden uns auf letzteren fokussieren, weil diese Hauptbefehle (die recht einfach zu erkennen sind, weil sie am Anfang der Zeile stehen) tatsächlich die sind, die das Makro 'ausführen'. In einem späteren Schritt müssen wir das Makro programmatisch importieren und dann ausführen. Dies ist in der aktuellen Struktur des Makros nicht möglich. Um das zu tun, müssen wir die Hauptbefehle in eine Funktion -z.B. run- einschließen und dafür sorgen, dass diese Funktion auch bei einem manuellen Start durch den Benutzer aufgerufen wird. Wenn du nicht wirklich sicher bist, was du tust, wird es empfohlen, mit einer Kopie des Makros zu arbeiten (oder einfach das Original-Makro zu lassen, wie es ist). Die Originaldatei sollte wie folgt geändert werden:

from PySide import QtGui import FreeCAD as App import FreeCADGui as Gui
 * 1) The 2 below lines shall be added if not already present to ensure FreeCAD modules are imported

class MyMsgBox(QtGui.QMessageBox):

def __init__(self): super(MyMsgBox, self).information(None, "MyTitle", "MyText")

def run: MyMsgBox
 * 1) Enclose the main instructions in a function

if __name__ == '__main__': run
 * 1) Ensure main instructions are still called in case of manual run

Falls die Funktion 'run' bereits im Makro existiert, kannst du jeden anderen geeigneten Namen verwenden. Nun ist das Makro bereits, um in den FreeCAD-Start integriert zu werden.

In FreeCAD Start integrieren
Erstelle zunächst einen neuen Ordner in deinem Benutzerordner 'Mod', sagen wir 'MacroStartup'. Kopiere das modifizierte Makro in diesen neu erstellten Ordner und benenne es mit der Erweiterung '.py' um, falls dies noch nicht der Fall ist (beachte, dass, wenn du das Makro selbst entwickelst, es auch im 'Makro' Ordner mit der Erweiterung '.py' benannt werden kann, so dass du es beim Kopieren nicht umbenennen musst). Erstelle schließlich im gleichen Ordner eine Datei namens 'InitGui.py', die folgenden Code enthält

def runStartupMacros(name): # Do not run when NoneWorkbench is activated because UI isn't yet completely there if name != "NoneWorkbench": # Run macro only once by disconnecting the signal at first call FreeCADGui.getMainWindow.workbenchActivated.disconnect(runStartupMacros)

# Following 2 lines shall be duplicated for each macro to run import MySuperMacro MySuperMacro.run

# Eg. if a second macro shall be launched at startup # import MyWonderfulMacro # MyWonderfulMacro.run

import __main__ __main__.runStartupMacros = runStartupMacros
 * 1) The following 2 lines are important because InitGui.py files are passed to the exec function...
 * 2) ...and the runMacro wouldn't be visible outside. So explicitly add it to __main__

FreeCADGui.getMainWindow.workbenchActivated.connect(runStartupMacros)
 * 1) Connect the function that runs the macro to the appropriate signal

Beachte, dass dies nur einmal geschehen soll. Wenn du mehr als ein Makro ausführen möchtest, kannst du einfach die anderen in derselben Datei hinzufügen (siehe die Kommentare zum obigen Code).

Wir sind durch. Dein Makro sollte beim nächsten FreeCAD Start automatisch ausgeführt werden.

Beachte, dass, wenn das Originalmakro über den Erweiterungsverwalter heruntergeladen wurde, es bei der Aktualisierung überschrieben wird und du daher die Schritte hier erneut befolgen musst.

General Notes

 * In the example 'InitGui.py' script above, the function named 'runStartupMacros' may be changed, so long as you also change the other four references to it, so they all match.
 * This script will be run prior to the auto loading of your desired startup workbench in the FreeCAD Preferences, Preferences_Editor.

Windows

 * In the above example, you may place the 'MacroStartup' folder within the 'Mod' folder of your FreeCAD root directory (whether installed version or portable version), or you may create a 'Mod' folder along side the 'Macro' folder in '%USERPROFILE%\AppData\Roaming\FreeCAD\', and place the 'MacroStartup' folder there.
 * From observation, the workbenches found within either 'Mod' folder are loaded alphabetically. Those in the FreeCAD root 'Mod' folder are loaded first, then FreeCAD scans the '%USERPROFILE%\AppData\Roaming\FreeCAD\Mod' folder for additional workbenches.

Verwandtes

 * Extra_python_modules LazyLoader ist ein Python-Modul, das verzögertes Laden erlaubt.