Jump to content

Search the Community

Showing results for tags 'swap nodes'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • General
    • Lounge/General chat
    • Education
    • Jobs
    • Marketplace
  • Houdini
    • General Houdini Questions
    • Effects
    • Modeling
    • Animation & Rigging
    • Lighting & Rendering
    • Compositing
    • Games
    • Tools (HDA's etc.)
  • Coders Corner
    • HDK : Houdini Development Kit
    • Scripting
    • Shaders
  • Art and Challenges
    • Finished Work
    • Work in Progress
    • VFX Challenge
    • Effects Challenge Archive
  • Systems and Other Applications
    • Other 3d Packages
    • Operating Systems
    • Hardware
    • Pipeline
  • od|force
    • Feedback, Suggestions, Bugs

Found 1 result

  1. I'm new to python and trying to recreate a feature of Nuke's node view. It allows you to swap the positions and connections of two nodes by dropping one on top of another with [ctrl+shift] held. I have already created a shelf tool that swaps the nodes (any feedback is appreciated, like I said I'm relatively new to python). I'm just wondering if I can trigger this script the same way nuke does, when one node is dropped onto another with a modifier key held down. nodes = hou.selectedNodes() inputInfo = [] inputBuffer = [] outputInfo = [] outputBuffer = [] # check if two or more nodes are selected if len(nodes)>=2: for idx, node in enumerate(nodes): # if more than two nodes are selected break loop after two iterations if idx>=2: break # create array of input connections and output connections for each of the two nodes inputInfo.append(node.inputConnectors()) outputInfo.append(node.outputConnectors()) # the connection array will update each time the nodes are altered so I've saved the connection info to a buffer (node to change, input index, node to connect to, output index, self) for idx, inputs in enumerate(inputInfo): for inputs in inputs: for inputs in inputs: inputBuffer.append([nodes[1-idx],inputs.inputIndex(),inputs.inputNode(),inputs.outputIndex(),inputs.outputNode()]) for idx, outputs in enumerate(outputInfo): for outputs in outputs: for outputs in outputs: outputBuffer.append([outputs.outputNode(),outputs.inputIndex(),nodes[1-idx],outputs.outputIndex()]) # delete all effected connections for inputs in inputInfo: for inputs in inputs: for inputs in inputs: inputs.outputNode().setInput(inputs.inputIndex(),None) for outputs in outputInfo: for outputs in outputs: for outputs in outputs: outputs.outputNode().setInput(outputs.inputIndex(),None) # rebuild connections taking into account if the input/output index exists on the target node, whether it is a subnet and whether the selected nodes are connected to each other for inputs in inputBuffer: if inputs[1]<len(inputs[0].inputConnectors()): if inputs[0].name()==inputs[2].name(): if inputs[4].isSubNetwork()==1: length = len(inputs[4].subnetOutputs()) else: length = len(inputs[4].outputConnectors()) if inputs[3]<length: inputs[0].setInput(inputs[1],inputs[4],inputs[3]) else: inputs[0].setInput(inputs[1],inputs[2],inputs[3]) for outputs in outputBuffer: if outputs[0].name()!=outputs[2].name(): if outputs[2].isSubNetwork()==1: length = len(outputs[2].subnetOutputs()) else: length = len(outputs[2].outputConnectors()) if outputs[3]<length: outputs[0].setInput(outputs[1],outputs[2],outputs[3]) # swap positions of nodes pos0 = nodes[0].position() pos1 = nodes[1].position() nodes[0].setPosition(pos1) nodes[1].setPosition(pos0)