Workbench creation/fr

Cette page vous montrera comment ajouter un nouvel atelier à l'interface FreeCAD. Les ateliers sont des conteneurs pour les commandes FreeCAD. Ils peuvent être codés en python, en C++ ou en un mélange des deux, ce qui a l’avantage d’allier la vitesse de C++ à la souplesse de python. Dans tous les cas, cependant, votre atelier sera lancé par un ensemble de deux fichiers python.

La structure Atelier
En gros, c'est simple : vous avez besoin d'un dossier, avec le nom de votre choix, placé dans le répertoire Mod, avec un fichier Init.py et, éventuellement, un fichier InitGui.py. Le fichier Init est toujours exécuté au démarrage de FreeCAD, et le fichier InitGui.py est exécuté immédiatement après, mais uniquement lorsque FreeCAD démarre en mode interface graphique, pas en mode console. C'est tout ce dont FreeCAD a besoin pour trouver votre atelier au démarrage et l'ajouter à son interface.

Dans ces fichiers, vous pouvez faire ce que vous voulez. Ils sont généralement utilisés comme ceci :


 * Dans le fichier Init.py, vous ajoutez simplement quelques éléments utilisés même lorsque FreeCAD fonctionne en mode console, par exemple les importateurs et les exportateurs de fichiers


 * Dans le fichier InitGui.py, vous définissez généralement un atelier, qui contient un nom, une icône et une série de commandes FreeCAD (voir ci-dessous). Cet atelier définit également les fonctions exécutées lors du chargement de FreeCAD (essayez d'en faire le moins possible à ce niveau, afin de ne pas ralentir le démarrage). Un autre est exécuté lorsque l'atelier est activé (c'est là que vous ferez le plus du travail) et un troisième lorsque l'atelier est désactivé (vous pouvez donc supprimer des éléments si nécessaire).

La structure d'atelier C++
Si vous voulez coder votre atelier en python, vous n'avez pas besoin de faire très attention, vous pouvez simplement placer vos autres fichiers python avec vos fichiers Init.py et InitGui.py. Toutefois, lorsque vous travaillez avec C++, vous devez faire preuve d'une plus grande prudence et commencer par respecter une règle fondamentale de FreeCAD : la séparation de votre atelier entre une partie d'application (pouvant s'exécuter en mode console, sans aucun élément d'interface graphique) et une partie d'interface graphique qui ne sera chargé que lorsque FreeCAD s’exécutera avec son environnement graphique complet. Ainsi, lorsque vous construirez un atelier C++, vous élaborerez probablement deux modules, une application et une interface graphique. Ces deux modules doivent bien entendu être appelables depuis python. Tout module FreeCAD (App ou Gui) consiste à minima en un fichier init de module. Voici un fichier typique AppMyModuleGui.cpp :

Le fichier Init.py

 * 1) FreeCAD init script of XXX module


 * 1) *  Copyright (c) 2015 John Doe john@doe.com                              *
 * 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!" Vous pouvez choisir la licence de votre choix pour votre atelier, mais sachez que si vous souhaitez que votre atelier soit intégré et distribué avec le code source de FreeCAD à un moment donné, il doit être LGPL2+, comme dans l'exemple ci-dessus. Les fonctions FreeCAD.addImportType et addEXportType vous permettent de fournir le nom et l'extension d'un type de fichier, ainsi qu'un module python responsable de son importation. Dans l'exemple ci-dessus, un module "importOwn.py" gérera les fichiers .own. Voir Extraits de codes pour plus d'exemples.

Ateliers Python
En dehors de cela, vous pouvez faire ce que vous voulez : Vous pouvez insérer tout votre code d'atelier dans le fichier InitGui.py si vous le souhaitez, mais il est généralement plus pratique de placer les différentes fonctions de votre atelier dans des fichiers séparés. Ainsi ces fichiers sont plus petits et plus faciles à lire. Ensuite, vous importerez ces fichiers dans votre fichier InitGui.py. Vous pouvez organiser ces fichiers comme bon vous semble, un bon exemple est en avoir un pour chaque commande FreeCAD que vous ajoutez.

Préférences
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

Ateliers C++
Si vous voulez coder votre atelier en C++, vous souhaiterez probablement coder aussi sa définition elle-même en C++ (bien que cela ne soit pas nécessaire : vous pouvez également coder uniquement les outils en C++, et laisser la définition de de l'atelier en python). Dans ce cas, le fichier InitGui.py devient très simple : il peut contenir une seule ligne :

où MyModule est votre atelier C++ complet, incluant les commandes et la définition de l'atelier.

Le codage des ateliers C++ fonctionne de manière assez similaire. Il s'agit d'un fichier Workbench.cpp typique à inclure dans la partie interface graphique de votre module :

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

Commandes FreeCAD
Les commandes FreeCAD constituent le bloc de construction de base de l'interface FreeCAD. Ils peuvent apparaître sous la forme d'un bouton dans les barres d'outils et d'une entrée de menu dans les menus. Mais c'est la même commande. Une commande est une simple classe python, qui doit contenir un couple attributs et fonctions prédéfinis, définissant le nom de la commande, son icône et l'action à effectuer lorsque la commande est activée.

Définition des commandes C++
De la même manière, vous pouvez coder vos commandes en C++. Vous avez généralement un fichier Commands.cpp dans votre module d'interface graphique. Ceci est un fichier Commands.cpp typique :

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