首页 > 其他 > 详细

Create Your Tab and LayerTabMenu In Katana

时间:2016-03-23 06:16:29      阅读:287      评论:0      收藏:0      [点我收藏+]

感谢 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

 

Create Your Tab and LayerTabMenu In Katana

原文:http://www.cnblogs.com/gearslogy/p/5309451.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!