サポートチケットを作成する
フォローする

Q100108:ノードのコンテキストメニューにカスタムメニュー項目を追加しました

概要

この記事では、Katana内のノードのコンテキストメニュー(右クリックメニュー)にカスタムメニュー項目を追加する方法について説明します。

詳しくは

Katanaが提供するNodeActionDelegateモジュールを使用して、ノードの右クリック/コンテキストメニューにカスタムメニュー項目を追加できます。
ノードを選択および選択解除するために、与えられたノードのコンテキストメニューにメニューアクションを登録する方法を示す例です。
from Katana import UI4, NodegraphAPI
from UI4.FormMaster.NodeActionDelegate import (BaseNodeActionDelegate, RegisterActionDelegate)
from UI4.Manifest import QtCore, QtGui

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:
                QtCore.QObject.connect(self, QtCore.SIGNAL('triggered(bool)'),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:
                QtCore.QObject.connect(self, QtCore.SIGNAL('triggered(bool)'), 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)

 


キーワード: Katana 、カスタムメニュー、右クリックメニュー、コンテキストメニュー、NodeActionDelegate

この記事は役に立ちましたか?
/

We're sorry to hear that!

Please tell us why.
4人中4人がこの記事が役に立ったと言っています

コメント