def create_node(type): nodes = hou.selectedNodes() connections = hou.selectedConnections() if nodes: if type == 'merge' or type == 'switch': # one node, multiple inputs node_create = nodes[0].parent().createNode(type) for node in nodes: node_create.setNextInput(node) node_create.moveToGoodPosition(relative_to_inputs=True, move_inputs=False, move_outputs=True, move_unconnected=False) if type == 'null' or type == 'xform' or type == 'attribwrangle': # multiple nodes, one input for node in nodes: node_create = node.createOutputNode(type) node_create.moveToGoodPosition(relative_to_inputs=True, move_inputs=False, move_outputs=True, move_unconnected=False) # set current parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.NetworkEditor) parm_pane.setCurrentNode(node_create) # set display # wf_network_parm.flag_display () if connections: for connection in connections: node_up = connection.inputNode() node_dn = connection.outputNode() node_up_index = connection.outputIndex() node_dn_index = connection.inputIndex() node_create = node_dn.createInputNode(node_dn_index, type) node_create.setNextInput(node_up, node_up_index) node_create.moveToGoodPosition(relative_to_inputs=False, move_inputs=False, move_outputs=True, move_unconnected=False) # set current parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.NetworkEditor) parm_pane.setCurrentNode(node_create)
def selection_switch(): nodes = hou.selectedNodes() count = len(nodes) if count > 1: # if few nodes are selected, then initialize, save that selection selection_stack = ','.join(node.path() for node in nodes) hou.putenv('selection_stack', selection_stack) hou.putenv('selection_current', '0') hou.putenv('selection_count', str(count)) else: # hou.ui.displayMessage("ikoon: select more than one node") # return pass # even if one node is selected... selection_stack = hou.getenv('selection_stack', 'none') selection_current = hou.getenv('selection_current', 'none') selection_count = hou.getenv('selection_count', 'none') # go to next node... stack = selection_stack.split(',') current = int(selection_current) + 1 count = int(selection_count) if current == count: current = 0 # update the saved variable hou.putenv('selection_current', str(current)) # select that node in current pane target = hou.node(stack[current]) parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.Parm) parm_pane.setCurrentNode(target, True)
def toggle_visualizer_point_vector(vis_attrib, r, g, b): pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer) cur_viewport = pane.curViewport() existed = False visualizer_list = hou.viewportVisualizers.visualizers( category=hou.viewportVisualizerCategory.Scene) for visualizer in visualizer_list: if visualizer.name() == vis_attrib: visualizer_obj = visualizer existed = True if not existed: vis_type = hou.viewportVisualizers.types( )[0] # vis_types: 0=vis_marker 1=vis_color 2=vis_generic 3=vis_volume 4=vis_tag 5=vis_constraints 6=vis_captureweight vis_category = hou.viewportVisualizerCategory.Scene visualizer_obj = hou.viewportVisualizers.createVisualizer( vis_type, vis_category) visualizer_obj.setName(vis_attrib) visualizer_obj.setLabel(vis_attrib) visualizer_obj.setParm("attrib", vis_attrib) visualizer_obj.setParm("style", 4) # vis_styles: 0=text 4=vector visualizer_obj.setParm("class", 1) # vis_classes: 0=vertex 1=point 2=prim visualizer_obj.setParm("lengthscale", 0.2) visualizer_obj.setParm("markercolorr", r) visualizer_obj.setParm("markercolorg", g) visualizer_obj.setParm("markercolorb", b) active = visualizer_obj.isActive(viewport=cur_viewport) visualizer_obj.setIsActive(not active, viewport=cur_viewport) message = "visualise " + str(vis_attrib) + " : " + str(not active) hou.ui.setStatusMessage(message)
def go_parm(node, parm): parm = parm.rawValue() path = re.findall('[\"\'](.*?)[\"\']', parm)[0] path = path[:path.rindex('/')] target = node.node(path) parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.Parm) parm_pane.setCurrentNode(target, True)
def span_edit(): span = track_item_active_node().node("span") span.setGenericFlag(hou.nodeFlag.Selectable, True) span.setSelected(True, clear_all_selected=True) pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer) pane.setCurrentState("pose") span.setGenericFlag(hou.nodeFlag.Selectable, False)
def selection_go(direction, parent): parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.NetworkEditor) if parent == True: current = parm_pane.currentNode().parent() else: current = parm_pane.currentNode() target = current inputs = current.inputs() outputs = current.outputs() inputs_count = len(inputs) outputs_count = len(outputs) if direction == [0, 1]: if inputs_count > 0: target = inputs[0] else: target = selection_find(current, direction, current.parent().children()) if direction == [0, -1]: if outputs_count > 0: target = outputs[0] else: target = selection_find(current, direction, current.parent().children()) if direction == [-1, 0] or direction == [1, 0]: siblings = get_siblings(current, inputs, outputs) if len(siblings) == 0: target = selection_find(current, direction, current.parent().children()) else: target = selection_find(current, direction, siblings) if parent == True: parm_pane.cd(target.path()) else: parm_pane.setCurrentNode(target)
def toggle_dependencies(): parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.NetworkEditor) view_dependencies = hou.getenv("view_dependencies", "0") if view_dependencies == "0": view_dependencies = "1" else: view_dependencies = "0" hou.putenv("view_dependencies", view_dependencies) parm_pane.setPref('showdep', str(view_dependencies))
def view_sets(): pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer) settings = pane.curViewport().settings() # SceneObject (visible when in top level "/obj") # DisplayModel (visible when inside /obj/...) set_scen = settings.displaySet(hou.displaySetType.SceneObject) set_disp = settings.displaySet(hou.displaySetType.DisplayModel) set_ghos = settings.displaySet(hou.displaySetType.GhostObject) return set_scen, set_disp, set_ghos
def toggle_grid(): pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer) settings = pane.curViewport().settings() settings.setDisplayOrthoGrid(not settings.displayOrthoGrid())
def toggle_constructionplane(): pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer) cplane = pane.constructionPlane() cplane.setIsVisible(not cplane.isVisible())
def frame_all(): pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer) pane.curViewport().frameAll()
def lay(): parm_pane = wf_selection.pane_linkGroup(hou.paneTabType.NetworkEditor) containernode = parm_pane.currentNode().parent() ################################ ######## the pins ######### ################################ childrenArr = containernode.children() pinStatesArr = [] pinNodesArr = [] positionsArr = [] # store all positions for child in childrenArr: pinned = 0 if child.comment() == "`": pinned = 1 pinNodesArr.append(child) pinStatesArr.append(pinned) positionsArr.append(child.position()) # store pinned positions for pinNode in pinNodesArr: pos = pinNode.position() comment = str(pos[0]) + "," + str(pos[1]) pinNode.setComment(comment) # classic layoutChildren() containernode.layoutChildren() # reposition the branches for pinNode in pinNodesArr: pinpos = pinNode.comment() pinpos = pinpos.split(",") pinpos = [float(pinpos[0]), float(pinpos[1])] allConnected = [] allConnected = getConnectedNodes(pinNode, allConnected) pos = pinNode.position() move = [pinpos[0] - pos[0], pinpos[1] - pos[1]] for connected in allConnected: try: connected.move(move) except: no_connected = 1 # cleanup pinNode.setPosition(pinpos) pinNode.setComment("`") ################################ ####### net to set ######## ################################ # define offset offsetx = 3 offsety = 0 containerpath = containernode.path() prefixes = node_prefixes() for prefix in prefixes: name_dat = prefix + "dat_" name_app = prefix + "app_" dats = hou.node(containerpath).glob(name_dat + "*") # for all for dat in dats: xxx, task = dat.name().split("_") # appropriate channel node path_dat = containerpath + "/" + name_dat + task path_app = containerpath + "/" + name_app + task node_dat = hou.node(path_dat) node_app = hou.node(path_app) # get pos posx = node_app.position()[0] + offsetx posy = node_app.position()[1] + offsety # set pos if node_dat.comment() != "`": # typical dat node node_dat.setPosition([posx, posy]) else: # dat has custom pos, probably because it collided # so dont move it pass # shape node_dat.setUserData("nodeshape", "clipped_right") node_app.setUserData("nodeshape", "clipped_left")