Created
August 14, 2020 10:20
-
-
Save loonghao/11fa08832610f70f0dc503f7b1a89669 to your computer and use it in GitHub Desktop.
swap selection nodes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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