Command/zh-cn: Difference between revisions
(Updating to match new version of source page) |
(Updating to match new version of source page) |
||
(One intermediate revision by the same user not shown) | |||
Line 101: | Line 101: | ||
== Examples == |
== Examples == |
||
See [[Line_drawing_function| |
See [[Line_drawing_function|Line drawing function]]. |
||
<!-- Anything below this line must come after a closing translate tag --> |
<!-- Anything below this line must come after a closing translate tag --> |
||
{{Powerdocnavi{{#translation:}}}} |
{{Powerdocnavi{{#translation:}}}} |
||
[[Category:Developer Documentation{{#translation:}}]] |
[[Category:Developer Documentation{{#translation:}}]] |
||
[[Category:Python Code{{#translation:}}]] |
|||
[[Category:Glossary{{#translation:}}]] |
[[Category:Glossary{{#translation:}}]] |
Revision as of 20:42, 16 September 2020
Introduction
一条FreeCAD命令是指:当您按下一个工具栏按钮或输入一个键盘快捷键时所执行的命令。它可能是一个非常简单的动作,如改变3D视图的缩放级别,或旋转视角;也可能是一个打开对话框并等待用户执行特定任务的复杂系统。
每个FreeCAD命令都有自己独一无二的名称,可参见Category:Command_Reference页面。加载命令的方式很多,如通过工具栏按钮、菜单项,也可以在python脚本或python控制台中执行:
FreeCADGui.runCommand("my_Command_Name")
Background
每个工作台中都定义了多种FreeCAD命令。工作台通常在FreeCAD初始化时添加各自的命令定义,因此FreeCAD一旦开启其命令就存在并可用了,无论对应的工作台是否已被激活。然而在某些情况下,工作台的作者可能会决定并不在FreeCAD开启过程中加载过多内容,而是仅在工作台初始化期间才加载命令定义。此时,只有在工作台被激活后才能使用对应的命令(也就是说,您至少要用工作台选择器来切换至对应工作台一次)。
大多命令都需要与用户进行交互,FreeCAD命令仅存在于GUI模式下,而不存在于控制台模式下。但是,为了方便,大多FreeCAD命令也都有与之对应的python函数(如Part.makeBox 或 Draft.makeLine),或者执行非常便于从python脚本中复制的代码。
可以通过C++或Python来定义命令。
Commands defined in 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());
Commands defined in Python
以及用python实现相似的命令(并没有具体规定python文件一定放于何处,只要令每个python工作台都能如预期那样工作即可……)
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())
Examples
Power user documentation
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub