요약
이 문서에서는 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)
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요