Command/de: Difference between revisions

From FreeCAD Documentation
(Created page with "Jeder FreeCAD-Befehl hat einen eindeutigen Namen, der in der Liste aller Befehle-Seite auftaucht. Befehle können über einen Symbolleisten-...")
(Created page with "FreeCAD-Befehle sind pro Arbeitsbereich definiert. Arbeitsbereiche werden ihre Befehlsdefinitionen normalerweise zum FreeCAD-Programmstartzeitpunkt hinzufügen, so dass der Be...")
Line 6: Line 6:
FreeCADGui.runCommand("my_Command_Name")
FreeCADGui.runCommand("my_Command_Name")


FreeCAD-Befehle sind pro Arbeitsbereich definiert. Arbeitsbereiche werden ihre Befehlsdefinitionen normalerweise zum FreeCAD-Programmstartzeitpunkt hinzufügen, so dass der Befehl existiert und verfügbar ist, sobald FreeCAD startet, unabhängig davon, ob der jeweilige Arbeitsbereich aktiviert ist oder nicht. Allerdings könnte der Arbeitsbereichsautor in einigen Fällen entschieden haben, den FreeCAD-Startprozess nicht zu überlasten und deshalb die Befehlsdefinitionen erst bei der Initialisierung des Arbeitsbereichs zu laden. In diesen Fällen ist der Befehl erst nach der Aktivierung des Arbeitsbereichs verfügbar (Du hast wenigstens einmal dorthin gewechselt).
FreeCAD commands are defined per workbench. Workbenches will normally add their command definitions at FreeCAD init time, so the command exists and is available as soon as FreeCAD is started, no matter if the corresponding workbench has been activated yet or not. In some cases, however, the workbench author might have decided, to not overload too much the FreeCAD startup process, to load the command definitions only at workbench init. In those cases, the command will only be available after the workbench has been activated (you have switched to it at least once with the workbench selector).


As most of them require user interaction, FreeCAD commands are only available in GUI-mode, and not in console mode. However, for convenience, most FreeCAD commands will either have a corresponding python function (like Part.makeBox or Draft.makeLine), or will execute code that is very easy to replicate in a python script.
As most of them require user interaction, FreeCAD commands are only available in GUI-mode, and not in console mode. However, for convenience, most FreeCAD commands will either have a corresponding python function (like Part.makeBox or Draft.makeLine), or will execute code that is very easy to replicate in a python script.

Revision as of 19:21, 17 August 2018

Ein FreeCAD-Befehl ist das, was ausgeführt wird, wenn Du einen Symbolleisten-Button oder ein Tastenkürzel drückst. Es kann eine sehr einfache Aktion sein, wie den Zoomfaktor in der 3D-Ansicht ändern oder den Standpunkt zu drehen, oder ein komplexes System, das Dialogfenster öffnet und darauf wartet, dass der Benutzer bestimmte Aufgaben ausführt.

Jeder FreeCAD-Befehl hat einen eindeutigen Namen, der in der Liste aller Befehle-Seite auftaucht. Befehle können über einen Symbolleisten-Button, einen Menü-Eintrag, ein Python-Skript oder die Python-Konsole aufgerufen werden:

FreeCADGui.runCommand("my_Command_Name")

FreeCAD-Befehle sind pro Arbeitsbereich definiert. Arbeitsbereiche werden ihre Befehlsdefinitionen normalerweise zum FreeCAD-Programmstartzeitpunkt hinzufügen, so dass der Befehl existiert und verfügbar ist, sobald FreeCAD startet, unabhängig davon, ob der jeweilige Arbeitsbereich aktiviert ist oder nicht. Allerdings könnte der Arbeitsbereichsautor in einigen Fällen entschieden haben, den FreeCAD-Startprozess nicht zu überlasten und deshalb die Befehlsdefinitionen erst bei der Initialisierung des Arbeitsbereichs zu laden. In diesen Fällen ist der Befehl erst nach der Aktivierung des Arbeitsbereichs verfügbar (Du hast wenigstens einmal dorthin gewechselt).

As most of them require user interaction, FreeCAD commands are only available in GUI-mode, and not in console mode. However, for convenience, most FreeCAD commands will either have a corresponding python function (like Part.makeBox or Draft.makeLine), or will execute code that is very easy to replicate in a python script.

Commands can be defined either in C++ or in Python.

Example of a C++ command definition (usually defined in /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());

and a similar command in python (no rule for where it must be done, each python workbench does as it sees fit...)

class MyCommand:

    def __init__(self):
        # you can add things here like defining some variables that must exist at all times

    def GetResources(self):
        return {'Pixmap'  : 'MyCommand.svg',
                    'Accel' : "Ctrl+A",
                    'MenuText': QtCore.QT_TRANSLATE_NOOP("My_Command", "My Command"),
                   'ToolTip': QtCore.QT_TRANSLATE_NOOP("My_Command", "Runs my command in the active document")}

    def Activated(self):
        # place here the code to be executed when the command is ran

    def isActive(self):
        # 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
FreeCADGui.addCommand('My_Command',MyCommand())