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 All macros will generally present a similar structure with first import section, then definition section and finally main instruction section. We will focus on this latter because main instructions (they are quite easy to spot because they start at the full beginning of the line) are actually the ones that 'execute' the macro. For later step, we'll need to programmatically import the macro then execute it. This can't be done with the actual structure of the macro. To be able to do so, we need to enclose the main instructions in a function --eg. run-- then ensure this function is still called when the macro is manually run by the user. If you're not totally sure of what you're doing, it is advised to work on a copy of the macro (or you may just want to keep the original macro as is). The original file shall be modified as follow : from PySide import QtGui import FreeCAD as App import FreeCADGui as Gui
 * 1) Main instruction section
 * 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 Of course if the function 'run' already exists in the macro, you can choose any other convenient name Now the macro is ready to be integrated in FreeCAD startup.
 * 1) Ensure main instructions are still called in case of manal run

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 runMacroStartup(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(runMacroStartup) ##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__.runMacro = runMacro
 * 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(runMacro) 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).
 * 1) Connect the function that runs the macro to the appropriate signal

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.

Related

 * Extra_python_modules LazyLoader is a python module that allows deferred loading,