概括
本文介绍如何将自定义菜单项添加到Katana中节点的上下文菜单(右键单击菜单)。
更多信息
您可以使用Katana提供的
NodeActionDelegate
模块将自定义菜单项添加到节点的上下文菜单中。以下示例展示了如何为给定节点的上下文菜单注册菜单操作,以选择和取消选择节点:
from Katana import UI4, NodegraphAPI from UI4.FormMaster.NodeActionDelegate import (BaseNodeActionDelegate, RegisterActionDelegate) from UI4.Manifest import QtCore, QtGui, QtWidgets class MyNodeActionDelegate(BaseNodeActionDelegate.BaseNodeActionDelegate): class _SelectNodeAction(QtWidgets.QAction): def __init__(self, parent, node): QtWidgets.QAction.__init__(self, 'Select "%s"' % node.getName(), parent) self.__node = node if node: self.triggered.connect(self.__triggered) self.setEnabled(self.__node is not None and not self.__node.isLocked(True)) def __triggered(self, checked): NodegraphAPI.SetNodeSelected(self.__node, True) class _DeselectNodeAction(QtWidgets.QAction): def __init__(self, parent, node): QtWidgets.QAction.__init__(self, 'Deselect "%s"' % node.getName(), parent) self.__node = node if node: self.triggered.connect(self.__triggered) self.setEnabled(self.__node is not None and not self.__node.isLocked(True)) def __triggered(self, checked): NodegraphAPI.SetNodeSelected(self.__node, False) def addToContextMenu(self, menu, node): menu.addAction(self._SelectNodeAction(menu, node)) menu.addAction(self._DeselectNodeAction(menu, node)) def addToWrenchMenu(self, menu, node, hints=None): pass RegisterActionDelegate("CameraCreate", MyNodeActionDelegate())
这会将两个自定义菜单命令添加到“CameraCreate”行标题下的 CameraCreate 节点的上下文菜单中。
如果您想将相同的菜单命令添加到所有类型节点的上下文菜单中,您可以使用如下内容:
myNodeActionDelegate = MyNodeActionDelegate()
for nodeTypeName in NodegraphAPI.GetNodeTypes():
RegisterActionDelegate(nodeTypeName, myNodeActionDelegate)
您还可以针对特定节点类型注册相同的节点操作委托,如以下示例所示:
myNodeActionDelegate = MyNodeActionDelegate()
for nodeTypeName in ['AttributeSet', 'CameraCreate', 'OpScript']:
RegisterActionDelegate(nodeTypeName, myNodeActionDelegate)
我们很遗憾听到
请告诉我们