まとめ
この記事では、 Katana内のノードのコンテキスト メニュー (右クリック メニュー) にカスタム メニュー項目を追加する方法について説明します。
詳細情報
Katana提供する
NodeActionDelegateモジュールを使用して、ノードのコンテキスト メニューにカスタム メニュー項目を追加できます。以下は、特定のノードのコンテキストメニューにメニューアクションを登録する方法を示した例です。この例では、CameraCreateノードのコンテキストメニューに2つのカスタムメニューコマンドを追加します。
Katana 8.0
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(QtGui.QAction):
def __init__(self, parent, node):
QtGui.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(QtGui.QAction):
def __init__(self, parent, node):
QtGui.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()) Katana 7.5以前
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())さらに詳しく
すべての種類のノードのコンテキスト メニューに同じメニュー コマンドを追加する場合は、上記の例の最後の行を次の行に置き換えます。
myNodeActionDelegate = MyNodeActionDelegate()
for nodeTypeName in NodegraphAPI.GetNodeTypes():
RegisterActionDelegate(nodeTypeName, myNodeActionDelegate)
次の例に示すように、特定のノード タイプに対して同じノード アクション デリゲートを登録することもできます。
myNodeActionDelegate = MyNodeActionDelegate()
for nodeTypeName in ['AttributeSet', 'CameraCreate', 'OpScript']:
RegisterActionDelegate(nodeTypeName, myNodeActionDelegate)
添付ファイル
私たちはそれを聞いて申し訳ございません
理由をお聞かせください