まとめ
この記事では、 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 ノードのコンテキスト メニューに 2 つのカスタム メニュー コマンドが追加されます。
すべてのタイプのノードのコンテキスト メニューに同じメニュー コマンドを追加したい場合は、次のようなものを使用できます。
myNodeActionDelegate = MyNodeActionDelegate()
for nodeTypeName in NodegraphAPI.GetNodeTypes():
RegisterActionDelegate(nodeTypeName, myNodeActionDelegate)
次の例に示すように、特定のノード タイプに対して同じノード アクション デリゲートを登録することもできます。
myNodeActionDelegate = MyNodeActionDelegate()
for nodeTypeName in ['AttributeSet', 'CameraCreate', 'OpScript']:
RegisterActionDelegate(nodeTypeName, myNodeActionDelegate)
私たちはそれを聞いて申し訳ございません
理由をお聞かせください