Workbench creation/de

Einführung
Diese Seite zeigt dir, wie du einen neuen Arbeitsbereich zur FreeCAD Oberfläche hinzufügst. Arbeitbereiche sind Behälter für FreeCAD Befehle. Sie können in Python, in C++ oder in einer Mischung aus beidem programmiert werden, was den Vorteil hat, die Geschwindigkeit von C++ mit der Flexibilität von Python zu verbinden. In allen Fällen wird dein Arbeitsbereich jedoch durch einen Satz von zwei Python Dateien gestartet.

Die Arbeitsbereichsstruktur
Du benötigst einen Ordner mit irgendeinem Namen den du magst, platziert im Benutzer Mod Verzeichnis, mit einer Datei und wahlweise, einer  Datei. Die Init Datei wird immer ausgeführt wenn FreeCAD startet, und die Datei wird unmittelbar danach ausgeführt wird, aber nur, wenn FreeCAD im GUI Modus startet. Das ist alles, was FreeCAD braucht, um deinen Arbeitsbereich beim Start zu finden und ihn in seine Oberfläche aufzunehmen.

Das Benutzer Mod Verzeichnis ist ein Unterverzeichnis des Benutzer Anwendungsdaten Verzeichnisses (du kannst letzteres finden durch eintippen von in der Python Konsole):
 * Unter Linux ist es üblicherweise.
 * Unter Windows ist es, üblicherweise.
 * Unter macOS ist es üblicherweise.

Das Mod Verzeichnis sollte so aussehen:

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). Diese Python Datei 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).

Die hier beschriebene Struktur und der Dateiinhalt eines Arbeitsbereich sind der klassische Weg beim Anlegen eines Arbeitsbereichs. Man kann eine leichte Abwandlung in der Dateistruktur benutzen, wenn ein neuer Python-Arbeitsbereich erstellt werden soll; dieser alternative Weg kann am besten als "namespaced workbench" (Arbeitsbereich mit eigenem Namensraum) bezeichnet werden, wodurch die Möglichkeit eröffnet wird, pip zur Installation des neuen Arbeitsbereichs zu verwenden. Das Aussehen und die Struktur von hier gezeigten Arbeitsbereichen sind im globalen Namensraum von FreeCAD enthalten, während sich das alternative Aussehen und die Struktur des Arbeitsbereichs in einem dedizierten Namensraum befindet. Weitere Informationen zu dem Thema findest du unter Verwandtes.

C++ Arbeitsbereichsstruktur
Wenn du deinen Arbeitsbereich in Python programmieren willst, brauchst du keine besondere Vorsicht walten zu lassen und kannst einfach deine anderen Python Dateien zusammen mit deinen Init.py und InitGui.py Dateien unterbringen. Wenn du jedoch mit C++ arbeitest, solltest du größere Sorgfalt walten lassen und damit beginnen, eine grundlegende Regel von FreeCAD zu beachten: Die Trennung deines Arbeitsbereichs zwischen einem Anwendungsteil (der im Konsolenmodus laufen kann, ohne jedes GUI Element) und einem Gui Teil, der nur geladen wird, wenn FreeCAD mit seiner vollständigen GUI Umgebung läuft. Wenn du also einen C++ Arbeitsbereich verwendest, wirst du höchstwahrscheinlich zwei Module verwenden, eine Anwendung und eine Gui. Diese beiden Module müssen natürlich von Python aus aufrufbar sein. Jedes FreeCAD Modul (Anwendung oder Gui) besteht mindestens aus einer Modul Init Datei. Dies ist eine typische AppMyModuleGui.cpp Datei:

Die Init.py Datei
Du kannst jede beliebige Lizenz für deinen Arbeitsbereich wählen, aber sei dir bewusst, dass, wenn du deinen Arbeitsbereich irgendwann in den FreeCAD Quellcode integrierst und mit diesem verteilt sehen möchtest, diese wie im obigen Beispiel unter LGPL2+ stehen muss. Siehe Lizenz.

Die und  Funktionen ermöglichen es dir, den Namen und die Erweiterung eines Dateityps sowie ein für seinen Import verantwortliches Python-Modul anzugeben. Im obigen Beispiel wird ein Modul  Dateien handhaben. Siehe Codeschnipsel für weitere Beispiele.

Python Arbeitsbereiche
Dies ist die InitGui.py Datei:

Ansonsten kannst du alles tun, was du willst: Du kannst deinen gesamten Arbeitsbereichscode in die InitGui.py setzen, wenn du möchtest, aber es ist normalerweise bequemer, die verschiedenen Funktionen deines Arbeitsbereichs in separaten Dateien zu platzieren. Deshalb sind diese Dateien kleiner und einfacher zu lesen. Dann importierst du diese Dateien in deine InitGui.py Datei. Du kannst diese Dateien anordnen wie du willst, ein gutes Beispiel ist eine für jeden FreeCAD-Befehl, den du hinzufügst.

Einstellungen
Du kannst eine Einstellungsseite für deinen Python Arbeitsbereich hinzufügen. Die Einstellungsseiten suchen nach einem Einstellungssymbol mit einem bestimmten Namen im Qt Ressourcensystem. Wenn sich dein Symbol nicht im Ressourcensystem befindet oder nicht den korrekten Namen hat, wird dein Symbol nicht auf der Einstellungsseite erscheinen.

Hinzufügen deines Arbeitsbereichssymbols:
 * das Einstellungssymbol muss "preferences-" genannt werden + "modulename" + ".svg" (alles Kleinbuchstaben)
 * erstelle eine qrc Datei, die alle Symbolnamen enthält
 * Führe im Haupt *.py Verzeichnis pyside-rcc -o myResources.py myqrc.qrc aus
 * In InitGui.py, füge import myResource(.py) hinzu
 * aktualisiere dein Repositorium (git) mit myResources.py und myqrc.qrc

Du musst du die Schritte erneut ausführen wenn du Symbole hinzufügst/änderst,

@kbwbe hat ein nettes Skript zum Kompilieren von Ressourcen für den A2Plus Arbeitsbereich erstellt. Siehe unten.

Hinzufügen deiner Einstellungsseite(n):
 * Du musst das Qt Designer Zusatzmodul kompilieren, das dir das Hinzufügen von Präferenzeinstellungen mit Qt Designer ermöglicht
 * Erstelle ein leeres Widget im Qt Designer (keine Schaltflächen oder ähnliches)
 * Gestalte deine Präferenzseite, jede Einstellung, die gespeichert werden muss (Präferenzen), muss eines der Gui::Pref* Widgets sein, die durch das Zusatzmodul hinzugefügt wurden)
 * Stelle sicher, dass du in einem dieser Felder den PrefName (den Namen deines Präferenzwertes) und PrefPath (z.B.: Mod/MyWorkbenchName), der deine Werte unter BaseApp/Preferences/Mod/MyWorkbenchName speichern wird
 * Speichere die ui Datei in deinem Arbeitsbereich, stelle sicher, dass sie von cmake verarbeitet wird
 * In deinem Arbeitsbereich, z.B. innerhalb der InitGui Datei, innerhalb der Initialisierungsmethode (aber jeder andere Ort funktioniert auch), füge: FreeCADGui.addPreferencePage("/path/to/myUiFile.ui","MyGroup"), "MyGroup" als eine der Präferenzgruppen auf der linken Seite. FreeCAD sucht automatisch nach einer "preferences-mygroup.svg" Datei an den bekannten Speicherorten (die du mit FreeCADGui.addIconPath erweitern kannst)
 * Stelle sicher, dass die Methode addPreferencePage nur einmal aufgerufen wird, andernfalls wird deine Vorzugsseite mehrmals hinzugefügt

Distribution
To distribute your Python workbench, you may either simply host the files in some location and instruct your users to download them and place them in their Mod directory manually, or you may host them in an online git repository (GitHub, GitLab, and Debian Salsa are currently supported locations) and configure them for the Addon Manager to install. Instructions for inclusion on FreeCAD's official Addons list can be found on the FreeCAD Addons GitHub repository. To use the Addon Manager, a package.xml metadata file should be included, which instructs the Addon Manager how to find your workbench's icon, and allows display of a description, version number, etc. It can also be used to specify other external Addons that your Workbench either depends on, is blocked by, or is intended to replace.

Optionally, you can include a file called metadata.txt describing your workbench's external dependencies (on either other Addons, Workbenches, or Python modules). The format of this file is plain text, with three optional lines:

Each line should consist of a comma-separated list of items your Workbench depends on. Workbenches may be either an internal FreeCAD Workbench, e.g. "FEM", or an external Addon, for example "Curves". The required and optional Python libraries should be specified with their canonical Python names, such as you would use with. For example:

C++ Arbeitsbereiche
Wenn du deinen Arbeitsbereich in C++ programmierst, wirst du wahrscheinlich die Arbeitsbereichsdefinition selbst auch in C++ programmieren (obwohl es nicht notwendig ist: du könntest auch nur die Werkzeuge in C++ programmieren und die Arbeitsbereichsdefinition in Python belassen). In diesem Fall, wird die Datei InitGui.py sehr einfach: Sie könnte nur eine Zeile enthalten:

wobei MyModule dein vollständiger C++ Arbeitsbereich ist, der die Befehle und Arbeitsbereichsdefinition einschließt.

Die Programmierung von C++ Arbeitsbereichen funktioniert auf ziemlich ähnliche Weise. Dies ist eine typische Workbench.cpp Datei, die du in den Gui-Teil deines Moduls aufnehmen kannst:

Einstellungen
Du kannst auch eine Voreinstellungsseite für C++ Arbeitsbereiche hinzufügen. Die Schritte sind ähnlich wie die für Python.

FreeCAD Befehle
FreeCAD Befehle sind die Grundbausteine der FreeCAD Oberfläche. 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 Weise kannst du deine Befehle in C++ programmieren, normalerweise hast du eine Commands.cpp Datei in deinem Gui Modul. Dies ist eine typische Commands.cpp Datei:

"Kompilieren" deiner Ressourcendatei
compileA2pResources.py aus dem A2Plus Arbeitsbereich:

Verwandtes

 * Übersetzen eines externen Arbeitsbereichs
 * Namespaced Workbenches - discussion
 * freecad.workbench_starterkit