Command/ru: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
 
(28 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
==Вступление==
==Introduction==


{{TOCright}}
{{TOCright}}


Под [[Command/ru|Командой]] подразумевается выполнение некоторых действий (кода), в следствии нажатия какой-либо кнопку на панели инструментов или при наборе определённых комбинаций клавиш на клавиатуре. Это может быть как очень простое действие, как например изменение уровня масштабирования [[3D view/ru|трёхмерного вида]] или поворот точки обзора, так и комплексное решение которое запустит диалоговые окна и будет ожидать, когда пользователь выполнит определенные действия.
<div class="mw-translate-fuzzy">
Команда FreeCAD - это то, что выполняется, когда вы нажимаете кнопку на панели инструментов или набираете комбинацию клавиш. Это может быть очень простое действие, например изменение уровня масштабирования 3D-вида или поворот точки зрения или сложная система, которая откроет диалоговые окна и дождитесь, когда пользователь выполнит определенные задачи.
</div>


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Каждая команда FreeCAD имеет уникальное имя, которое появляется на странице [[:Category:Command_Reference]]. Команды могут запускаться с помощью кнопки панели инструментов, элемента меню или скрипта python или консоли python, запустив:
Каждая команда FreeCAD имеет уникальное имя, которое внесено в список [[:Category:Command_Reference/ru|:Category:Command_Reference/ru]]. Команды могут запускаться с помощью кнопки на панели инструментов или из списка меню, а так же из [[python/ru|python]] скрипта или [[Python_console/ru|консоли Python]], по средством выполнения следующей комманды:
</div>
</div>


{{Code|code=
FreeCADGui.runCommand("my_Command_Name")
FreeCADGui.runCommand("my_Command_Name")
}}


== Background ==
== Основы ==


Команды FreeCAD определяются отдельно для каждого верстака. Верстаки обычно добавляют свои определения команд во время запуска FreeCAD, поэтому команда существует и доступна сразу после запуска FreeCAD, независимо от того, был ли активирован соответствующий верстак или нет. Однако в некоторых случаях автор рабочей среды, возможно, решил не перегружать/нагружать процесс запуска FreeCAD и поэтому загрузил определения команд только при запуске рабочей среды. В этих случаях команда будет доступна только после активации рабочего стола (если вы переключились на него по крайней мере один раз с помощью переключателя верстака).
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/burden the FreeCAD startup process and therefore loaded 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).


Поскольку большинство из них требуют взаимодействия с пользователем, команды FreeCAD доступны только в режиме графического интерфейса, а не в режиме консоли. Однако для удобства большинство команд FreeCAD либо будут иметь соответствующую функцию python (например, {{incode|Part.makeBox}} или {{incode|Draft.makeLine}}), либо будут выполнять код, который очень легко воспроизвести в скрипте python и/или [[macros/ru|макросе]].
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 {{incode|Part.makeBox}} or {{incode|Draft.makeLine}}), or will execute code that is very easy to replicate in a python script and/or [[macros|macro]].


Команды могут быть назначены как на языке C++, так и посредством Python.
Commands can be defined either in C++ or in Python.


== Назначение команд в C++ ==
== Example ==


Example of a C++ command definition (usually defined in {{FileName|/Mod/ModuleName/Gui/Command.cpp}}):
Пример назначения команды на языке C++, назначение производится по следующей структре {{FileName|Mod/ModuleName/Gui/Command.cpp}}.

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


Line 55: Line 56:
}}
}}


== Назначение команд в Python ==
and a similar command in python (no rule for where it must be done, each python workbench does as it sees fit...)

Пример назначения команды на языке Python. Данный код может быть размещен в папке по адрессу вроде этого: {{FileName|Mod/ModuleName/tools/commands.py}}.
{{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())
}}
}}


== Примеры ==
{{Userdocnavi{{#translation:}}}} <!-- Anything below this line must come after a closing translate tag -->

Смотрите [[Line_drawing_function/ru|функцию рисования линии]].

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

Latest revision as of 09:12, 18 April 2022

Вступление

Под Командой подразумевается выполнение некоторых действий (кода), в следствии нажатия какой-либо кнопку на панели инструментов или при наборе определённых комбинаций клавиш на клавиатуре. Это может быть как очень простое действие, как например изменение уровня масштабирования трёхмерного вида или поворот точки обзора, так и комплексное решение которое запустит диалоговые окна и будет ожидать, когда пользователь выполнит определенные действия.

Каждая команда FreeCAD имеет уникальное имя, которое внесено в список :Category:Command_Reference/ru. Команды могут запускаться с помощью кнопки на панели инструментов или из списка меню, а так же из python скрипта или консоли Python, по средством выполнения следующей комманды:

FreeCADGui.runCommand("my_Command_Name")

Основы

Команды FreeCAD определяются отдельно для каждого верстака. Верстаки обычно добавляют свои определения команд во время запуска FreeCAD, поэтому команда существует и доступна сразу после запуска FreeCAD, независимо от того, был ли активирован соответствующий верстак или нет. Однако в некоторых случаях автор рабочей среды, возможно, решил не перегружать/нагружать процесс запуска FreeCAD и поэтому загрузил определения команд только при запуске рабочей среды. В этих случаях команда будет доступна только после активации рабочего стола (если вы переключились на него по крайней мере один раз с помощью переключателя верстака).

Поскольку большинство из них требуют взаимодействия с пользователем, команды FreeCAD доступны только в режиме графического интерфейса, а не в режиме консоли. Однако для удобства большинство команд FreeCAD либо будут иметь соответствующую функцию python (например, Part.makeBox или Draft.makeLine), либо будут выполнять код, который очень легко воспроизвести в скрипте python и/или макросе.

Команды могут быть назначены как на языке C++, так и посредством Python.

Назначение команд в C++

Пример назначения команды на языке C++, назначение производится по следующей структре 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());

Назначение команд в Python

Пример назначения команды на языке Python. Данный код может быть размещен в папке по адрессу вроде этого: Mod/ModuleName/tools/commands.py.

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

Примеры

Смотрите функцию рисования линии.