Les commandes

From FreeCAD Documentation
Revision as of 21:26, 8 May 2020 by FuzzyBot (talk | contribs) (Updating to match new version of source page)

Introduction

Une commande FreeCAD est ce qui est en cours d’exécution lorsque vous appuyez sur un bouton de la barre d’outils ou tapez un raccourci clavier. Cela peut être une action très simple, comme changer le niveau de zoom de la vue 3D ou faire pivoter le point de vue, ou un système complexe qui ouvrira des boîtes de dialogue et attendra que l'utilisateur exécute des tâches spécifiques.

Chaque commande FreeCAD a un nom unique, qui apparaît dans la page Category: Command_Reference. Les commandes peuvent être lancées à l'aide d'un bouton de la barre d'outils, d'un élément de menu, d'un script python ou de la console python, en exécutant:

FreeCADGui.runCommand("my_Command_Name")

Background

Les commandes FreeCAD sont définies par atelier. Les ateliers ajoutent normalement leurs définitions de commande au moment de l’initialisation de FreeCAD. La commande existe donc et est disponible dès le démarrage de FreeCAD, que le Atelier correspondant ait été activé ou non. Dans certains cas, cependant, l'auteur d'Atelier aurait peut-être décidé de ne pas surcharger le processus de démarrage de FreeCAD et de charger les définitions de commande uniquement à l'initiation du workbench. Dans ce cas, la commande ne sera disponible qu'après l'activation du plan de travail (vous y avez basculé au moins une fois à l'aide du sélecteur de plan de travail).

omme la plupart d’entre elles nécessitent une interaction de l’utilisateur, les commandes FreeCAD ne sont disponibles qu’en mode graphique, et non en mode console. Cependant, pour des raisons pratiques, la plupart des commandes FreeCAD auront une fonction python correspondante (telle que Part.makeBox ou Draft.makeLine) ou exécuteront du code très facile à répliquer dans un script python.

Les commandes peuvent être définies en C ++ ou en Python.

Commands defined in C++

Exemple de définition de commande C ++ (généralement définie dans /Mod/ModuleName/Gui/Command.cpp):

DEF_STD_CMD_A(StdCmdMyCommand);

StdCmdMyCommand::StdCmdMyCommand()
  : Command("Std_My_Command")
{
    sGroup        = QT_TR_NOOP("File");
    sMenuText     = QT_TR_NOOP("My Command");
    sToolTipText  = QT_TR_NOOP("Runs my command in the active document");
    sWhatsThis    = "Std_MyCommand";
    sStatusTip    = QT_TR_NOOP("Runs my command in the active document");
    sPixmap       = "MyCommand.svg";
    sAccel        = "Ctrl+A";
}

void StdCmdExport::activated(int iMsg)
{
    // place here the code to be executed when the command is ran
}

bool StdCmdMyCommand::isActive(void)
{
    // here you have a chance to return true or false depending if your command must be shown as active or inactive (greyed).
}

// the command must be "registered" in FreeCAD's command system
CommandManager &rcCmdMgr = Application::Instance->commandManager();
rcCmdMgr.addCommand(new StdCmdMyCommand());

Commands defined in Python

et une commande similaire en python (pas de règle pour ce qui doit être fait, chaque atelier python fait comme bon lui semble ...)

from PySide.QtCore import QT_TRANSLATE_NOOP


class MyCommand:
    """Explanation of the command."""

    def __init__(self):
        """Initialize variables for the command that must exist at all times."""
        pass

    def GetResources(self):
        """Return a dictionary with data that will be used by the button or menu item."""
        return {'Pixmap': 'MyCommand.svg',
                'Accel': "Ctrl+A",
                'MenuText': QT_TRANSLATE_NOOP("My_Command", "My Command"),
                'ToolTip': QT_TRANSLATE_NOOP("My_Command", "Runs my command in the active document")}

    def Activated(self):
        """Run the following code when the command is activated (button press)."""
        print("Activated")

    def isActive(self):
        """Return True when the command should be active or False when it should be disabled (greyed)."""
        return True

# The command must be "registered" with a unique name by calling its class.
FreeCADGui.addCommand('My_Command', MyCommand())