美文网首页CgTd
Nuke Python 控制节点图

Nuke Python 控制节点图

作者: N景波 | 来源:发表于2016-11-22 11:51 被阅读0次

    使用python你可以干下面的事:

    • 读取、设置节点位置的属性
    • 控制节点图的推拉

    在Nukepedia上有一个视频教程

    读取、设置节点位置

    通过其knob可以存取节点的x y位置

    node = nuke.createNode( 'NoOp' )
    print node['xpos'].value()
    

    使用常用的knob方法设置新位置:

    node['xpos'].setValue(100)
    print 'new position is', node['xpos'].value()
    

    获取位置的其他方法:

    node.setXpos( 111 )
    node.setYpos( 222 )
    
    xPos = node.xpos()
    yPos = node.ypos()
    print 'new x position is ' , xPos
    print 'new y position is', yPos
    

    同时设置x y

    node.setXYpos( 123, 234 )
    

    在缩放1的情况下获取节点像素的宽,高

    nodeWidth = node.screenWidth()
    nodeHeight = node.screenHeight()
    
    print "node dimensions are %s x %s" %( nodeWidth, nodeHeight )
    

    自动安排节点,不重叠:

    for n in nuke.allNodes():
        n.autoplace()
    

    将节点吸附到最近的节点:

    for n in nuke.allNodes():
            nuke.autoplaceSnap( n )
    
    控制节点图的缩放

    为了缩放,缩放节点图,用nuke.zoom()
    当没有参数时,这将返回当前缩放值:

    nuke.zoom()
    

    大于0的参数,节点图就放大到相应倍数。例如,将视口重新设置为1:1:

    nuke.zoom( 1 )
    

    也可以指定缩放的中心,缩放到指定节点:

    node = nuke.selectedNode()
    nuke.zoom( 3, [node.xpos(), node.ypos() ])
    

    上面的例子缩放到节点的左上方。缩放到节点中间

    node = nuke.selectedNode()
    xC = node.xpos() + node.screenWidth()/2
    yC = node.ypos() + node.screenHeight()/2
    nuke.zoom( 3, [xC, yC] )
    
    例子
    用Dot节点做的圈圈
    import math
    for x in xrange(1000):
            n = nuke.node.Dot( xpos = math.sin(x)*100, ypos = math.cos(x)*100 )
            n['hide_input'].setValue(True)
    
    螺旋
    import math
    for x in xrange(1000):
        n = nuke.nodes.Dot( xpos = math.sin(x)*x/10, ypos =math.cos(x).x/10)
        n['hide_input'] .setValue(True)
    
    控制节点间距
    import nuke
    def scaleNodes( scale ):
        nodes = nuke.selectedNodes()
        amount  = len( nodes)
        if amount ==0:
            return
    
        allX = sum([n.xpos() + n.screenWidth()/2 for n in nodes]
        allY = sum( [n.ypos() + n.screenHeight()/2 for n in nodes]
    
        centreX = allX / amount
        centreY = allY / amount
    
        for n in nodes:
            n.setXpos( centreX + (n.xpos() - centreX )*scale )
            n.setYpos( centreY +(n.ypos() - centreY) * scale )
    
    scaleNodes( 3)
    
    scaleNodes( .7 )
    

    相关文章

      网友评论

        本文标题:Nuke Python 控制节点图

        本文链接:https://www.haomeiwen.com/subject/epmppttx.html