如何访问 Maya 主菜单和工具栏?
How to access the Maya main menu and toolbar?
我使用 Autodesk Maya 2016 + Python。
我遇到了问题。我需要替换标准菜单项和工具栏的功能。例如,您必须添加保存录音的功能。而且由于不同的人使用不同的功能,您必须立即更改所有内容。有人按 Ctrl+S
,其他人进入菜单 File->Save
,还有人按工具栏上的图标。在所有领域都需要更换功能。我知道问题归结为访问菜单、工具栏和键盘快捷键。接下来,找到 estate 上的 associates 项以了解现在调用的函数。然后用它们的原因替换它,并在此菜单中前面调用的函数的末尾。
- 如何获取 Maya 主菜单(如
File
和其他)?
- 如何获取Maya主工具栏?
- 如何获取 Maya 热键?
Maya 基于QT。所以只需要获取对象,然后有标准的QT手段就可以搞定一切。
怎么做?
执行此操作的所有三种方法都调用名为 SaveScene
的 runTimeCommand
。覆盖该命令,您就劫持了您描述的所有三种方式。这有点棘手,因为该命令标有 -default
标志,这使得无法即时更改它们。您可以在它们最初定义的地方挂钩它们。它们在文件中定义:
- Mayadir/scripts/startup/defaultRunTimeCommands.mel
将此文件复制到您的用户配置文件 maya 脚本目录或工作室脚本目录。由于解析顺序,这些将优先于工厂脚本。 不要 覆盖出厂文件。然后在行中更改 -command
,
runTimeCommand -default true
-annotation (uiRes("m_defaultRunTimeCommands.kSaveSceneAnnot"))
-category ("File")
-command ("checkForUnknownNodes(); FileMenu_SaveItem")
SaveScene;
到别的地方。最好只是在这里添加一个钩子。
显然,您也可以更改 button/menuitem 和热键。所以你要做的是运行跟随mel(在mel中更容易做到这一点,因为大部分命令都是这样构建的,如果必须的话,移植到python或c++):
runTimeCommand
-annotation "Print the word \"Hello\""
-command ("print \"foo\"")
MySave;
nameCommand
-annotation "Print the word \"Hello\""
-command ("print \"foo\"")
MySaveNamed;
buildFileMenu();
menuItem -e -c "MySave" "MayaWindow|mainFileMenu|saveItem";
iconTextButton -e -c "MySave2" openSceneButton;
hotkey -keyShortcut "s" -ctl -name ("MySaveNamed");
警告:热键将永久保存在首选项中,直到您将其改回或重置首选项。
请注意:用户至少可以通过其他两种方式进行保存,即使您愿意,也无法完全控制这些方式。
我使用 Autodesk Maya 2016 + Python。
我遇到了问题。我需要替换标准菜单项和工具栏的功能。例如,您必须添加保存录音的功能。而且由于不同的人使用不同的功能,您必须立即更改所有内容。有人按 Ctrl+S
,其他人进入菜单 File->Save
,还有人按工具栏上的图标。在所有领域都需要更换功能。我知道问题归结为访问菜单、工具栏和键盘快捷键。接下来,找到 estate 上的 associates 项以了解现在调用的函数。然后用它们的原因替换它,并在此菜单中前面调用的函数的末尾。
- 如何获取 Maya 主菜单(如
File
和其他)? - 如何获取Maya主工具栏?
- 如何获取 Maya 热键?
Maya 基于QT。所以只需要获取对象,然后有标准的QT手段就可以搞定一切。
怎么做?
执行此操作的所有三种方法都调用名为 SaveScene
的 runTimeCommand
。覆盖该命令,您就劫持了您描述的所有三种方式。这有点棘手,因为该命令标有 -default
标志,这使得无法即时更改它们。您可以在它们最初定义的地方挂钩它们。它们在文件中定义:
- Mayadir/scripts/startup/defaultRunTimeCommands.mel
将此文件复制到您的用户配置文件 maya 脚本目录或工作室脚本目录。由于解析顺序,这些将优先于工厂脚本。 不要 覆盖出厂文件。然后在行中更改 -command
,
runTimeCommand -default true
-annotation (uiRes("m_defaultRunTimeCommands.kSaveSceneAnnot"))
-category ("File")
-command ("checkForUnknownNodes(); FileMenu_SaveItem")
SaveScene;
到别的地方。最好只是在这里添加一个钩子。
显然,您也可以更改 button/menuitem 和热键。所以你要做的是运行跟随mel(在mel中更容易做到这一点,因为大部分命令都是这样构建的,如果必须的话,移植到python或c++):
runTimeCommand
-annotation "Print the word \"Hello\""
-command ("print \"foo\"")
MySave;
nameCommand
-annotation "Print the word \"Hello\""
-command ("print \"foo\"")
MySaveNamed;
buildFileMenu();
menuItem -e -c "MySave" "MayaWindow|mainFileMenu|saveItem";
iconTextButton -e -c "MySave2" openSceneButton;
hotkey -keyShortcut "s" -ctl -name ("MySaveNamed");
警告:热键将永久保存在首选项中,直到您将其改回或重置首选项。
请注意:用户至少可以通过其他两种方式进行保存,即使您愿意,也无法完全控制这些方式。