Skip to content

Instantly share code, notes, and snippets.

@loonghao
Created August 14, 2020 10:20
Show Gist options
  • Save loonghao/11fa08832610f70f0dc503f7b1a89669 to your computer and use it in GitHub Desktop.
Save loonghao/11fa08832610f70f0dc503f7b1a89669 to your computer and use it in GitHub Desktop.
swap selection nodes
import nuke
import nukescripts
def get_connected_nodes(node):
input_nodes = [(i, node.input(i)) for i in range(node.inputs())]
output_nodes = []
for depNode in nuke.dependentNodes(nuke.INPUTS | nuke.HIDDEN_INPUTS, node):
for i in range(depNode.inputs()):
if depNode.input(i) == node:
output_nodes.append((i, depNode))
return (input_nodes, output_nodes)
def swap_out_node(target_node, new_node):
if isinstance(target_node, basestring):
target_node = nuke.toNode(target_node)
if isinstance(new_node, basestring):
new_node = nuke.toNode(new_node)
if not (isinstance(target_node, nuke.Node) and isinstance(new_node, nuke.Node)):
return
sourcePos = (new_node.xpos(), new_node.ypos())
targetPos = (target_node.xpos(), target_node.ypos())
oldSel = nuke.selectedNodes()
input_nodes, output_nodes = get_connected_nodes(target_node)
nukescripts.clear_selection_recursive()
target_node.setSelected(True)
nuke.extractSelected()
target_node.setSelected(False)
new_node.setXYpos(*targetPos)
target_node.setXYpos(*sourcePos)
for inNode in input_nodes:
new_node.setInput(*inNode)
for index, node in output_nodes:
node.setInput(index, new_node)
for node in oldSel:
node.setSelected(True)
return True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment