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
  • 相关阅读:
    解决spring配置文件没有提示的问题
    SpringMVC 中HttpMessageConverter简介和Http请求415 Unsupported Media Type的问题
    在编辑Spring的配置文件时的自动提示
    Java注释@interface的用法【转】
    spring-autowire机制
    一些汇编指令
    Windows底层开发前期学习准备工作
    log4j.properties中的这句话“log4j.logger.org.hibernate.SQL=DEBUG ”该怎么写在log4j.xml里面呢?
    log4j 配置文件 (XML/.properties)
    [VC]C++ operator 两种用法
  • 原文地址:https://www.cnblogs.com/gearslogy/p/5309451.html
Copyright © 2011-2022 走看看