Module Creation

From FreeCAD Documentation
Jump to: navigation, search
This page is a translated version of the page Module Creation and the translation is 89% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎polski • ‎română • ‎русский • ‎svenska • ‎Türkçe • ‎中文(中国大陆)‎

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.

Utilisation des outils 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 !

Mise en place d'un nouveau module manuellement

Vous avez besoin de deux choses, pour créer un nouveau module :

  • Un nouveau dossier dans le dossier Mod de FreeCAD (soit dans Installationd_Path/FreeCAD/Mod ou dans UserPath/.FreeCAD/Mod). Vous pouvez le nommer comme vous le souhaitez.
  • Dans ce dossier, il y a un fichier InitGui.py. Ce fichier sera automatiquement exécuté au démarrage de FreeCAD (par ex, mettre un print("Bonjour tout le monde") à l'intérieur)

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.

Création de nouveaux outils

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) :

  • Icon L'attribut Icon est une image XPM (La plupart des logiciels tel que GIMP permet de convertir une image en format xpm, qui, est un simple fichier texte. Vous pouvez ensuite coller le contenu ici).
  • MenuText est le nom établi tel qu'il apparaîtra dans la liste établis (boîte à outils).
  • Tooltip (Info-bulle) s'affiche lorsque vous le survolez avec la souris.
  • Initialize() est exécuté au chargement de FreeCAD, et doit créer tous les menus, et, barres d'outils que le plan de travail (workbench) va utiliser. Si vous faites votre module en C++, vous pouvez aussi définir vos menus et barres d'outils à l'intérieur du module C++, et pas dans le fichier InitGui.py. L'important est, qu'il soit créé maintenant, et pas lorsque le module est activé.
  • Activated() est exécuté, lorsque l'utilisateur bascule sur votre plan de travail (module).
  • Deactivated() est exécuté, lorsque l'utilisateur bascule de vôtre atelier (module), à un autre atelier (module) ou, quitte FreeCAD

Creation de commandes FreeCAD en Python

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())
  • La méthode GetResources() doit retourner un dictionnaire avec les attributs visuels de votre outil. Accel, définit une touche de raccourci, mais, n'est pas obligatoire.
  • IsActive() définit si la commande est active, ou grisée dans les menus, et, barres d'outils.
  • La méthode Activated() est exécutée lorsque la commande est appelée par un bouton de la barre d'outils, ou dans le menu, ou même par le script.

Création d'une commande FreeCAD en C++

Bientôt documentée.

Links

Arrow-left.svg Page précédente: FreeCAD Build Tool
Page suivante: Debugging Arrow-right.svg