Command/de: Difference between revisions

From FreeCAD Documentation
(Created page with "Befehle können entweder in C++ oder Python erstellt werden.")
No edit summary
 
(27 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
<span id="Introduction"></span>
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.
==Einleitung==


{{TOCright}}
Jeder FreeCAD-Befehl hat einen eindeutigen Namen, der in der [[:Category:Command_Reference/de|Liste aller Befehle]]-Seite auftaucht. Befehle können über einen Symbolleisten-Button, einen Menü-Eintrag, ein Python-Skript oder die Python-Konsole aufgerufen werden:


Ein [[Command/de|Befehl]] ist das, was ausgeführt wird, wenn Du eine Werkzeugleisten Schaltfläche oder einen Tastenkürzel eingibst. Es kann eine sehr einfache Handlung sein, wie den Zoomfaktor in der [[3D view/de|3D Ansicht]] ändern oder das Drehen des Blickwinkels, oder ein komplexes System, das Dialogfenster öffnet und darauf wartet, dass der Benutzer bestimmte Aufgaben ausführt.
FreeCADGui.runCommand("my_Command_Name")


Jeder FreeCAD-Befehl hat einen eindeutigen Namen, der in der [[:Category:Command Reference/de|Liste aller Befehle]]-Seite erscheint. Befehle können über eine Werkzeugleisten-Schaltfläche, einen Menüpunkt, oder aus einem [[Python/de|Python]]-Skript oder der [[Python console/de|Python Konsole]], ausgeführt werden:
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).


{{Code|code=
Da die meisten von ihnen Benutzeraktionen erfordern, sind FreeCAD-Befehle nur im GUI-Modus und nicht im Konsolen-Modus verfügbar. Der Einfachheit halber haben die meisten FreeCAD-Befehle eine entsprechende Python-Funktion (wie z.B. Part.makeBox oder Draft.makeLine) oder führen Code aus, der sehr einfach in einem Python-Skript nachgebildet werden kann.
FreeCADGui.runCommand("my_Command_Name")
}}


<span id="Background"></span>
Befehle können entweder in C++ oder Python erstellt werden.
== Hintergrund ==


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/belasten 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 mit dem Arbeitsbereichswähler gewechselt).
Example of a C++ command definition (usually defined in /Mod/ModuleName/Gui/Command.cpp):

{{Code|code=
Da die meisten von ihnen Benutzeraktionen erfordern, sind FreeCAD Befehle nur im GUI-Modus und nicht im Konsolen Modus verfügbar. Der Einfachheit halber haben die meisten FreeCAD Befehle eine entsprechende Python Funktion (wie {{incode|Part.makeBox}} oder {{incode|Draft.makeLine}}) oder führen Code aus, der sehr einfach in einem Python Skript und/oder [[macros/de|Makro]]nachgebildet werden kann.

Befehle können entweder in C++ oder Python festgelegt werden.

<span id="Commands_defined_in_C++"></span>
== In C++ definierte Befehle ==

Beispiel einer C++ Befehlsdefinition, in der Regel definiert nach der Struktur {{FileName|Mod/ModuleName/Gui/Command.cpp}}.

{{Code|lang=cpp|code=
DEF_STD_CMD_A(StdCmdMyCommand);
DEF_STD_CMD_A(StdCmdMyCommand);


Line 43: Line 57:
}}
}}


<span id="Commands_defined_in_Python"></span>
and a similar command in python (no rule for where it must be done, each python workbench does as it sees fit...)
== In Python definierte Befehle ==

Beispiel für eine Python Befehlsdefinition, sie kann in einem Verzeichnis wie {{FileName|Mod/ModuleName/tools/commands.py}} abgelegt werden.
{{Code|code=
{{Code|code=
from PySide.QtCore import QT_TRANSLATE_NOOP


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


def __init__(self):
def __init__(self):
# you can add things here like defining some variables that must exist at all times
"""Initialize variables for the command that must exist at all times."""
pass


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


def Activated(self):
def Activated(self):
# place here the code to be executed when the command is ran
"""Run the following code when the command is activated (button press)."""
print("Activated")


def isActive(self):
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).
"""Return True when the command should be active or False when it should be disabled (greyed)."""
return True


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


<span id="Examples"></span>
[[Category:User Documentation]]
== Beispiele ==
[[Category:Developer Documentation]]

[[Category:Command Reference]]
Siehe [[Line_drawing_function/de|Linienzeichungsfunktion]].

<!-- Anything below this line must come after a closing translate tag -->
{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
[[Category:Glossary{{#translation:}}]]

Latest revision as of 21:14, 25 November 2023

Einleitung

Ein Befehl ist das, was ausgeführt wird, wenn Du eine Werkzeugleisten Schaltfläche oder einen Tastenkürzel eingibst. Es kann eine sehr einfache Handlung sein, wie den Zoomfaktor in der 3D Ansicht ändern oder das Drehen des Blickwinkels, 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 erscheint. Befehle können über eine Werkzeugleisten-Schaltfläche, einen Menüpunkt, oder aus einem Python-Skript oder der Python Konsole, ausgeführt werden:

FreeCADGui.runCommand("my_Command_Name")

Hintergrund

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/belasten 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 mit dem Arbeitsbereichswähler gewechselt).

Da die meisten von ihnen Benutzeraktionen erfordern, sind FreeCAD Befehle nur im GUI-Modus und nicht im Konsolen Modus verfügbar. Der Einfachheit halber haben die meisten FreeCAD Befehle eine entsprechende Python Funktion (wie Part.makeBox oder Draft.makeLine) oder führen Code aus, der sehr einfach in einem Python Skript und/oder Makronachgebildet werden kann.

Befehle können entweder in C++ oder Python festgelegt werden.

In C++ definierte Befehle

Beispiel einer C++ Befehlsdefinition, in der Regel definiert nach der Struktur 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());

In Python definierte Befehle

Beispiel für eine Python Befehlsdefinition, sie kann in einem Verzeichnis wie Mod/ModuleName/tools/commands.py abgelegt werden.

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

Beispiele

Siehe Linienzeichungsfunktion.