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.

Struktur eines Arbeitsbereichs
Das Vorgehen ist einfach: Sie brauchen einen Ordner mit einem Namen Ihrer Wahl, der im Mod Verzeichnis angelegt wird, und eine Init.py Datei sowie optional eine InitGui.py Datei. Die Init Datei wird immer ausgeführt, wenn FreeCAD startet gefolgt von der InitGui Datei, die nur ausgeführt wird, wenn sich FreeCAD im GUI Modus (nicht im Konsolenmodus) befindet. Dies ist alles, was nötig ist, damit FreeCAD Ihren Arbeitsbereich beim Start findet und ihn zum Interface hinzufügt.

Innerhalb dieser Dateien können Sie beliebige Dinge machen. Üblicherweise werden sie wie folgt verwendet:


 * In der Init.py Datei fügen Sie in der Regel verschiedene Dinge hinzu, die benutzt werden, auch wenn FreeCAD im Konsolenmodus arbeitet, z.B. Dateiimport- und Exportfilter.


 * In der InitGUI.py Datei definieren Sie üblicherweise einen Arbeitsbereich, der einen Namen, ein Symbol und eine Reihe von FreeCAD Befehlen (siehe unten) enthält. Der Arbeitsbereich definiert außerdem Funktionen, die ausgeführt werden, wenn FreeCAD geladen wird (hier sollte so wenig wie möglich getan werden, um das Starten nicht zu verlangsamen), der Arbeitsbereich aktiviert (hier wird die meiste Arbeit geleistet) sowie deaktiviert wird (hier können Dinge, wenn nötig, entfernt werden).

Struktur eines C++ Arbeitsbereichs
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

 * 1) FreeCAD init script of XXX module


 * 1) *  (c) John Doe john@doe.com 2015                                        *
 * 2) *  This file is part of the FreeCAD CAx development system.              *
 * 3) *  This program is free software; you can redistribute it and/or modify  *
 * 4) *  it under the terms of the GNU Lesser General Public License (LGPL)    *
 * 5) *  as published by the Free Software Foundation; either version 2 of     *
 * 6) *  the License, or (at your option) any later version.                   *
 * 7) *  for detail see the LICENCE text file.                                 *
 * 8) *  FreeCAD is distributed in the hope that it will be useful,            *
 * 9) *  but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 * 10) *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 * 11) *  GNU Lesser General Public License for more details.                   *
 * 12) *  You should have received a copy of the GNU Library General Public     *
 * 13) *  License along with FreeCAD; if not, write to the Free Software        *
 * 14) *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
 * 15) *  USA                                                                   *
 * 1) *  You should have received a copy of the GNU Library General Public     *
 * 2) *  License along with FreeCAD; if not, write to the Free Software        *
 * 3) *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
 * 4) *  USA                                                                   *
 * 1) *  USA                                                                   *

FreeCAD.addImportType("My own format (*.own)","importOwn") FreeCAD.addExportType("My own format (*.own)","importOwn") print "I am executing some stuff here when FreeCAD starts!" 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.

Python Arbeitsbereiche
Other than that, you can do anything you want: You could put your whole workbench code inside the InitGui.py if you want, but it is usually more convenient to place the different functions of your workbench in separate files. So those files are smaller and easier to read. Then you import those files into your InitGui.py file. You can organize those files the way you want, a good example is one for each FreeCAD command you add.

C++ workbenches
If you are going to code your workbench in C++, you will probably want to code the workbench definition itself in C++ too (although it is not necessary: You could also code only the tools in C++, and leave the workbench definition in python). In that case, the InitGui.py file becomes very simple: It might contain just one line: where MyModule is your complete C++ workbench, including the commands and workbench definition.

Coding C++ workbenches works in a pretty similar way. This is a typical Workbench.cpp file to include in the Gui part of your module:

FreeCAD commands
FreeCAD commands are the basic building block of the FreeCAD interface. They can appear as a button on toolbars, and as a menu entry in menus. But it is the same command. A command is a simple python class, that must contain a couple of predefined attributes and functions, that define the name of the command, its icon, and what to do when the command is activated.

C++ command definition
Similarly, you can code your commands in C++, typically have a Commands.cpp file in your Gui module. This is a typical Commands.cpp file: