Ajouter de nouveaux modules et boîtes à outils dans FreeCAD est très facile. Nous appelons module, toute extension de FreeCAD, tandis qu'un plan de travail (workbench) est une configuration spéciale GUI, habituellement, les groupes de barres d'outils et de menus. Vous créez un nouveau module qui contient son propre plan de travail (sa barre d'outils et ses commandes).
Les modules peuvent être programmés en C++ ou en Python, ou un mélange des deux, mais les fichiers de module d'initialisation, doivent être en Python. La mise en place d'un nouveau module, avec les fichiers d'initialisation est facile, et, peut être effectuée, soit manuellement, soit avec l'outil build de FreeCAD.
La création d'un nouveau module dans FreeCAD est assez simple. Dans l'arborescence de développement de FreeCAD, il existe l'outil FreeCAD Build Tool (fcbt) qui, fait les choses les plus importantes pour vous.
Il s'agit d'un script Python situé à :
trunk/src/Tools/fcbt.py
Lorsque votre interpréteur Python est correctement installé, vous pouvez exécuter le script en ligne de commande avec :
python fcbt.py
Le menu suivant s'afficher :
FreeCAD Build Tool Usage: fcbt <command name> [command parameter] possible commands are: - DistSrc (DS) Build a source Distr. of the current source tree - DistBin (DB) Build a binary Distr. of the current source tree - DistSetup (DI) Build a Setup Distr. of the current source tree - DistSetup (DUI) Build a User Setup Distr. of the current source tree - DistAll (DA) Run all three above modules - NextBuildNumber (NBN) Increase the Build Number of this Version - CreateModule (CM) Insert a new FreeCAD Module in the module directory - CreatePyModule (CP) Insert a new FreeCAD Python Module in the module directory For help on the modules type: fcbt <command name> ?
À l'invite de comande, entrez CM pour commencer la création d'un module :
Insert command: ''CM''
Vous êtes maintenant invité à spécifier un nom pour votre nouveau module.
Appelons le TestMod par exemple :
Please enter a name for your application: ''TestMod''
Après avoir validé, fcbt commence à copier, tous les fichiers nécessaires pour votre module dans un nouveau dossier, à :
trunk/src/Mod/TestMod/
Puis, tous les fichiers sont modifiés avec votre nouveau nom de module. La seule chose que vous devez faire maintenant, est d'ajouter les deux nouveaux projets, "appTestMod" et "appTestModGui", à votre espace de travail (sous Windows) ou à vos objectifs Makefile (unix). C'est tout !
Vous avez besoin de deux choses, pour créer un nouveau module :
En outre, vous pouvez également ajouter un fichier Init.py. La différence est, que le fichier InitGui.py n'est chargé que lorsque FreeCAD fonctionne en mode graphique (InitGUI), et, le fichier Init.py est toujours chargé. Mais si nous faisons un plan de travail (workbench), nous allons le mettre en InitGui.py, parce les outils, sont utilisés uniquement en mode GUI, bien sûr.
Une des premières choses que vous voudrez faire, est de définir un plan de travail dans le fichier InitGui.py.
Voici un petit code que vous pouvez utiliser :
class MyWorkbench ( Workbench ):
"My workbench object"
Icon = """
/* XPM */
static const char *test_icon[]={
"16 16 2 1",
"a c #000000",
". c None",
"................",
"................",
"..############..",
"..############..",
"..############..",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"................",
"................"};
"""
MenuText = "My Workbench"
ToolTip = "This is my extraordinary workbench"
def GetClassName(self):
return "Gui::PythonWorkbench"
def Initialize(self):
import myModule1, myModule2
self.appendToolbar("My Tools", ["MyCommand1","MyCommand2"])
self.appendMenu("My Tools", ["MyCommand1","MyCommand2"])
Log ("Loading MyModule... done\n")
def Activated(self):
# do something here if needed...
Msg ("MyWorkbench.Activated()\n")
def Deactivated(self):
# do something here if needed...
Msg ("MyWorkbench.Deactivated()\n")
FreeCADGui.addWorkbench(MyWorkbench)
L'atelier (boîte à outils) doit disposer de toutes ces définissions (attributs) :
Habituellement, vous définissez tous vos outils (appelés commandes dans FreeCAD), dans un autre module, puis importez ce module, avant de créer les barres d'outils et de menus.
Il s'agit ici d'un code minimum, que vous pouvez utiliser pour définir une commande :
import FreeCAD,FreeCADGui
class MyTool:
"My tool object"
def GetResources(self):
return {"MenuText": "My Command",
"Accel": "Ctrl+M",
"ToolTip": "My extraordinary command",
"Pixmap" : """
/* XPM */
static const char *test_icon[]={
"16 16 2 1",
"a c #000000",
". c None",
"................",
"................",
"..############..",
"..############..",
"..############..",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"......####......",
"................",
"................"};
"""}
def IsActive(self):
if FreeCAD.ActiveDocument == None:
return False
else:
return True
def Activated(self):
# do something here...
FreeCADGui.addCommand('MyCommand1',MyTool())
Bientôt documentée.