命令

From FreeCAD Documentation
Jump to: navigation, search
This page is a translated version of the page Command and the translation is 89% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎română • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎

一条FreeCAD命令是指:当您按下一个工具栏按钮或输入一个键盘快捷键时所执行的命令。它可能是一个非常简单的动作,如改变3D视图的缩放级别,或旋转视角;也可能是一个打开对话框并等待用户执行特定任务的复杂系统。

每个FreeCAD命令都有自己独一无二的名称,可参见Category:Command_Reference页面。加载命令的方式很多,如通过工具栏按钮、菜单项,也可以在python脚本或python控制台中执行:

FreeCADGui.runCommand("my_Command_Name")

每个工作台中都定义了多种FreeCAD命令。工作台通常在FreeCAD初始化时添加各自的命令定义,因此FreeCAD一旦开启其命令就存在并可用了,无论对应的工作台是否已被激活。然而在某些情况下,工作台的作者可能会决定并不在FreeCAD开启过程中加载过多内容,而是仅在工作台初始化期间才加载命令定义。此时,只有在工作台被激活后才能使用对应的命令(也就是说,您至少要用工作台选择器来切换至对应工作台一次)。

大多命令都需要与用户进行交互,FreeCAD命令仅存在于GUI模式下,而不存在于控制台模式下。但是,为了方便,大多FreeCAD命令也都有与之对应的python函数(如Part.makeBox 或 Draft.makeLine),或者执行非常便于从python脚本中复制的代码。

可以通过C++或Python来定义命令。

以下为一个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文件一定放于何处,只要令每个python工作台都能如预期那样工作即可……)

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