Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
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))
Beispiel #8
0
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
Beispiel #9
0
def toggle_grid():
    pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer)
    settings = pane.curViewport().settings()
    settings.setDisplayOrthoGrid(not settings.displayOrthoGrid())
Beispiel #10
0
def toggle_constructionplane():
    pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer)
    cplane = pane.constructionPlane()
    cplane.setIsVisible(not cplane.isVisible())
Beispiel #11
0
def frame_all():
    pane = wf_selection.pane_linkGroup(hou.paneTabType.SceneViewer)
    pane.curViewport().frameAll()
Beispiel #12
0
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")