zoukankan      html  css  js  c++  java
  • Create Your Tab and LayerTabMenu In Katana

    感谢 http://tool.lu/pyc/ 这个牛逼的网站能反编译pyc...他妈的Katana太他妈无耻了,竟然不让自定义加Node Tab Content....只能反编译他的东西了。。。

    研究了下Katana的开发文档,做几个比较帅的事情。。。。

    自定义Content

    def registerMesser():
        """
        Registers a new Messer node type using the NodeTypeBuilder utility class.
        """
    
        from Katana import Nodes3DAPI,NodegraphAPI
        from Katana import FnAttribute
    
        def buildMesserOpChain(node, interface):
            """
            Defines the callback function used to define the Ops chain for the
            node type being registered.
    
            @type node: C{Nodes3DAPI.NodeTypeBuilder.Messer}
            @type interface: C{Nodes3DAPI.NodeTypeBuilder.BuildChainInterface}
            @param node: The node for which to define the Ops chain
            @param interface: The interface providing the functions needed to set
                up the Ops chain for the given node.
            """
            # Get the current frame time
            frameTime = interface.getGraphState().getTime()
    
            # Set the minimum number of input ports
            interface.setMinRequiredInputs(1)
    
            argsGb = FnAttribute.GroupBuilder()
    
            # Parse the CEL parameter
            celParam = node.getParameter('CEL')
            if celParam:
                argsGb.set('CEL', celParam.getValue(frameTime))
    
            # Parse the displacement parameter
            dispParam = node.getParameter('displacement')
            if dispParam:
                argsGb.set('displacement', dispParam.getValue(frameTime))
    
            # Add the Messer Op to the Ops chain
            interface.appendOp('Messer', argsGb.build())
    
    
        # Create a NodeTypeBuilder to register the new type
        nodeTypeBuilder = Nodes3DAPI.NodeTypeBuilder('Messer')
        #NodegraphAPI.RegisterPythonNodeType('Messer', Messer)
        NodegraphAPI.AddNodeFlavor('Messer', '3d')
        NodegraphAPI.AddNodeFlavor('Messer', 'HoudiniFX')
        # Add an input port
        nodeTypeBuilder.setInputPortNames(('in',))
    
        # Build the node's parameters
        gb = FnAttribute.GroupBuilder()
        gb.set('CEL', FnAttribute.StringAttribute(''))
        gb.set('displacement', FnAttribute.FloatAttribute(0.0))
    
        # Set the parameters template
        nodeTypeBuilder.setParametersTemplateAttr(gb.build())
        # Set parameter hints
        nodeTypeBuilder.setHintsForParameter('CEL', {'widget':'cel'})
        # Set the callback responsible to build the Ops chain
        nodeTypeBuilder.setBuildOpChainFnc(buildMesserOpChain)
    
        # Build the new node type
        nodeTypeBuilder.build()
    
    # Register the node
    registerMesser()
    View Code

    自定义LayerTabMenu,记得放到环境变量里的UIPlugins文件夹

    def registerMesser():
        """
        Registers a new Messer node type using the NodeTypeBuilder utility class.
        """
    
        from Katana import Nodes3DAPI,NodegraphAPI
        from Katana import FnAttribute
    
        def buildMesserOpChain(node, interface):
            """
            Defines the callback function used to define the Ops chain for the
            node type being registered.
    
            @type node: C{Nodes3DAPI.NodeTypeBuilder.Messer}
            @type interface: C{Nodes3DAPI.NodeTypeBuilder.BuildChainInterface}
            @param node: The node for which to define the Ops chain
            @param interface: The interface providing the functions needed to set
                up the Ops chain for the given node.
            """
            # Get the current frame time
            frameTime = interface.getGraphState().getTime()
    
            # Set the minimum number of input ports
            interface.setMinRequiredInputs(1)
    
            argsGb = FnAttribute.GroupBuilder()
    
            # Parse the CEL parameter
            celParam = node.getParameter('CEL')
            if celParam:
                argsGb.set('CEL', celParam.getValue(frameTime))
    
            # Parse the displacement parameter
            dispParam = node.getParameter('displacement')
            if dispParam:
                argsGb.set('displacement', dispParam.getValue(frameTime))
    
            # Add the Messer Op to the Ops chain
            interface.appendOp('Messer', argsGb.build())
    
    
        # Create a NodeTypeBuilder to register the new type
        nodeTypeBuilder = Nodes3DAPI.NodeTypeBuilder('Messer')
        #NodegraphAPI.RegisterPythonNodeType('Messer', Messer)
        NodegraphAPI.AddNodeFlavor('Messer', '3d')
        NodegraphAPI.AddNodeFlavor('Messer', 'HoudiniFX')
        # Add an input port
        nodeTypeBuilder.setInputPortNames(('in',))
    
        # Build the node's parameters
        gb = FnAttribute.GroupBuilder()
        gb.set('CEL', FnAttribute.StringAttribute(''))
        gb.set('displacement', FnAttribute.FloatAttribute(0.0))
    
        # Set the parameters template
        nodeTypeBuilder.setParametersTemplateAttr(gb.build())
        # Set parameter hints
        nodeTypeBuilder.setHintsForParameter('CEL', {'widget':'cel'})
        # Set the callback responsible to build the Ops chain
        nodeTypeBuilder.setBuildOpChainFnc(buildMesserOpChain)
    
        # Build the new node type
        nodeTypeBuilder.build()
    
    # Register the node
    registerMesser()
    View Code
  • 相关阅读:
    BZOJ 1266: [AHOI2006]上学路线route
    重磅!阿里云Promtheus 正式免费公测
    解锁云原生 AI 技能|在 Kubernetes 上构建机器学习系统
    更新与发展 | Alibaba Cloud Linux 2 特性与开发细节揭秘
    《2019上半年DDoS攻击态势报告》发布:应用层攻击形势依然严峻,海量移动设备成新一代肉鸡
    《2019年上半年Web应用安全报告》发布:90%以上攻击流量来源于扫描器,IP身份不再可信
    并发模式与 RPS 模式之争,性能压测领域的星球大战
    互联网商城的上云改造之旅
    技术人具备“结构化思维”意味着什么?
    弘康人寿基于 RocketMQ 构建微服务边界总线的实践
  • 原文地址:https://www.cnblogs.com/gearslogy/p/5309451.html
Copyright © 2011-2022 走看看