| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | # TODO FIXME UNBREAK# why in the hell does this file even exist#Node Graph Functions                def SeekNodePathUntil(node, input_name, nodeType, direction = 'BACK'):    from .node_container_common import trace_single_line, trace_single_line_up    if direction == 'BACK':        return trace_single_line(node, input_name)    else: # 'FORWARD'        return trace_single_line_up(node, input_name)    # may not work anymore but that should be OKdef get_node_container(node, context):    # from .utilities import parse_node_tree, print_lines    base_tree = context.space_data.path[0].node_tree    from .readtree import get_tree_data    nodes = base_tree.parsed_tree    node_container = None    if (node.id_data != context.space_data.path[-1].node_tree):        return None, None    if (node.id_data == base_tree):        try:            #other_node = node.inputs['Parent'].links[0].from_node            node_container = nodes.get( ('NONE', node.name) )        except IndexError: # node just isn't connected'            nodes = None        return node_container, nodes    else: # find it in Node-Groups          # I am checking the active node, which should always          #  be the path of Group Nodes.          # if not, then the user is doing something sp0oky        for node_container in nodes.values():            if len(node_container.signature) != len(context.space_data.path)+1:                continue            tree = base_tree; found = False            for name in node_container.signature[0:]:                g_node = tree.nodes.get(name)                if not (g_node == tree.nodes.active): continue                 if (hasattr(g_node, 'node_tree')):                    tree = g_node.node_tree                elif name == node.name: found = True; break            else:                found = False                continue            if found == True:                return node_container, nodes        else:            return None, None    return None, None                def GetUpstreamXFormNodes(node_container, context):    if (node_container):        input_name=None        if node_container.node_type == 'LINK':            input_name = 'Input Relationship'            if node_container.__class__.__name__ == 'LinkInherit':                input_name = 'Parent'        elif node_container.node_type == 'XFORM':            input_name = 'Relationship'        xF = SeekNodePathUntil(node_container, input_name, ['xFormArmature', 'xFormBone', 'xFormRoot'])        return xF            else:        return None        def GetDownstreamXFormNodes(node_container, context):    if (node_container):        output_name=None        if node_container.node_type == 'LINK':            output_name = 'Output Relationship'            if node_container.__class__.__name__ == 'LinkInherit':                output_name = 'Inheritance'        elif node_container.node_type == 'XFORM':            output_name = 'xForm Out'        xF = SeekNodePathUntil(node_container, output_name, ['xFormArmature', 'xFormBone', 'xFormRoot'], direction = 'FORWARD')        return xF    else:        return None            # def get_parent(node_container):    # node_line, socket = trace_single_line(node_container, "Relationship")    # parent_nc = None    # for i in range(len(node_line)):        # print (node_line[i])        # # check each of the possible parent types.        # if ( (node_line[ i ].__class__.__name__ == 'LinkInherit') ):            # try: # it's the next one                # return node_line[ i + 1 ]            # except IndexError: # if there is no next one...                # return None # then there's no parent!    # return None    # # TO DO!    # #    # # make this do shorthand parenting - if no parent, then use World    # #  if the parent node is skipped, use the previous node (an xForm)    # #  with default settings.    # # it is OK to generate a new, "fake" node container for this!        # #my_sig = get_node_signature(node, tree)            def FindIKNode():    pass 
 |