Aller au contenu
> 💻 🧠 Code 1001 > 📖 Guides > Création de modules complémentaires pour FreeCAD > Leçon 2. Votre premier add-on : « Hello World »

Leçon 2. Votre premier add-on : « Hello World »

  • par

📘 Cours : Création d’add-ons pour FreeCAD

Objectif de la leçon : créer un add-on simple qui ajoute un nouvel environnement de travail avec un bouton, et qui affiche un message lorsqu’on clique dessus.


📁 Étape 1. Préparation du dossier de l’add-on

Assurez-vous d’avoir le dossier :

.../FreeCAD/Mod/HelloWorldAddon/

Si ce n’est pas le cas, créez-le.

💡 Le nom du dossier est important : il doit correspondre au nom du module dans le code.
Nous utiliserons HelloWorldAddon.

À l’intérieur de ce dossier, créez deux fichiers :

  • InitGui.py
  • hello_workbench.py

❗ N’utilisez pas d’espaces ni de caractères cyrilliques dans les noms de fichiers et de dossiers !


📄 Étape 2. Fichier InitGui.py — point d’entrée

Ce fichier est automatiquement lancé par FreeCAD au démarrage s’il se trouve dans le dossier de l’add-on.

Ouvrez-le dans un éditeur et insérez le code suivant :

# InitGui.py
import FreeCADGui
from HelloWorldAddon.hello_workbench import HelloWorldWorkbench

FreeCADGui.addWorkbench(HelloWorldWorkbench())

🔍 Que fait ce code ?

  1. Importe notre environnement de travail depuis le fichier hello_workbench.py
  2. Enregistre cet environnement dans l’interface FreeCAD via FreeCADGui.addWorkbench()

⚠️ Remarque :
from HelloWorldAddon.hello_workbench — ici HelloWorldAddon est le nom du dossier, et hello_workbench est le nom du fichier sans l’extension .py.


📄 Étape 3. Fichier hello_workbench.py — logique de l’add-on

Maintenant, créons l’environnement de travail lui-même.

Insérez le code suivant dans hello_workbench.py :

# hello_workbench.py
import FreeCAD, FreeCADGui
from PySide import QtGui

# === COMMANDE : ce qui se passe lorsque le bouton est cliqué ===
class HelloWorldCommand:
    def GetResources(self):
        """Renvoie les données pour l'affichage de la commande"""
        return {
            "MenuText": "Say Hello",      # Texte dans le menu
            "ToolTip": "Show a greeting", # Info-bulle
            "Pixmap": ""                  # Chemin vers l'icône (vide pour l'instant)
        }

    def Activated(self):
        """Appelé lorsque le bouton est cliqué"""
        QtGui.QMessageBox.information(
            None,
            "FreeCAD Addon",
            "Bonjour le monde !\nVous venez de lancer votre premier add-on !"
        )

    def IsActive(self):
        """Quand la commande est-elle disponible ? (toujours — True)"""
        return True


# === ENVIRONNEMENT DE TRAVAIL : regroupe les commandes ===
class HelloWorldWorkbench(FreeCADGui.Workbench):
    # Nom qui sera affiché dans la liste
    MenuText = "Hello World"
    ToolTip = "Mon premier environnement de travail"

    def Initialize(self):
        """Appelé lors de l'activation de l'environnement de travail"""
        # Liste des noms de commandes
        self.list = ["HelloWorldCommand"]

        # Ajout de la barre d'outils
        self.appendToolbar("Hello Tools", self.list)

        # Ajout d'un élément au menu
        self.appendMenu("Hello World", self.list)

    def GetClassName(self):
        """Méthode requise pour les environnements de travail Python"""
        return "Gui::PythonWorkbench"


# === ENREGISTREMENT DE LA COMMANDE ===
FreeCADGui.addCommand("HelloWorldCommand", HelloWorldCommand())

🔍 Analyse du code par parties :

1. Commande (HelloWorldCommand)

  • GetResources() — décrit l’apparence de la commande dans l’interface
  • Activated() — ce qui se passe au clic
  • IsActive() — quand le bouton est actif (par exemple, seulement s’il y a un document)

2. Environnement de travail (HelloWorldWorkbench)

  • Hérite de FreeCADGui.Workbench
  • La méthode Initialize() ajoute les commandes à la barre d’outils et au menu
  • GetClassName() dit à FreeCAD : « c’est un environnement de travail Python »

3. Enregistrement

  • FreeCADGui.addCommand() lie le nom `

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *