Exemplo n.º 1
0
def link_roto(tracker_node, roto_node=False):
    '''
    Utility function: Creates a layer in roto_node linked to tracker_node
    if roto_node is False, creates a roto node next to tracker node to link to
    '''
    grid_x = int(nuke.toNode('preferences').knob('GridWidth').value())
    grid_y = int(nuke.toNode('preferences').knob('GridHeight').value())

    tracker_name = tracker_node.name()
    tracker_node.setSelected(False)

    # If Roto node not selected, create one.
    if not roto_node:
        roto_node = nuke.createNode('Roto')
        roto_node.setXYpos(tracker_node.xpos()-grid_x*0, tracker_node.ypos()+grid_y*2)
        roto_node.setSelected(True)

    # Create linked layer in Roto Node
    curves_knob = roto_node["curves"]
    stab_layer = rp.Layer(curves_knob)
    stab_layer.name = "stab_"+tracker_name

    trans_curve_x = cl.AnimCurve()
    trans_curve_y = cl.AnimCurve()

    trans_curve_x.expressionString = "parent.{0}.translate.x".format(tracker_name)
    trans_curve_y.expressionString = "parent.{0}.translate.y".format(tracker_name)
    trans_curve_x.useExpression = True
    trans_curve_y.useExpression = True

    rot_curve = cl.AnimCurve()
    rot_curve.expressionString = "parent.{0}.rotate".format(tracker_name)
    rot_curve.useExpression = True

    scale_curve = cl.AnimCurve()
    scale_curve.expressionString = "parent.{0}.scale".format(tracker_name)
    scale_curve.useExpression = True

    center_curve_x = cl.AnimCurve()
    center_curve_y = cl.AnimCurve()
    center_curve_x.expressionString = "parent.{0}.center.x".format(tracker_name)
    center_curve_y.expressionString = "parent.{0}.center.y".format(tracker_name)
    center_curve_x.useExpression = True
    center_curve_y.useExpression = True

    # Define variable for accessing the getTransform()
    transform_attr = stab_layer.getTransform()
    # Set the Animation Curve for the Translation attribute to the value of the previously defined curve, for both x and y
    transform_attr.setTranslationAnimCurve(0, trans_curve_x)
    transform_attr.setTranslationAnimCurve(1, trans_curve_y)
    # Index value of setRotationAnimCurve is 2 even though there is only 1 parameter...
    # http://www.mail-archive.com/[email protected]/msg02295.html
    transform_attr.setRotationAnimCurve(2, rot_curve)
    transform_attr.setScaleAnimCurve(0, scale_curve)
    transform_attr.setScaleAnimCurve(1, scale_curve)
    transform_attr.setPivotPointAnimCurve(0, center_curve_x)
    transform_attr.setPivotPointAnimCurve(1, center_curve_y)
    curves_knob.rootLayer.append(stab_layer)
def linkRoto(node_roto, node_trans, roto_curve):
	'''
	source: https://gist.github.com/jedypod/759871a41a35482704af

	Utility function: Creates a layer in node_roto linked to node_trans
	if node_roto is False, creates a roto node next to tracker node to link to
	'''

	name_trans = node_trans.name()
	node_trans.setSelected(False)

	# Translate object
	trans_curve_x = cl.AnimCurve()
	trans_curve_y = cl.AnimCurve()

	trans_curve_x.expressionString = "parent.{0}.translate.x".format(name_trans)
	trans_curve_y.expressionString = "parent.{0}.translate.y".format(name_trans)
	trans_curve_x.useExpression = True
	trans_curve_y.useExpression = True

	# Rotate object
	rot_curve = cl.AnimCurve()
	rot_curve.expressionString = "parent.{0}.rotate".format(name_trans)
	rot_curve.useExpression = True

	# Scale object
	scale_curve = cl.AnimCurve()
	scale_curve.expressionString = "parent.{0}.scale".format(name_trans)
	scale_curve.useExpression = True

	# Center object
	center_curve_x = cl.AnimCurve()
	center_curve_y = cl.AnimCurve()
	center_curve_x.expressionString = "parent.{0}.center.x".format(name_trans)
	center_curve_y.expressionString = "parent.{0}.center.y".format(name_trans)
	center_curve_x.useExpression = True
	center_curve_y.useExpression = True

	# Define variable for accessing the getTransform()
	transform_attr = roto_curve.getTransform()
	transform_attr.setTranslationAnimCurve(0, trans_curve_x)
	transform_attr.setTranslationAnimCurve(1, trans_curve_y)
	transform_attr.setRotationAnimCurve(2, rot_curve)
	transform_attr.setScaleAnimCurve(0, scale_curve)
	transform_attr.setScaleAnimCurve(1, scale_curve)
	transform_attr.setPivotPointAnimCurve(0, center_curve_x)
	transform_attr.setPivotPointAnimCurve(1, center_curve_y)

	#node_roto['label'].setValue("%s\n%s -> %s" % (node_roto['label'].value(), roto_curve.name, name_trans))
	curve_name = roto_curve.name.split(LINKERLABEL)[0]
	curve_name += '%s%s' % (LINKERLABEL, node_trans.name())
Exemplo n.º 3
0
def TrackToRoto():

    ###### checking if we are connected to the Tracker node
    try:
        sDude = nuke.selectedNode() 
        sDudeLabel = sDude['label'].evaluate()
        sDudeLabel = sDudeLabel.replace("none ","MM").replace("_","")
        sDudeName = sDude['name'].value()
        if sDude.Class() == "Tracker3" or sDude.Class() == "Tracker4":###### rising th panel and collecting the info

            panel=nuke.Panel("roto name")
            panel.addSingleLineInput("name",sDudeLabel)
            panel.addSingleLineInput("range:",'%s-%s' % (nuke.root().firstFrame(),nuke.root().lastFrame()))
            panel.addBooleanCheckBox('bake', True)
            panel.addBooleanCheckBox('create RotoPaint', False)
            panel.show()
    
            kind = panel.value("create RotoPaint")
            baked = panel.value('bake')
            name = panel.value("name")
            first = int(panel.value('range:').rpartition("-")[0])
            last = int(panel.value('range:').rpartition("-")[2])+1

            if "ref:" not in name:
                name = name+"\n"+sDudeLabel

            ###### checking which node to create roto or rotopaint
            if kind == 1:
                roto = nuke.nodes.RotoPaint()
            else:    
                roto = nuke.nodes.Roto()
            roto['label'].setValue(name)
            #######setting position of the new node in the graph
            x = int(sDude['xpos'].value())
            y = int(sDude['ypos'].value())
            roto.setXYpos(x,y+100) 
            roto['tile_color'].setValue(11632127)
            roto['cliptype'].setValue("no clip")
            m = nuke.Text_Knob("","","<font color='DaimGray'><b> Created with TrackToRoto. ",)
            roto.addKnob(m)
 
            if baked is True:##############baking the track#################
    
                #########checking the frame range
                #first = nuke.Root().knob('first_frame').getValue()
                #first = int(first)
                #last = nuke.Root().knob('last_frame').getValue()
                #last = int(last)+1
                frame = first
    
                #######acsessing the roto guts
                Knobs = roto['curves']
                root=Knobs.rootLayer
                transform = root.getTransform()
    
                while frame<last:
                    r = sDude['rotate'].getValueAt(frame,0)
                    rr = transform.getRotationAnimCurve(2)
                    rr.addKey(frame,r)
                    tx = sDude['translate'].getValueAt(frame,0)
                    translx = transform.getTranslationAnimCurve(0)
                    translx.addKey(frame,tx)
                    ty = sDude['translate'].getValueAt(frame,1)
                    transly = transform.getTranslationAnimCurve(1)
                    transly.addKey(frame,ty)
                    sx = sDude['scale'].getValueAt(frame,0)
                    ssx = transform.getScaleAnimCurve(0)
                    ssx.addKey(frame,sx)
                    sy = sDude['scale'].getValueAt(frame,1)
                    ssy = transform.getScaleAnimCurve(1)
                    ssy.addKey(frame,sy)
                    cx = sDude['center'].getValueAt(frame,0)
                    ccx = transform.getPivotPointAnimCurve(0)
                    ccx.addKey(frame,cx)
                    cy = sDude['center'].getValueAt(frame,1)
                    ccy = transform.getPivotPointAnimCurve(1)
                    ccy.addKey(frame,cy)
                    frame = frame+1
    
                roto['tile_color'].setValue(9658367)
                roto.setSelected(True)
                sDude.setSelected(False)
            else:##############linking the track#################

                roto['tile_color'].setValue(11645695)

       
                curves_knob = roto["curves"]
                stab_layer = rp.Layer(curves_knob)
                stab_layer.name = "stab_"+sDudeName
            
                trans_curve_x = cl.AnimCurve()
                trans_curve_y = cl.AnimCurve()
            
                trans_curve_x.expressionString = "parent.{0}.translate.x".format(sDudeName)
                trans_curve_y.expressionString = "parent.{0}.translate.y".format(sDudeName)
                trans_curve_x.useExpression = True
                trans_curve_y.useExpression = True
            
                rot_curve = cl.AnimCurve()
                rot_curve.expressionString = "parent.{0}.rotate".format(sDudeName)
                rot_curve.useExpression = True
            
                scale_curve = cl.AnimCurve()
                scale_curve.expressionString = "parent.{0}.scale".format(sDudeName)
                scale_curve.useExpression = True
            
                center_curve_x = cl.AnimCurve()
                center_curve_y = cl.AnimCurve()
                center_curve_x.expressionString = "parent.{0}.center.x".format(sDudeName)
                center_curve_y.expressionString = "parent.{0}.center.y".format(sDudeName)
                center_curve_x.useExpression = True
                center_curve_y.useExpression = True
            
                # Define variable for accessing the getTransform()
                transform_attr = stab_layer.getTransform()
                # Set the Animation Curve for the Translation attribute to the value of the previously defined curve, for both x and y
                transform_attr.setTranslationAnimCurve(0, trans_curve_x)
                transform_attr.setTranslationAnimCurve(1, trans_curve_y)
                # Index value of setRotationAnimCurve is 2 even though there is only 1 parameter...
                # http://www.mail-archive.com/[email protected]/msg02295.html
                transform_attr.setRotationAnimCurve(2, rot_curve)
                transform_attr.setScaleAnimCurve(0, scale_curve)
                transform_attr.setScaleAnimCurve(1, scale_curve)
                transform_attr.setPivotPointAnimCurve(0, center_curve_x)
                transform_attr.setPivotPointAnimCurve(1, center_curve_y)
                curves_knob.rootLayer.append(stab_layer)

                roto.setSelected(True)
                sDude.setSelected(False)
            roto['curves'].changed()
        else:############    if the selected node is not a tracker          ############
            roto = nuke.createNode("Roto")
            x = int(sDude['xpos'].value())
            y = int(sDude['ypos'].value())
            roto.setXYpos(x,y+50) 
            roto['hide_input'].setValue(0)
##############################################################
###############    if no node selected
        
    except:
        import traceback; traceback.print_exc()
        nuke.createNode("Roto")