Ejemplo n.º 1
0
    def execute(self, context):
        inputs = bpy.data.node_groups[self.treename].nodes[self.nodename].inputs

        # vertices socket
        out_verts = "None \n"
        if inputs["vertices"].links:
            if type(inputs["vertices"].links[0].from_socket) == bpy.types.VerticesSocket:
                evaverti = inputs["vertices"].sv_get()

                deptl = levelsOflist(evaverti)
                if deptl and deptl > 2:
                    a = self.readFORviewer_sockets_data(evaverti, deptl, len(evaverti))
                elif deptl:
                    a = self.readFORviewer_sockets_data_small(evaverti, deptl, len(evaverti))
                else:
                    a = "None \n"
                out_verts = a

        # edges/faces socket
        out_edgpol = "None \n"
        edpotype = "\n\ndata \n"
        if inputs["edg_pol"].links:
            if type(inputs["edg_pol"].links[0].from_socket) == bpy.types.StringsSocket:
                evaline_str = inputs["edg_pol"].sv_get()

                if evaline_str:
                    edpotype = self.edgDef(evaline_str)

                deptl = levelsOflist(evaline_str)
                if deptl and deptl > 2:
                    b = self.readFORviewer_sockets_data(evaline_str, deptl, len(evaline_str))
                elif deptl:
                    b = self.readFORviewer_sockets_data_small(evaline_str, deptl, len(evaline_str))
                else:
                    b = "None \n"
                out_edgpol = str(b)

        # matrix socket
        out_matrix = "None \n"
        if inputs["matrix"].links:
            if type(inputs["matrix"].links[0].from_socket) == bpy.types.MatrixSocket:
                eva = inputs["matrix"].sv_get()

                deptl = levelsOflist(eva)
                if deptl and deptl > 2:
                    c = self.readFORviewer_sockets_data(eva, deptl, len(eva))
                elif deptl:
                    c = self.readFORviewer_sockets_data_small(eva, deptl, len(eva))
                else:
                    c = "None \n"
                out_matrix = str(c)

        self.do_text(out_verts, out_edgpol, out_matrix, edpotype)
        return {"FINISHED"}
Ejemplo n.º 2
0
    def process(self):
        if any(s.is_linked for s in self.outputs):
            slots = []
            for socket in self.inputs:
                if socket.is_linked:
                    slots.append(socket.sv_get())
            if len(slots) == 0:
                return
            lol = levelsOflist(slots)
            if lol == 4:
                result = self.connect(slots, self.dir_check, self.cicl_check_U, self.cicl_check_V, lol, self.polygons, self.slice_check, self.cup_U, self.cup_V)
            elif lol == 5:
                one = []
                two = []
                for slo in slots:
                    for s in slo:
                        result = self.connect([s], self.dir_check, self.cicl_check_U, self.cicl_check_V, lol, self.polygons, self.slice_check, self.cup_U, self.cup_V)
                        one.extend(result[0])
                        two.extend(result[1])
                result = (one, two)
            else:  # give up
                return


            if self.outputs['vertices'].is_linked:
                self.outputs['vertices'].sv_set(result[0])
            if self.outputs['data'].is_linked:
                self.outputs['data'].sv_set(result[1])
Ejemplo n.º 3
0
def recurse_fxy(l1, l2, func, level):
    res = []
    res_append = res.append
    if levelsOflist(l1) < 2:
        l1 = [l1]
    if levelsOflist(l2) < 2:
        l2 = [l2]
    # will only be used if lists are of unequal length
    fl = l2[-1] if len(l1) > len(l2) else l1[-1]
    if level == 1:
        for u, v in zip_longest(l1, l2, fillvalue=fl):
            res_append(func(u, v))
    else:
        for u, v in zip_longest(l1, l2, fillvalue=fl):
            res_append(recurse_fxy(u, v, func, level - 1))
    return res
Ejemplo n.º 4
0
 def process(self):
     if self.inputs[0].is_linked:
         slots = [
             socket.sv_get() for socket in self.inputs if socket.is_linked
         ]
         lol = levelsOflist(slots)
         if lol == 4:
             one, two = self.connect(slots, self.dir_check,
                                     self.cicl_check_U, self.cicl_check_V,
                                     lol, self.polygons, self.slice_check,
                                     self.cup_U, self.cup_V)
         elif lol == 5:
             one = []
             two = []
             for slo in slots:
                 for s in slo:
                     result = self.connect([s], self.dir_check,
                                           self.cicl_check_U,
                                           self.cicl_check_V, lol,
                                           self.polygons, self.slice_check,
                                           self.cup_U, self.cup_V)
                     one.extend(result[0])
                     two.extend(result[1])
         else:
             return
         if self.outputs['vertices'].is_linked:
             self.outputs['vertices'].sv_set(one)
         if self.outputs['data'].is_linked:
             self.outputs['data'].sv_set(two)
Ejemplo n.º 5
0
    def process(self):
        if self.outputs['vertices'].is_linked or self.outputs['data'].is_linked:
            slots = []
            for socket in self.inputs:
                if socket.is_linked:
                    slots.append(socket.sv_get())
            if len(slots) == 0:
                return
            lol = levelsOflist(slots)
            if lol == 4:
                result = self.connect(slots, self.dir_check, self.cicl_check_U,
                                      self.cicl_check_V, lol, self.polygons,
                                      self.slice_check, self.cup_U, self.cup_V)
            elif lol == 5:
                one = []
                two = []
                for slo in slots:
                    for s in slo:
                        result = self.connect([s], self.dir_check,
                                              self.cicl_check_U,
                                              self.cicl_check_V, lol,
                                              self.polygons, self.slice_check,
                                              self.cup_U, self.cup_V)
                        one.extend(result[0])
                        two.extend(result[1])
                result = (one, two)

            if self.outputs['vertices'].is_linked:
                SvSetSocketAnyType(self, 'vertices', result[0])
            if self.outputs['data'].is_linked:
                SvSetSocketAnyType(self, 'data', result[1])
Ejemplo n.º 6
0
    def process(self):
        if self.outputs['vertices'].is_linked or self.outputs['data'].is_linked:
            slots = []
            for socket in self.inputs:
                if socket.is_linked:
                    slots.append(socket.sv_get())
            if len(slots) == 0:
                return
            lol = levelsOflist(slots)
            if lol == 4:
                result = self.connect(slots, self.dir_check, self.cicl_check, lol, self.polygons, self.slice_check)
            elif lol == 5:
                one = []
                two = []
                for slo in slots:
                    for s in slo:
                        result = self.connect([s], self.dir_check, self.cicl_check, lol, self.polygons, self.slice_check)
                        one.extend(result[0])
                        two.extend(result[1])
                result = (one,two)
            

            if self.outputs['vertices'].is_linked:
                SvSetSocketAnyType(self, 'vertices', result[0])
            if self.outputs['data'].is_linked:
                SvSetSocketAnyType(self, 'data', result[1])
Ejemplo n.º 7
0
 def auto_count(self):
     data = self.inputs['data'].sv_get(default=[])
     leve = levelsOflist(data)
     if leve+1 < self.level:
         self.level = leve+1
     result = self.beat(data, self.level)
     self.count = min(len(result), 16)
Ejemplo n.º 8
0
def prep_text(node, num_lines):
    """ main preparation function for text """
    
    outs  = ''
    inputs = node.inputs
    for socket in inputs:
        if socket.is_linked and socket.other:
            label = socket.other.node.label
            if label:
                label = '; node ' + label.upper()
            
            name = socket.name.upper()
            data_type = socket_types.get(socket.other.bl_idname, "DATA")    
            itype = f'\n\nSocket {name}{label}; type {data_type}: \n'

            eva = socket.sv_get()
            deptl = levelsOflist(eva)
            if deptl and deptl > 2:
                a = readFORviewer_sockets_data(eva, deptl, len(eva), num_lines)
            elif deptl:
                a = readFORviewer_sockets_data_small(eva, deptl, len(eva), num_lines)
            else:
                a = 'None'
            outs += itype+str(a)+'\n'
    
    do_text(node, outs)
Ejemplo n.º 9
0
    def process(self):

        if 'vers' in self.outputs and len(self.outputs['vers'].links) > 0:
            # get any type socket from input:
            vers = SvGetSocketAnyType(self, self.inputs['vers'])
            # Process data
            levs = levelsOflist(vers)
            result = self.remdou(vers, levs)
            SvSetSocketAnyType(self, 'vers', result)
Ejemplo n.º 10
0
def sv_recursive_transformations(*args):
    ''' main function takes 5 args
    function, verts1, verts2, multiplyer, separate
    resulting levels arg to recursion'''
    # print('arguments recursive',len(args))
    if len(args) == 5:
        f,v1,v2,m,s = args
        m,v1,v2 = match_long_repeat([m,v1,v2])
        level1 = levelsOflist(v1)
        level2 = levelsOflist(v2)
        level3 = levelsOflist(m)
        lev = max(level1,level2,level3)-1
        #print('recursion-dataspoiled',m,level3)
        v1 = dataSpoil(v1, lev)
        v2 = dataSpoil(v2, lev)
        m = dataSpoil(m, lev)
        #print('recursion-dataspoiled',m,lev)
        return sv_recursion(f,v1,v2,m,s,lev)
Ejemplo n.º 11
0
def sv_recursive_transformations(*args):
    ''' main function takes 5 args
    function, verts1, verts2, multiplyer, separate
    resulting levels arg to recursion'''
    # print('arguments recursive',len(args))
    if len(args) == 5:
        f, v1, v2, m, s = args
        m, v1, v2 = match_long_repeat([m, v1, v2])
        level1 = levelsOflist(v1)
        level2 = levelsOflist(v2)
        level3 = levelsOflist(m)
        lev = max(level1, level2, level3) - 1
        #print('recursion-dataspoiled',m,level3)
        v1 = dataSpoil(v1, lev)
        v2 = dataSpoil(v2, lev)
        m = dataSpoil(m, lev)
        #print('recursion-dataspoiled',m,lev)
        return sv_recursion(f, v1, v2, m, s, lev)
Ejemplo n.º 12
0
    def process(self):
        if self.inputs['X'].is_linked:
            vecs = SvGetSocketAnyType(self, self.inputs['X'])
        else:
            vecs = [[0.0]]


        # outputs
        if not self.outputs['Result'].is_linked:
            return
        
        list_mult = []
        if self.inputs['n[0]'].is_linked:
            i = 0
            for socket in self.inputs[1:]:
                if socket.is_linked:
                    list_mult.append(SvGetSocketAnyType(self, socket))
            #print(list_mult)
        code_formula = parser.expr(self.formula).compile()
        # finding nasty levels, make equal nastyness (canonical 0,1,2,3)
        levels = [levelsOflist(vecs)]
        for n in list_mult:
            levels.append(levelsOflist(n))
        maxlevel = max(max(levels), 3)
        diflevel = maxlevel - levels[0]

        if diflevel:
            vecs_ = dataSpoil([vecs], diflevel-1)
            vecs = dataCorrect(vecs_, nominal_dept=2)
        for i, lev in enumerate(levels):
            if i == 0:
                continue
            diflevel = maxlevel-lev
            if diflevel:
                list_temp = dataSpoil([list_mult[i-1]], diflevel-1)
                list_mult[i-1] = dataCorrect(list_temp, nominal_dept=2)
        #print(list_mult)
        r = self.inte(vecs, code_formula, list_mult, 3)
        result = dataCorrect(r, nominal_dept=min((levels[0]-1), 2))

        SvSetSocketAnyType(self, 'Result', result)
Ejemplo n.º 13
0
    def auto_count(self):
        data = self.inputs['data'].sv_get(default="not found")
        other = get_other_socket(self.inputs['data'])
        if other and data == "not found":
            update_system.process_to_node(other.node)
            data = self.inputs['data'].sv_get()

        leve = levelsOflist(data)
        if leve + 1 < self.level:
            self.level = leve + 1
        result = self.beat(data, self.level)
        self.count = min(len(result), 16)
Ejemplo n.º 14
0
    def process(self):
        # достаём два слота - вершины и полики
        if self.outputs['Sum'].is_linked and self.inputs['Data'].is_linked:
            data = self.inputs['Data'].sv_get()

            lol = levelsOflist(data) - 1
            level = min(lol, self.level)
            out = self.summ(data, level, lol)

            if self.level == 1:
                out = [out]
            self.outputs['Sum'].sv_set(out)
Ejemplo n.º 15
0
 def auto_count(self):
     data = self.inputs['data'].sv_get(default="not found")
     other = get_other_socket(self.inputs['data'])
     if other and data == "not found":
         update_system.process_to_node(other.node)
         data = self.inputs['data'].sv_get()
         
     leve = levelsOflist(data)
     if leve+1 < self.level:
         self.level = leve+1
     result = self.beat(data, self.level)
     self.count = min(len(result), 16)
Ejemplo n.º 16
0
    def process(self):
        if self.inputs['X'].is_linked:
            vecs = self.inputs['X'].sv_get()
        else:
            vecs = [[0.0]]

        # outputs
        if not self.outputs['Result'].is_linked:
            return

        list_mult = []
        if self.inputs['n[0]'].is_linked:
            i = 0
            for socket in self.inputs[1:]:
                if socket.is_linked:
                    list_mult.append(socket.sv_get())

        code_formula = parser.expr(self.formula).compile()
        # finding nested levels, make equal nastedness (canonical 0,1,2,3)
        levels = [levelsOflist(vecs)]
        for n in list_mult:
            levels.append(levelsOflist(n))
        maxlevel = max(max(levels), 3)
        diflevel = maxlevel - levels[0]

        if diflevel:
            vecs_ = dataSpoil([vecs], diflevel - 1)
            vecs = dataCorrect(vecs_, nominal_dept=2)
        for i, lev in enumerate(levels):
            if i == 0:
                continue
            diflevel = maxlevel - lev
            if diflevel:
                list_temp = dataSpoil([list_mult[i - 1]], diflevel - 1)
                list_mult[i - 1] = dataCorrect(list_temp, nominal_dept=2)

        r = self.inte(vecs, code_formula, list_mult, 3)
        result = dataCorrect(r, nominal_dept=min((levels[0] - 1), 2))

        self.outputs['Result'].sv_set(result)
Ejemplo n.º 17
0
    def process(self):
        # достаём два слота - вершины и полики
        if 'Sum' in self.outputs and self.outputs['Sum'].is_linked:
            if 'Data' in self.inputs and self.inputs['Data'].is_linked:
                data = SvGetSocketAnyType(self, self.inputs['Data'])

                lol = levelsOflist(data) - 1
                level = min(lol, self.level)
                out = self.summ(data, level, lol)

                if self.level == 1:
                    out = [out]
                SvSetSocketAnyType(self, 'Sum', out)
Ejemplo n.º 18
0
    def process(self):
        # достаём два слота - вершины и полики
        if 'Sum' in self.outputs and self.outputs['Sum'].is_linked:
            if 'Data' in self.inputs and self.inputs['Data'].is_linked:
                data = self.inputs['Data'].sv_get()

                lol = levelsOflist(data) - 1
                level = min(lol, self.level)
                out = self.summ(data, level, lol)

                if self.level == 1:
                    out = [out]
                self.outputs['Sum'].sv_set(out)
Ejemplo n.º 19
0
    def process(self):
        if not self.outputs['data'].is_linked and not self.newsock:
            return
        self.newsock = False

        data_ = self.inputs['data'].sv_get()
        out = []

        input_level = levelsOflist(data_)
        if not self.inputs['keys'].is_linked:

            out = sv_sort(data_, min(self.level, input_level))
        else:
            keys_ = self.inputs['keys'].sv_get()
            out = key_sort(data_, keys_, min(self.level, input_level), 0)

        self.outputs['data'].sv_set(out)
Ejemplo n.º 20
0
    def process(self):
        if not self.outputs['data'].is_linked:
            return

        data_ = self.inputs['data'].sv_get()
        levelinit = levelsOflist(data_)
        data = dataCorrect(data_, nominal_dept=self.level).copy()
        out_ = []
        if not self.inputs['keys'].is_linked:
            for obj in data:
                out_.append(sorted(obj))
        else:
            keys_ = self.inputs['keys'].sv_get()
            keys = dataCorrect(keys_, nominal_dept=1)
            for d,k in zip(data,keys):
                d.sort(key = lambda x: k.pop(0))
                out_.append(d)
        out = dataCorrect(out_,nominal_dept=levelinit-1)
        self.outputs['data'].sv_set(out)
Ejemplo n.º 21
0
    def process(self):
        if not self.outputs['data'].is_linked:
            return

        data_ = self.inputs['data'].sv_get()
        levelinit = levelsOflist(data_)
        data = dataCorrect(data_, nominal_dept=self.level).copy()
        out_ = []
        if not self.inputs['keys'].is_linked:
            for obj in data:
                out_.append(sorted(obj))
        else:
            keys_ = self.inputs['keys'].sv_get()
            keys = dataCorrect(keys_, nominal_dept=1)
            for d, k in zip(data, keys):
                d.sort(key=lambda x: k.pop(0))
                out_.append(d)
        out = dataCorrect(out_, nominal_dept=levelinit - 1)
        self.outputs['data'].sv_set(out)
Ejemplo n.º 22
0
    def process(self):
        if self.inputs['Data'].is_linked:
            data = self.inputs['Data'].sv_get(deepcopy=False)

            # blocking too height values of levels, reduce
            levels = levelsOflist(data) - 2
            if levels >= self.level:
                levels = self.level - 1
            elif levels < 1:
                levels = 1
            # assign out
            if self.outputs['First'].is_linked:
                out = self.count(data, levels, 0)
                self.outputs['First'].sv_set(out)
            if self.outputs['Middl'].is_linked:
                out = self.count(data, levels, 1)
                self.outputs['Middl'].sv_set(out)
            if self.outputs['Last'].is_linked:
                out = self.count(data, levels, 2)
                self.outputs['Last'].sv_set(out)
Ejemplo n.º 23
0
 def process(self):
     if self.inputs[0].is_linked:
         slots = [socket.sv_get() for socket in self.inputs if socket.is_linked]
         lol = levelsOflist(slots)
         if lol == 4:
             one, two = self.connect(slots, self.dir_check, self.cicl_check_U, self.cicl_check_V, lol, self.polygons, self.slice_check, self.cup_U, self.cup_V)
         elif lol == 5:
             one = []
             two = []
             for slo in slots:
                 for s in slo:
                     result = self.connect([s], self.dir_check, self.cicl_check_U, self.cicl_check_V, lol, self.polygons, self.slice_check, self.cup_U, self.cup_V)
                     one.extend(result[0])
                     two.extend(result[1])
         else:
             return
         if self.outputs['vertices'].is_linked:
             self.outputs['vertices'].sv_set(one)
         if self.outputs['data'].is_linked:
             self.outputs['data'].sv_set(two)
Ejemplo n.º 24
0
    def process(self):
        inputs, outputs = self.inputs, self.outputs

        if not outputs[0].is_linked:
            return

        func = func_dict.get(self.current_op)[1]
        num_inputs = len(inputs)

        # get either input data, or socket default
        input_one = inputs[0].sv_get(deepcopy=False)

        level = levelsOflist(input_one) - 1
        if num_inputs == 1:
            result = recurse_fx(input_one, func, level)
        else:
            input_two = inputs[1].sv_get(deepcopy=False)
            result = recurse_fxy(input_one, input_two, func, level)

        outputs[0].sv_set(result)
Ejemplo n.º 25
0
    def process(self):
        inputs, outputs = self.inputs, self.outputs

        if not outputs[0].is_linked:
            return

        func = func_dict.get(self.current_op)[1]
        num_inputs = len(inputs)

        # get either input data, or socket default
        input_one = inputs[0].sv_get(deepcopy=False)
        
        level = levelsOflist(input_one) - 1
        if num_inputs == 1:
            result = recurse_fx(input_one, func, level)
        else:
            input_two = inputs[1].sv_get(deepcopy=False)
            result = recurse_fxy(input_one, input_two, func, level)

        outputs[0].sv_set(result)
Ejemplo n.º 26
0
    def prep_text(self, context, node, inputs):
        'main preparation function for text'
        # outputs
        outs = ''
        for insert in inputs:
            if insert.is_linked:
                label = insert.other.node.label
                if label:
                    label = '; node ' + label.upper()
                name = insert.name.upper()
                # vertices socket
                if insert.other.bl_idname == 'VerticesSocket':
                    itype = '\n\nSocket ' + name + label + '; type VERTICES: \n'

                # edges/faces socket
                elif insert.other.bl_idname == 'StringsSocket':
                    itype = '\n\nSocket ' + name + label + '; type EDGES/POLYGONS/OTHERS: \n'

                # matrix socket
                elif insert.other.bl_idname == 'MatrixSocket':
                    itype = '\n\nSocket ' + name + label + '; type MATRICES: \n'

                # object socket
                elif insert.other.bl_idname == 'SvObjectSocket':
                    itype = '\n\nSocket ' + name + label + '; type OBJECTS: \n'
                # else
                else:
                    itype = '\n\nSocket ' + name + label + '; type DATA: \n'

                eva = insert.sv_get()
                deptl = levelsOflist(eva)
                if deptl and deptl > 2:
                    a = self.readFORviewer_sockets_data(eva, deptl, len(eva))
                elif deptl:
                    a = self.readFORviewer_sockets_data_small(
                        eva, deptl, len(eva))
                else:
                    a = 'None'
                outs += itype + str(a) + '\n'
        self.do_text(outs, node)
Ejemplo n.º 27
0
 def process(self):
     if 'First' in self.outputs and self.outputs['First'].is_linked or \
             'Last' in self.outputs and self.outputs['Last'].is_linked or \
             'Middl' in self.outputs and self.outputs['Middl'].is_linked:
         data = SvGetSocketAnyType(self, self.inputs['Data'])
         
         # blocking too height values of levels, reduce
         levels = levelsOflist(data)-2
         if levels >= self.level:
             levels = self.level-1
         elif levels < 1:
             levels = 1
         # assign out
         if self.outputs['First'].is_linked:
             out = self.count(data, levels, 0)
             SvSetSocketAnyType(self, 'First', out)
         if self.outputs['Middl'].is_linked:
             out = self.count(data, levels, 1)
             SvSetSocketAnyType(self, 'Middl', out)
         if self.outputs['Last'].is_linked:
             out = self.count(data, levels, 2)
             SvSetSocketAnyType(self, 'Last', out)
Ejemplo n.º 28
0
    def process(self):
        if 'First' in self.outputs and self.outputs['First'].is_linked or \
                'Last' in self.outputs and self.outputs['Last'].is_linked or \
                'Middl' in self.outputs and self.outputs['Middl'].is_linked:
            data = SvGetSocketAnyType(self, self.inputs['Data'])

            # blocking too height values of levels, reduce
            levels = levelsOflist(data) - 2
            if levels >= self.level:
                levels = self.level - 1
            elif levels < 1:
                levels = 1
            # assign out
            if self.outputs['First'].is_linked:
                out = self.count(data, levels, 0)
                SvSetSocketAnyType(self, 'First', out)
            if self.outputs['Middl'].is_linked:
                out = self.count(data, levels, 1)
                SvSetSocketAnyType(self, 'Middl', out)
            if self.outputs['Last'].is_linked:
                out = self.count(data, levels, 2)
                SvSetSocketAnyType(self, 'Last', out)
Ejemplo n.º 29
0
    def process(self):
        if 'First' in self.outputs and self.outputs['First'].is_linked or \
                'Last' in self.outputs and self.outputs['Last'].is_linked or \
                'Middl' in self.outputs and self.outputs['Middl'].is_linked:
            data = self.inputs['Data'].sv_get(deepcopy=False)

            # blocking too height values of levels, reduce
            levels = levelsOflist(data)-2
            if levels >= self.level:
                levels = self.level-1
            elif levels < 1:
                levels = 1
            # assign out
            if self.outputs['First'].is_linked:
                out = self.count(data, levels, 0)
                self.outputs['First'].sv_set(out)
            if self.outputs['Middl'].is_linked:
                out = self.count(data, levels, 1)
                self.outputs['Middl'].sv_set(out)
            if self.outputs['Last'].is_linked:
                out = self.count(data, levels, 2)
                self.ouputs['Last'].sv_set(out)
Ejemplo n.º 30
0
    def execute(self, context):
        inputs = bpy.data.node_groups[self.treename].nodes[self.nodename].inputs

        # vertices socket
        out_verts = 'None \n'
        if inputs['vertices'].is_linked:
            if inputs['vertices'].other.bl_idname == 'VerticesSocket':
                evaverti = inputs['vertices'].sv_get()

                deptl = levelsOflist(evaverti)
                if deptl and deptl > 2:
                    a = self.readFORviewer_sockets_data(evaverti, deptl, len(evaverti))
                elif deptl:
                    a = self.readFORviewer_sockets_data_small(evaverti, deptl, len(evaverti))
                else:
                    a = 'None \n'
                out_verts = a

        # edges/faces socket
        out_edgpol = 'None \n'
        edpotype = '\n\ndata \n'
        if inputs['edg_pol'].is_linked:
            if inputs['edg_pol'].other.bl_idname == 'StringsSocket':
                evaline_str = inputs['edg_pol'].sv_get()

                if evaline_str:
                    edpotype = self.edgDef(evaline_str)

                deptl = levelsOflist(evaline_str)
                if deptl and deptl > 2:
                    b = self.readFORviewer_sockets_data(evaline_str, deptl, len(evaline_str))
                elif deptl:
                    b = self.readFORviewer_sockets_data_small(evaline_str, deptl, len(evaline_str))
                else:
                    b = 'None \n'
                out_edgpol = str(b)

        # matrix socket
        out_matrix = 'None \n'
        if inputs['matrix'].is_linked:
            if inputs['matrix'].other.bl_idname == 'MatrixSocket':
                eva = inputs['matrix'].sv_get()

                deptl = levelsOflist(eva)
                if deptl and deptl > 2:
                    c = self.readFORviewer_sockets_data(eva, deptl, len(eva))
                elif deptl:
                    c = self.readFORviewer_sockets_data_small(eva, deptl, len(eva))
                else:
                    c = 'None \n'
                out_matrix = str(c)

        # object socket
        out_object = 'None \n'
        if inputs['object'].is_linked:
            if inputs['object'].other.bl_idname == 'SvObjectSocket':
                eva = inputs['object'].sv_get()

                deptl = levelsOflist(eva)
                if deptl and deptl > 2:
                    d = self.readFORviewer_sockets_data(eva, deptl, len(eva))
                elif deptl:
                    d = self.readFORviewer_sockets_data_small(eva, deptl, len(eva))
                else:
                    d = 'None \n'
                out_object = str(d)

        self.do_text(out_verts, out_edgpol, out_matrix, edpotype, out_object)
        return {'FINISHED'}
Ejemplo n.º 31
0
    def execute(self, context):
        inputs = bpy.data.node_groups[self.treename].nodes[
            self.nodename].inputs

        # vertices socket
        out_verts = 'None \n'
        if inputs['vertices'].links:
            if type(inputs['vertices'].links[0].from_socket
                    ) == bpy.types.VerticesSocket:
                evaverti = inputs['vertices'].sv_get()

                deptl = levelsOflist(evaverti)
                if deptl and deptl > 2:
                    a = self.readFORviewer_sockets_data(
                        evaverti, deptl, len(evaverti))
                elif deptl:
                    a = self.readFORviewer_sockets_data_small(
                        evaverti, deptl, len(evaverti))
                else:
                    a = 'None \n'
                out_verts = a

        # edges/faces socket
        out_edgpol = 'None \n'
        edpotype = '\n\ndata \n'
        if inputs['edg_pol'].links:
            if type(inputs['edg_pol'].links[0].from_socket
                    ) == bpy.types.StringsSocket:
                evaline_str = inputs['edg_pol'].sv_get()

                if evaline_str:
                    edpotype = self.edgDef(evaline_str)

                deptl = levelsOflist(evaline_str)
                if deptl and deptl > 2:
                    b = self.readFORviewer_sockets_data(
                        evaline_str, deptl, len(evaline_str))
                elif deptl:
                    b = self.readFORviewer_sockets_data_small(
                        evaline_str, deptl, len(evaline_str))
                else:
                    b = 'None \n'
                out_edgpol = str(b)

        # matrix socket
        out_matrix = 'None \n'
        if inputs['matrix'].links:
            if type(inputs['matrix'].links[0].from_socket
                    ) == bpy.types.MatrixSocket:
                eva = inputs['matrix'].sv_get()

                deptl = levelsOflist(eva)
                if deptl and deptl > 2:
                    c = self.readFORviewer_sockets_data(eva, deptl, len(eva))
                elif deptl:
                    c = self.readFORviewer_sockets_data_small(
                        eva, deptl, len(eva))
                else:
                    c = 'None \n'
                out_matrix = str(c)

        # object socket
        out_object = 'None \n'
        if inputs['object'].links:
            if type(inputs['object'].links[0].from_socket
                    ) == bpy.types.SvObjectSocket:
                eva = inputs['object'].sv_get()

                deptl = levelsOflist(eva)
                if deptl and deptl > 2:
                    d = self.readFORviewer_sockets_data(eva, deptl, len(eva))
                elif deptl:
                    d = self.readFORviewer_sockets_data_small(
                        eva, deptl, len(eva))
                else:
                    d = 'None \n'
                out_object = str(d)

        self.do_text(out_verts, out_edgpol, out_matrix, edpotype, out_object)
        return {'FINISHED'}
 def process(self):
     vers = self.inputs['vers'].sv_get()
     # Process data
     levs = levelsOflist(vers)
     result = self.remdou(vers, levs)
     self.outputs[0].sv_set(result)
Ejemplo n.º 33
0
    def process(self):
        inputs = self.inputs
        outputs = self.outputs
        operation = self.items_
        self.label = self.items_

        if not outputs[0].is_linked:
            return

        # this input is shared over both.
        vector1 = []
        if inputs['U'].is_linked:
            if isinstance(inputs['U'].links[0].from_socket, VerticesSocket):
                vector1 = SvGetSocketAnyType(self, inputs['U'], deepcopy=False)

        if not vector1:
            return

        # reaches here only if we have vector1
        u = vector1
        leve = levelsOflist(u)
        scalars = ["SCALAR", "1/SCALAR", "ROUND"]
        result = []

        # vector-output
        if 'W' in outputs and outputs['W'].is_linked:

            func = vector_out[operation][0]
            if len(inputs) == 1:
                try:
                    result = self.recurse_fx(u, func, leve - 1)
                except:
                    print('one input only, failed')
                    return

            elif len(inputs) == 2:
                '''
                get second input sockets content, depending on mode
                '''
                b = []
                if operation in scalars:
                    socket = ['S', StringsSocket]
                    msg = "two inputs, 1 scalar, "
                else:
                    socket = ['V', VerticesSocket]
                    msg = "two inputs, both vector, "

                name, _type = socket
                if name in inputs and inputs[name].links:
                    if isinstance(inputs[name].links[0].from_socket, _type):
                        b = SvGetSocketAnyType(self,
                                               inputs[name],
                                               deepcopy=False)

                # this means one of the necessary sockets is not connected
                if not b:
                    return

                try:
                    result = self.recurse_fxy(u, b, func, leve - 1)
                except:
                    print(self.name, msg, 'failed')
                    return

            else:
                return  # fail!

            SvSetSocketAnyType(self, 'W', result)

        # scalar-output
        if 'out' in outputs and outputs['out'].is_linked:

            vector2, result = [], []
            func = scalar_out[operation][0]
            num_inputs = len(inputs)

            try:
                if num_inputs == 1:
                    result = self.recurse_fx(u, func, leve - 1)

                elif all(
                    [num_inputs == 2, ('V' in inputs), (inputs['V'].links)]):

                    if isinstance(inputs['V'].links[0].from_socket,
                                  VerticesSocket):
                        vector2 = SvGetSocketAnyType(self,
                                                     inputs['V'],
                                                     deepcopy=False)
                        result = self.recurse_fxy(u, vector2, func, leve - 1)
                    else:
                        print('socket connected to V is not a vertices socket')
                else:
                    return

            except:
                print('failed scalar out, {} inputs'.format(num_inputs))
                return

            if result:
                SvSetSocketAnyType(self, 'out', result)
Ejemplo n.º 34
0
    def process(self):
        inputs = self.inputs
        outputs = self.outputs
        operation = self.items_
        self.label = self.items_

        if not outputs[0].is_linked:
            return

        # this input is shared over both.
        vector1 = []
        if inputs['U'].is_linked:
            if isinstance(inputs['U'].links[0].from_socket, VerticesSocket):
                vector1 = SvGetSocketAnyType(self, inputs['U'], deepcopy=False)

        if not vector1:
            return

        # reaches here only if we have vector1
        u = vector1
        leve = levelsOflist(u)
        scalars = ["SCALAR", "1/SCALAR", "ROUND"]
        result = []

        # vector-output
        if 'W' in outputs and outputs['W'].is_linked:

            func = vector_out[operation][0]
            if len(inputs) == 1:
                try:
                    result = self.recurse_fx(u, func, leve - 1)
                except:
                    print('one input only, failed')
                    return

            elif len(inputs) == 2:

                '''
                get second input sockets content, depending on mode
                '''
                b = []
                if operation in scalars:
                    socket = ['S', StringsSocket]
                    msg = "two inputs, 1 scalar, "
                else:
                    socket = ['V', VerticesSocket]
                    msg = "two inputs, both vector, "

                name, _type = socket
                if name in inputs and inputs[name].links:
                    if isinstance(inputs[name].links[0].from_socket, _type):
                        b = SvGetSocketAnyType(self, inputs[name], deepcopy=False)

                # this means one of the necessary sockets is not connected
                if not b:
                    return

                try:
                    result = self.recurse_fxy(u, b, func, leve - 1)
                except:
                    print(self.name, msg, 'failed')
                    return

            else:
                return  # fail!

            SvSetSocketAnyType(self, 'W', result)

        # scalar-output
        if 'out' in outputs and outputs['out'].is_linked:

            vector2, result = [], []
            func = scalar_out[operation][0]
            num_inputs = len(inputs)

            try:
                if num_inputs == 1:
                    result = self.recurse_fx(u, func, leve - 1)

                elif all([num_inputs == 2, ('V' in inputs), (inputs['V'].links)]):

                    if isinstance(inputs['V'].links[0].from_socket, VerticesSocket):
                        vector2 = SvGetSocketAnyType(self, inputs['V'], deepcopy=False)
                        result = self.recurse_fxy(u, vector2, func, leve - 1)
                    else:
                        print('socket connected to V is not a vertices socket')
                else:
                    return

            except:
                print('failed scalar out, {} inputs'.format(num_inputs))
                return

            if result:
                SvSetSocketAnyType(self, 'out', result)