Esempio n. 1
0
def clear_Constant_link():
    nodes = nuke.selectedNodes()
    for i in nodes:
        deps = nuke.dependencies(i, nuke.EXPRESSIONS)
        for knob_name in deps:
            if knob_name.Class() == "Constant":
                i.knob('disable').clearAnimated()
Esempio n. 2
0
	def inputHide(self):
		self.edit(1)
		for n in nuke.allNodes():
			name = n.name()
			if n.knob('hide_input'):
				if n.Class() != 'Viewer':
					x = n.knob('hide_input')
					value = x.value()
					if value == 0:
						self.dicModif[name] = self.darkColor
					else:
						self.dicModif[name] = self.goodColor
						n.setSelected(1)
						dependenciesOfWrite = nuke.dependencies([n])
						for d in dependenciesOfWrite:
							self.dicModif[name] = self.goodColor
			else:
				self.dicModif[name] = self.darkColor
		#Add Viewer Nodes
		viewer = nuke.allNodes('Viewer')
		for i in viewer:
			name = i.name()
			self.dicModif[name] = self.darkColor
		#Store Data
		self.edit(0)
Esempio n. 3
0
def upstream(node, max_depth=-1, deps=set([])):
    if max_depth != 0:
       new_deps = set([n for n in nuke.dependencies(node, what=connection_filter) if n not in deps])
       deps |= new_deps
       for dep in new_deps:
          upstream(dep, max_depth-1, deps)
    return deps
Esempio n. 4
0
def get_dependent_nodes(root):
    """
    Returns a list of all of the root node's dependencies.
    Uses `nuke.dependencies()`. This will work with cyclical dependencies.
    """
    all_deps = set([root])
    all_deps.update(nuke.dependencies(list(all_deps)))

    seen = set()
    while True:
        diff = all_deps - seen
        to_add = nuke.dependencies(list(diff))
        all_deps.update(to_add)
        seen.update(diff)
        if len(diff) == 0:
            break

    return list(all_deps)
    def _nodes_in_tree(self, outputs, blacklist_nodes):
        tree = set()

        for output in outputs:
            deps = set()
            if output["disable"].value():
                continue
            children = nuke.dependencies(output)
            while len(children) != 0:
                new_children = []
                for child in children:
                    new_children += nuke.dependencies(child)
                deps = deps.union([c.name() for c in children])
                children = new_children
            deps_valid = deps.difference(blacklist_nodes)
            tree = tree.union(deps_valid)

        return tree
Esempio n. 6
0
def get_dependent_nodes(root):
    """
    Returns a list of all of the root node's dependencies.
    Uses `nuke.dependencies()`. This will work with cyclical dependencies.
    """
    all_deps = set([root])
    all_deps.update(nuke.dependencies(list(all_deps)))

    seen = set()
    while True:
        diff = all_deps - seen
        to_add = nuke.dependencies(list(diff))
        all_deps.update(to_add)
        seen.update(diff)
        if len(diff) == 0:
            break

    return list(all_deps)
Esempio n. 7
0
def _useAsInputProcess():
  n = nuke.selectedNode()
  [i['selected'].setValue(False) for i in nuke.allNodes()]
  # FIXME: these two calls should have the arguments in the same order, or even better change the node bindings so they can go.
  if nuke.dependencies([n], nuke.INPUTS | nuke.HIDDEN_INPUTS) or nuke.dependentNodes(nuke.INPUTS | nuke.HIDDEN_INPUTS, [n]):
    m = nuke.createNode(n.Class())
  else:
    m = n
  if m is not n: _copyKnobsFromScriptToScript(n, m)
  viewer = nuke.activeViewer().node()
  viewer['input_process'].setValue(True)
  viewer['input_process_node'].setValue(m.name())
Esempio n. 8
0
def get_upstream_nodes(nodes, flags=nuke.INPUTS | nuke.HIDDEN_INPUTS):
    """ Return all nodes in the tree of the node. """
    ret = set()
    if isinstance(nodes, nuke.Node):
        nodes = [nodes]

    nodes = list(nodes)
    while nodes:
        deps = nuke.dependencies(nodes, flags)
        nodes = [n for n in deps if n not in ret and n not in nodes]
        ret.update(set(deps))
    return ret
Esempio n. 9
0
def selectConnectedNodes(startNodes):
    """sel all nodes in the tree of selected node"""

    allDeps = set()
    depsList = [startNodes]
    evaluateAll = True
    while depsList:
        deps = nuke.dependencies(depsList)
        depsList = [i for i in deps if i not in allDeps and not allDeps.add(i)]

    for i in allDeps:
        i['selected'].setValue(True)

    return list(nuke.selectedNodes())
Esempio n. 10
0
def connected(nodes, upstream=True, downstream=True):
    # return all upstream and/or downstream nodes of node
    # based on nuke.overrides.selectConnectedNodes()
    all_deps = set()
    deps_list = nodes
    evaluate_all = True
    while deps_list:
        deps = []
        if upstream:
            deps += nuke.dependencies(deps_list, connection_filter)
        if downstream:
            deps += nuke.dependentNodes(connection_filter, deps_list, evaluate_all)
        evaluate_all = False
        deps_list = [d for d in deps if d not in all_deps and not all_deps.add(d)]
    return all_deps
Esempio n. 11
0
        def _get_upstream(nodes, flags=nuke.INPUTS | nuke.HIDDEN_INPUTS):
            ret = set()
            if isinstance(nodes, nuke.Node):
                nodes = [nodes]

            nodes = tuple(nodes)
            while nodes:
                deps = nuke.dependencies(nodes, flags)
                nodes = [
                    n for n in deps
                    if n not in ret and n not in nodes and n.Class() in (
                        'Merge2', 'Shuffle')
                ]
                ret.update(set(deps))
            return ret
Esempio n. 12
0
def checkDependencies(node, type='Read'):
    #print node.name()
    depNodes = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS | nuke.EXPRESSIONS)
    #print depNodes
    nodes = []
    for depNode in depNodes:
        if depNode.Class() == 'Read':
            #print 'found '+depNode.name()
            return depNode
        else:
            nodes.append(depNode)
    #print nodes
    if nodes:
        for dep in nodes:
            result = checkDependencies(dep)
    return result
Esempio n. 13
0
def copySpecial():
    """copy selection, paste and reconnect (just one node)"""
    depNode = nuke.dependencies(nuke.selectedNode())
    dependNode = nuke.dependentNodes(nuke.INPUTS or nuke.HIDDEN_INPUTS or nuke.EXPRESSIONS, [nuke.selectedNode()])
    i = 0
    if dependNode[0].Class() in ['Scene', 'MergeGeo']:
        i = nuke.inputs(dependNode[0])+1

    nuke.nodeCopy(nukescripts.cut_paste_file())

    for node in nuke.allNodes():
        node['selected'].setValue(0)

    nuke.nodePaste(nukescripts.cut_paste_file())

    newNode = nuke.selectedNode()
    newNode.setInput(0, depNode[0])
    dependNode[0].setInput(i+1, newNode)
Esempio n. 14
0
def loop(_input_node, _input_node_name, _max):

    #LOOPING UNTIL EXPONENTIAL LEVEL IS REACHED

    exponential_multi(_input_node, _max)

    #CREATING AND HOOKING UP IBK GIZMO

    target = nuke.selectedNode()
    dep_node = nuke.dependencies(nuke.toNode(_input_node_name))
    topnode_node = nuke.toNode(dep_node[0].name())

    screen_color = nuke.toNode(_input_node_name)['screen_type'].value()

    ibk_gizmo = create_ibk_gizmo()
    expression = "C-{}".format(screen_color)
    ibk_gizmo['st'].setValue(expression)
    ibk_gizmo.setInput(0, topnode_node)
    ibk_gizmo.setInput(1, target)
    ibk_gizmo.setInput(2, None)
    #ibk_gizmo.setXpos(nuke.toNode(_input_node_name).xpos() - 250)

    return
Esempio n. 15
0
def stack_ibk(max):

    #CONSTANTS

    MAX = max
    MULTIVALUE = 0
    
    #VALIDATION
    
    try:
        MASTER_IBK = nuke.selectedNode().name()
        M_IBK_NAME = str(MASTER_IBK)
    except:
        nuke.message("Please select an IBKColourV3, Dude")
        
    if nuke.selectedNode().Class() != "IBKColourV3":
        nuke.message("Please select an IBKColourV3, Dude")
        return None
    else:
        

        #LOOPING UNTIL EXPONENTIAL LEVEL IS REACHED
        
        exponential_multi(MASTER_IBK,MAX)

        #CREATING AND HOOKING UP IBK GIZMO
        
        target = nuke.selectedNode()
        dep_node = nuke.dependencies(nuke.toNode(M_IBK_NAME))
        topnode_node = nuke.toNode(dep_node[0].name())

        ibk_gizmo = create_ibk_gizmo()
        ibk_gizmo.setInput(0, topnode_node)
        ibk_gizmo.setInput(1, target)
        ibk_gizmo.setInput(2, None)
        
        return
Esempio n. 16
0
def precomp_selected():

  nodes = nuke.selectedNodes()
  if len(nodes) == 0:
    g = nuke.createNode( "Precomp" )
    return

  options = PrecompOptions()

  if not options.askUserForOptions():
    return False

  sel = nodes[0]

  ## select upstream nodes
  if len( nodes ) == 1:
    upstreamNodes = nuke.dependencies( nodes )
    while len ( upstreamNodes ) != 0:
      nodes += upstreamNodes
      upstreamNodes = nuke.dependencies( upstreamNodes )

  left = right = nodes[0].xpos()
  top = bottom = nodes[0].ypos()

  nodeSize = 100
  titleHeight = 50

  inputs = []

  for n in nodes:
    n["selected"].setValue ( True )
    if n.xpos() < left:
      left = n.xpos()

    if n.xpos() > right:
      right = n.xpos()

    if n.ypos() < top:
      top = n.ypos()

    if n.ypos() > bottom:
      bottom = n.ypos()

    for i in range( 0, n.inputs() ):
      if not n.input(i):
        continue

      if not n.input(i) in nodes:
        inputs.append( n.input(i) )

  ## find all the dependent nodes
  inputDeps = []
  expressionDeps = []

  for n in nodes:
    for d in nuke.dependentNodes( nuke.INPUTS, [n]):
      if d not in nodes:
        if d.Class() != 'Viewer':
          inputIndices = [i for i in range(d.inputs()) if d.input(i) == n]
          inputDeps.append( (d, inputIndices) )

    for d in nuke.dependencies( [n], nuke.EXPRESSIONS ):
      if d not in nodes:
        expressionDeps.append( d )

  if len(inputDeps) > 1:
    nuke.message( "You cannot precomp the selected nodes because there are multiple outputs." )
    return

  addLinkedExpressionNodes = False
  if len(expressionDeps) > 0:
    addLinkedExpressionNodes = nuke.ask( "Warning: The selected nodes have expressions to nodes outside the precomp. Do you want to copy these nodes to the precomp?" )

  ## make group and export
  if len( nodes ) == 1 and nodes[0].Class() == "Group":
    group = nodes[0]
  else:
    group = nuke.makeGroup( False )

  with group:
    outputInputs = []
    output = group.output()
    for i in range(0, output.inputs()):
      outputInputs.append( output.input(i) )

    ## insert write node or use existing one
    outInp = output.input(0)
    if outInp is None or outInp.Class() != "Write":
      w = nuke.createNode( "Write", inpanel = False)
      w.setInput( 0, None )
    else:
      w = outInp

    for i in range(0, len(outputInputs) ):
      w.setInput( i, outputInputs[i] )
      output.setInput(i, None )

    output.setInput(0, w )

    w.knob("file").setValue( options.renderPath )
    type = os.path.splitext( options.renderPath)[1][1:].lower()
    w.knob("file_type").setValue( type )
    w.knob("channels").setValue( options.channels )

    for n in nuke.allNodes():
      n['selected'].setValue( False )

  if addLinkedExpressionNodes:
    for n in nuke.allNodes():
      n['selected'].setValue( False )

    for n in expressionDeps:
      n['selected'].setValue( True )

    nuke.nodeCopy ( '%clipboard%' )

    with group:
      nuke.nodePaste( '%clipboard%' )

  writeOk = True
  with group:
    try:
      nuke.tcl("export_as_precomp",  options.scriptPath)
    except:
      nuke.message( "Could not write precomp script, permission denied, please specify a different \'script path\' and try again.")
      writeOk = False

    for n in nuke.selectedNodes():
      n['selected'].setValue( False )

  if group != nodes[0]:
    group['selected'].setValue( False )
    nuke.delete( group )

  if not writeOk:
    for n in nuke.selectedNodes():
      n['selected'].setValue( False )

    for n in nodes:
      n['selected'].setValue( True )

    return

  ## reload saved out script
  g = nuke.createNode( "Precomp" )
  g[ "file" ].setValue( options.scriptPath )

  #nuke.tprint( "Selected Node: " + sel.name() )

  for d in inputDeps:
    node = d[0]
    for inp in d[1]:
      #nuke.tprint ( "Reconnecting dep " + node.name() + " input " + str(inp) )
      node.setInput(inp, g)

  ## reconnect inputs, if any
  for i in range(0, len(inputs)):
    #nuke.tprint ( "Reconnecting input " + inputs[i].name() + " " + str(i) )
    g.setInput(i, inputs[i] )

  pad = 5

  if options.addBackdrop:
    b = nuke.createNode( "BackdropNode", inpanel = False )
    width = int(math.fabs(right - left)) + (pad * 2) + nodeSize
    height = int(math.fabs(bottom - top)) + ( pad * 2 ) + nodeSize + titleHeight
    b['label'].setValue( os.path.basename( options.scriptPath ) )
    b['note_font_size'].setValue( 18 )
    b.setXYpos( left - pad * 2, top - ( pad * 2) - titleHeight )
    b.knob( "bdwidth" ).setValue( width  )
    b.knob( "bdheight").setValue( height )
    b.knob( "z_order" ).setValue( 0 )
    b['selected'].setValue(False)
    g.setXYpos( b.xpos() + width/2 - nodeSize/2, b.ypos() + height + pad * 2 )
  elif options.delete:
    for n in nodes:
      nuke.delete( n )

  if len(inputs) > 0:
    nuke.message( "Warning: The precomp script requires inputs and may not render the same independent of its parent script." )

  return group
Esempio n. 17
0
def clear_the_linked_objects():
    nodes = nuke.selectedNodes()
    for i in nodes:
        deps = nuke.dependencies(i, nuke.EXPRESSIONS)
        if deps:
            i.knob('disable').clearAnimated()