Workbench creation/de

Diese Seite zeigt, wie FreeCAD neue Arbeitsbereiche hinzugefügt werden. Arbeitsbereiche sind Container für FreeCAD Befehle. Sie können in Python, C++ oder in einer Mischung aus beiden programmiert werden. Letzteres hat den Vorteil, die Geschwindigkeit von C++ mit der Flexibilität von Python zu verbinden. In allen Fällen werden Arbeitsbereiche durch einen Satz von zwei Pythondateien gestartet.

Die Arbeitsbereichsstruktur
Im Grunde ist es einfach: Du benötigst einen Ordner mit einem beliebigen Namen im Mod Verzeichnis, mit einer Init.py Datei und, optional, einer InitGui.py Datei. Die Init Datei wird immer beim Start von FreeCAD ausgeführt, und die InitGui.py Datei wird unmittelbar danach ausgeführt, aber nur, wenn FreeCAD im GUI Modus und nicht im Konsolenmodus gestartet wird. Das ist alles, was FreeCAD braucht, um deinen Arbeitsbereich beim Start zu finden und in seine Oberfläche einzufügen.

Innerhalb dieser Dateien kannst du tun, was immer du willst. Normalerweise werden sie so verwendet:


 * In der Datei Init.py fügst du einfach ein paar Dinge hinzu, die auch dann verwendet werden, wenn FreeCAD im Konsolenmodus arbeitet, z.B. die Datei Importeure und -Exporteure


 * In der Datei InitGui.py definierst du normalerweise einen Arbeitsbereich, der einen Namen, ein Symbol und eine Reihe von FreeCAD Befehlen enthält (siehe unten). Dieser Arbeitsbereich definiert auch Funktionen, die ausgeführt werden, wenn FreeCAD geladen wird (Du versuchst, dort so wenig wie möglich zu tun, um den Start nicht zu verlangsamen), eine weitere, die ausgeführt wird, wenn der Arbeitsbereich aktiviert ist (dort wirst Du die meiste Arbeit erledigen), und eine dritte, wenn der Arbeitsbereich deaktiviert ist (damit Du Dinge, wenn nötig, entfernen kannst).

C++ Arbeitsbereichsstruktur
Wenn Sie einen Arbeitsbereich in Python programmieren, sind keine weiteren Dinge zu beachten und weitere Pythondateien können zusammen mit Init.py sowie InitGui.py gespeichert werden. Wenn Sie jedoch mit C++ arbeiten, sollten Sie besonders eine fundamentale Regel von FreeCAD beachten: Die Trennung des Arbeitsbereichs in einen Anwendungsteil (,der im Konsolenmodus ohne GUI Elemente laufen kann) und einen GUI Teil, der nur geladen wird, wenn FreeCAD in voller GUI Umgebung geladen wird. Wenn Sie also einen C++ Arbeitsbereich erstellen, werden Sie tatsächlich zwei Module erstellen (Applikation und GUI). Diese beiden Module müssen natürlich von Python aus aufrufbar sein. Jedes FreeCAD Modul (Applikation oder GUI) besteht zumindest aus einer Modul Init Datei. Dies ist eine typische AppMyModuleGui.cpp Datei:

Die Init.py Datei
Sie können ein Lizenzmodell Ihrer Wahl für Ihren Arbeitsbereich wählen. Sie sollte sich jedoch darüber bewusst sein, dass ein Arbeitsbereich, der zu einem gewissen Zeitpunkt in FreeCAD integriert und mit dem Quellcode veröffentlicht werden soll, der LPGL2+ Lizenz unterliegen muss. Die Funktionen FreeCAD.addImportType und addEXportType ermöglichen die Vergabe eines Namens und einer Dateiendung sowie ein Pythonmodul, das für diesen Import zuständig ist. Im obigen Beispiel ist importOwn.py für den Umgang mit .own Dateien verantwortlich. Schauen Sie unter Codeschnipsel nach weiteren Beispielen.

The and  functions allow you to give the name and extension of a file type, and a python module responsible for its import. In the example above, an module will handle  files. See Code snippets for more examples.

Python Arbeitsbereiche
Im Gegensatz hierzu können Sie hier tun, was Sie möchten: Sie könnten Ihren gesamten Arbeitsbereich Code in der InitGui.py platzieren, wenn Sie möchten. Allerdings ist es üblicher und angenehmer, die verschiedenen Funktionen Ihres Arbeitsbereichs in getrennten Dateien zu speichern. Auf diese Weise werden die Dateien kleiner und leichter zu lesen. Danach importieren Sie diese Dateien innerhalb Ihrer InitGui.py Datei. Sie können jene Dateien organisieren ganz wie Sie möchten. Ein gutes Beispiel ist eine Datei für jeden hinzugefügten FreeCAD Befehl.

Preferences
Your can add a Preferences page for your Python workbench. The Preferences pages look for a preference icon with a specific name in the Qt Resource system. If your icon isn't in the resource system or doesn't have the correct name, your icon won't appear on the Preferences page.

Adding your workbench icon:
 * the preferences icon needs to be named "preferences-" + "modulename" + ".svg" (all lowercase)
 * make a qrc file containing all icon names
 * in the main *.py directory, run pyside-rcc -o myResources.py myqrc.qrc
 * in InitGui.py, add import myResource(.py)
 * update your repository(git) with myResources.py and myqrc.qrc

You'll need to redo the steps if you add/change icons.

@kbwbe has created a nice script to compile resources for the A2Plus workbench. See below.

Adding your preference page(s):
 * You need to compile the Qt designer plugin that allows you to add preference settings with Qt Designer
 * Create a blank widget in Qt Designer (no buttons or anything)
 * Design your preference page, any setting that must be saved (preferences) must be one of the Gui::Pref* widgets that were added by the plugin)
 * In any of those, make sure you fill the PrefName (the name of your preference value) and PrefPath (ex: Mod/MyWorkbenchName), which will save your value under BaseApp/Preferences/Mod/MyWorkbebchName
 * Save the ui file in your workbench, make sure it's handled by cmake
 * In your workbench, for ex. inside the InitGui file, inside the Initialize method (but any other place works too), add: FreeCADGui.addPreferencePage("/path/to/myUiFile.ui","MyGroup"), "MyGroup" being one of the preferences groups on the left. FreeCAD will automatically look for a "preferences-mygroup.svg" file in its known locations (which you can extend with FreeCADGui.addIconPath)
 * Make sure the addPreferencePage method is called only once, otherwise your pref page will be added several times

C++ Arbeitsbereiche
Wenn Sie Ihren Arbeitsbereich in C++ programmieren, werden Sie vermutlich die Arbeitsbereichsdefinition selbst ebenfalls in C++ erstellen (,was jedoch nicht nötig ist: Sie auch die nur die Werzeuge in C++ programmieren und die Arbeitsbereichsdefinition in Python belassen). In diesem Fall wird die InitGui.py Datei sehr einfach. Sie könnte etwa nur eine Zeile enthalten:

wobei MyModule Ihr kompletter C++ Arbeitsbereich ist, der die Befehle und Arbeitsbereichsdefinition einschließt.

Die Programmierung von C++ Arbeitsbereichen funktioniert auf sehr ähnlich Art und Weise. Dies eine typische Workbench.cpp Datei, die in den GUI Teil Ihres Moduls eingebunden werden kann.

Preferences
Your can add a Preferences page for C++ workbenches too. The steps are similar to those for Python.

FreeCAD Befehle
FreeCAD Befehle sind die Grundbausteine des FreeCAD Interface. Sie können als Knöpfe in Werkzeugleisten und als Einträge in Menüs erscheinen. Es handelt sich dabei immer um den selben Befehl. Ein Befehl ist einfach eine Python Klasse, die eine Reihe von vordefinierten Attributen und Funktionen enthält, wie der Befehlsname, das Symbol und der Code, der ausgeführt wird, wenn der Befehl aktiviert wird.

C++ Befehlsdefinition
In ähnlicher Art können Sie Befehle in C++ programmieren und haben dazu typischerweise eine Commands.cpp Datei in Ihrem GUI Modul. Dies ist eine typische Commands.cpp Datei.

"Compiling" your resource file
compileA2pResources.py from the A2Plus workbench: