Q100108: Katana முனைகளில் தனிப்பயன் சூழல் மெனு உருப்படிகளை எவ்வாறு சேர்ப்பது

சுருக்கம்

இந்தக் கட்டுரை Katana உள்ள முனைகளின் சூழல் மெனுவில் (வலது கிளிக் மெனு) தனிப்பயன் மெனு உருப்படிகளை எவ்வாறு சேர்ப்பது என்பதை விவரிக்கிறது.

மேலும் தகவல்

Katana வழங்கும் NodeActionDelegate தொகுதியைப் பயன்படுத்தி, ஒரு முனையின் சூழல் மெனுவில் தனிப்பயன் மெனு உருப்படிகளைச் சேர்க்கலாம்.
ஒரு குறிப்பிட்ட முனையின் சூழல் மெனுவிற்கான மெனு செயல்களை எவ்வாறு பதிவு செய்கிறீர்கள் என்பதைக் காட்டும் ஒரு எடுத்துக்காட்டு கீழே உள்ளது. இந்த எடுத்துக்காட்டு CameraCreate முனையின் சூழல் மெனுவில் இரண்டு தனிப்பயன் மெனு கட்டளைகளைச் சேர்க்கும்.
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)

இணைப்புகள்

We're sorry to hear that

Please tell us why