Exemplo n.º 1
0
    def update(self):
        if self.inputs['Data'].links:
            # адаптивный сокет
            inputsocketname = 'Data'
            outputsocketname = ["Middl", 'First', 'Last']
            changable_sockets(self, inputsocketname, outputsocketname)

        if 'First' in self.outputs and self.outputs['First'].links or \
                'Last' in self.outputs and self.outputs['Last'].links or \
                'Middl' in self.outputs and self.outputs['Middl'].links:
            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'].links:
                out = self.count(data, levels, 0)
                SvSetSocketAnyType(self, 'First', out)
            if self.outputs['Middl'].links:
                out = self.count(data, levels, 1)
                SvSetSocketAnyType(self, 'Middl', out)
            if self.outputs['Last'].links:
                out = self.count(data, levels, 2)
                SvSetSocketAnyType(self, 'Last', out)
Exemplo n.º 2
0
    def update(self):
        if 'data' in self.inputs and self.inputs['data'].links:
            # get any type socket from input:
            data = SvGetSocketAnyType(self, self.inputs['data'])

            # Process data
            leve = min((levelsOflist(data) - 2), self.level)
            result = self.beat(data, leve, leve)

            # multisocket - from util(formula node)
            multi_socket(self, min=1, start=2, breck=True, output=len(result))

            # adaptive socket - from util(mask list node)
            # list to pack and change type of multysockets in output... maybe not so quick
            outputsocketname = [name.name for name in self.outputs]
            changable_sockets(self, 'data', outputsocketname)
            self.multi_socket_type = get_socket_type_full(self, 'data')

            # how to assign correct property to adaptive output:
            # in nearest future with socket's data' dictionary we will send
            # only node_name+layout_name+socket_name in str() format
            # and will make separate definition to easyly assign and
            # get and recognise data from dictionary
            for i, out in enumerate(result):
                SvSetSocket(self.outputs[i], out)
                if i >= 32: break
Exemplo n.º 3
0
    def update(self):
        if 'data' in self.inputs and self.inputs['data'].links:
            # get any type socket from input:
            data = SvGetSocketAnyType(self, self.inputs['data'])

            # Process data
            leve = min((levelsOflist(data)-2), self.level)
            result = self.beat(data, leve, leve)

            # multisocket - from util(formula node)
            multi_socket(self, min=1, start=2, breck=True, output=len(result))

            # adaptive socket - from util(mask list node)
            # list to pack and change type of multysockets in output... maybe not so quick
            outputsocketname = [name.name for name in self.outputs]
            changable_sockets(self, 'data', outputsocketname)
            self.multi_socket_type = get_socket_type_full(self, 'data')

            # how to assign correct property to adaptive output:
            # in nearest future with socket's data' dictionary we will send
            # only node_name+layout_name+socket_name in str() format
            # and will make separate definition to easyly assign and
            # get and recognise data from dictionary
            for i, out in enumerate(result):
                SvSetSocket(self.outputs[i], out)
                if i >= 32: break
Exemplo n.º 4
0
    def update(self):
        # inputs
        multi_socket(self, min=2, start=-1, breck=True)

        if 'X' in self.inputs and len(self.inputs['X'].links) > 0:
            # адаптивный сокет
            inputsocketname = 'X'
            outputsocketname = ['Result']
            changable_sockets(self, inputsocketname, outputsocketname)
            vecs = SvGetSocketAnyType(self, self.inputs['X'])
        else:
            vecs = [[0.0]]

        # outputs
        if 'Result' in self.outputs and len(self.outputs['Result'].links) > 0:
            list_mult = []
            if 'n[0]' in self.inputs and len(self.inputs['n[0]'].links) > 0:
                i = 0
                for socket in self.inputs:
                    if socket.links and i != 0:
                        list_mult.append(SvGetSocketAnyType(self, socket))
                    else:
                        i = 1
                #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)
Exemplo n.º 5
0
    def update(self):
        # inputs
        multi_socket(self, min=2, start=-1, breck=True)

        if 'X' in self.inputs and len(self.inputs['X'].links) > 0:
            # адаптивный сокет
            inputsocketname = 'X'
            outputsocketname = ['Result']
            changable_sockets(self, inputsocketname, outputsocketname)
            vecs = SvGetSocketAnyType(self, self.inputs['X'])
        else:
            vecs = [[0.0]]

        # outputs
        if 'Result' in self.outputs and len(self.outputs['Result'].links) > 0:
            list_mult = []
            if 'n[0]' in self.inputs and len(self.inputs['n[0]'].links) > 0:
                i = 0
                for socket in self.inputs:
                    if socket.links and i != 0:
                        list_mult.append(SvGetSocketAnyType(self, socket))
                    else:
                        i = 1
                #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)
Exemplo n.º 6
0
    def update(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)
Exemplo n.º 7
0
    def update(self):
        # inputs
        multi_socket(self, min=1)

        if 'vertices' in self.outputs and self.outputs['vertices'].links or \
                'data' in self.outputs and self.outputs['data'].links:
            slots = []
            for socket in self.inputs:
                if socket.links and type(socket.links[0].from_socket) == VerticesSocket:
                    slots.append(SvGetSocketAnyType(self, socket))
            if len(slots) == 0:
                return
            if levelsOflist(slots) <= 4:
                lev = 1
            else:
                lev = self.JoinLevel
            result = self.connect(slots, self.dir_check, self.cicl_check, lev, self.polygons, self.slice_check)

            if self.outputs['vertices'].links:
                SvSetSocketAnyType(self, 'vertices', result[0])
            if self.outputs['data'].links:
                SvSetSocketAnyType(self, 'data', result[1])
Exemplo n.º 8
0
    def update(self):
        inputs = self.inputs
        outputs = self.outputs
        operation = self.items_
        self.label = self.items_

        if self.nothing_to_process():
            return

        # this input is shared over both.
        vector1 = []
        if 'U' in inputs and inputs['U'].links:
            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'].links:

            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'].links:

            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)
Exemplo n.º 9
0
    def update(self):
        # vertices socket

        global cache_viewer_slot1
        global cache_viewer_slot2
        global cache_viewer_slot3
        if 'vertices' in self.inputs and 'edg_pol' in self.inputs and 'matrix' in self.inputs:
            if self.inputs['vertices'].links:

                if type(self.inputs['vertices'].links[0].from_socket
                        ) == bpy.types.VerticesSocket:
                    evaverti = SvGetSocketAnyType(self,
                                                  self.inputs['vertices'])
                    #evaverti = eval(verti)
                    deptl = levelsOflist(evaverti)
                    #print(str(evaverti))
                    #print (deptl, ' text viewer')
                    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'
                    cache_viewer_slot1['veriable' + self.name] = a
                    #print ('viewer text input1')
            else:
                cache_viewer_slot1['veriable' + self.name] = 'None \n'
            # edges/faces socket
            if self.inputs['edg_pol'].links:

                if type(self.inputs['edg_pol'].links[0].from_socket
                        ) == bpy.types.StringsSocket:
                    evaline_str = SvGetSocketAnyType(self,
                                                     self.inputs['edg_pol'])
                    #print (line_str)

                    if evaline_str:
                        cache_viewer_slot2['type' + self.name] = str(
                            self.edgDef(evaline_str))
                    deptl = levelsOflist(evaline_str)
                    #print(str(evaline_str))
                    #print (deptl, ' text viewer')
                    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'
                    cache_viewer_slot2['veriable' + self.name] = str(b)
                    #print ('viewer text input2')
            else:
                cache_viewer_slot2['veriable' + self.name] = 'None \n'
                cache_viewer_slot2['type' + self.name] = '\n\ndata \n'
            # matrix socket
            if self.inputs['matrix'].links:

                if type(self.inputs['matrix'].links[0].from_socket
                        ) == bpy.types.MatrixSocket:
                    eva = SvGetSocketAnyType(self, self.inputs['matrix'])
                    deptl = levelsOflist(eva)
                    #print (deptl, ' text viewer')
                    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'
                    cache_viewer_slot3['veriable' + self.name] = str(c)
                    #print ('viewer text input3')
            else:
                cache_viewer_slot3['veriable' + self.name] = 'None \n'

            if self.inputs['matrix'].links or self.inputs['vertices'].links or \
                        self.inputs['edg_pol'].links:
                self.use_custom_color = True
                self.color = (0.5, 0.5, 1)
            else:
                self.use_custom_color = True
                self.color = (0.05, 0.05, 0.1)
Exemplo n.º 10
0
    def update(self):
        inputs = self.inputs
        outputs = self.outputs
        operation = self.items_
        self.label = self.items_

        if self.nothing_to_process():
            return

        # this input is shared over both.
        vector1 = []
        if 'U' in inputs and inputs['U'].links:
            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'].links:

            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'].links:

            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)
Exemplo n.º 11
0
    def update(self):
        # vertices socket

        global cache_viewer_slot1
        global cache_viewer_slot2
        global cache_viewer_slot3
        if 'vertices' in self.inputs and 'edg_pol' in self.inputs and 'matrix' in self.inputs:
            if self.inputs['vertices'].links:

                if type(self.inputs['vertices'].links[0].from_socket) == bpy.types.VerticesSocket:
                    evaverti = SvGetSocketAnyType(self, self.inputs['vertices'])
                    #evaverti = eval(verti)
                    deptl = levelsOflist(evaverti)
                    #print(str(evaverti))
                    #print (deptl, ' text viewer')
                    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'
                    cache_viewer_slot1['veriable'+self.name] = a
                    #print ('viewer text input1')
            else:
                cache_viewer_slot1['veriable'+self.name] = 'None \n'
            # edges/faces socket
            if self.inputs['edg_pol'].links:

                if type(self.inputs['edg_pol'].links[0].from_socket) == bpy.types.StringsSocket:
                    evaline_str = SvGetSocketAnyType(self, self.inputs['edg_pol'])
                    #print (line_str)

                    if evaline_str:
                        cache_viewer_slot2['type'+self.name] = str(self.edgDef(evaline_str))
                    deptl = levelsOflist(evaline_str)
                    #print(str(evaline_str))
                    #print (deptl, ' text viewer')
                    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'
                    cache_viewer_slot2['veriable'+self.name] = str(b)
                    #print ('viewer text input2')
            else:
                cache_viewer_slot2['veriable'+self.name] = 'None \n'
                cache_viewer_slot2['type'+self.name] = '\n\ndata \n'
            # matrix socket
            if self.inputs['matrix'].links:

                if type(self.inputs['matrix'].links[0].from_socket) == bpy.types.MatrixSocket:
                    eva = SvGetSocketAnyType(self, self.inputs['matrix'])
                    deptl = levelsOflist(eva)
                    #print (deptl, ' text viewer')
                    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'
                    cache_viewer_slot3['veriable'+self.name] = str(c)
                    #print ('viewer text input3')
            else:
                cache_viewer_slot3['veriable'+self.name] = 'None \n'

            if self.inputs['matrix'].links or self.inputs['vertices'].links or \
                        self.inputs['edg_pol'].links:
                self.use_custom_color = True
                self.color = (0.5, 0.5, 1)
            else:
                self.use_custom_color = True
                self.color = (0.05, 0.05, 0.1)
Exemplo n.º 12
0
    def connect(self, vers, dirn, cicl, clev, polygons, slice):
        vers_ = []
        lens = []

        # for joinvers to one object
        def joinvers(ver):
            joinvers = []
            for ob in ver:
                fullList(list(ob), ml)
                joinvers.extend(ob)
            return joinvers
        # we will take common case of nestiness, it is not flatten as correctData is,
        # but pick in upper level bottom level of data. could be automated in future
        # to check for levelsOflist() and correct in recursion
        lol = levelsOflist(vers)
        # print(lol)
        if lol == 4: # was clev - manually defined, but it is wrong way
            for ob in vers:
                for o in ob:
                    vers_.append(o)
                    lens.append(len(o))
        elif lol == 5:
            for ob in vers:
                for o in ob:
                    for v in o:
                        vers_.append(v)
                        lens.append(len(v))
        else:
            print('wrong level in UV connect')
        lenvers = len(vers_)
        #print(lenvers, lens)
        edges = []
        ml = max(lens)
        if dirn == 'U_dir':
            if polygons:

                # joinvers to implement
                length_ob = []
                newobject = []
                for k, ob in enumerate(vers_):
                    length_ob.append(len(ob))
                    newobject.extend(ob)
                # joinvers to implement

                curr = 0
                objecto = []
                indexes__ = []
                if slice:
                    indexes__ = [[j*ml+i for j in range(lenvers)] for i in range(ml)]
                    objecto = [a for a in zip(*indexes__)]
                else:
                    for i, ob in enumerate(length_ob):
                        indexes_ = []
                        for w in range(ob):
                            indexes_.append(curr)
                            curr += 1
                        if i == 0 and cicl:
                            cicle_firstrow = indexes_
                        if i > 0:
                            indexes = indexes_ + indexes__[::-1]
                            quaded = [(indexes[k], indexes[k+1], indexes[-(k+2)], indexes[-(k+1)])
                                      for k in range((len(indexes)-1)//2)]
                            objecto.extend(quaded)
                            if i == len(length_ob)-1 and cicl:
                                indexes = cicle_firstrow + indexes_[::-1]
                                quaded = [(indexes[k], indexes[k+1], indexes[-(k+2)], indexes[-(k+1)])
                                          for k in range((len(indexes)-1)//2)]
                                objecto.extend(quaded)
                        indexes__ = indexes_
                vers_ = [newobject]
                edges = [objecto]
            elif not polygons:
                for k, ob in enumerate(vers_):
                    objecto = []
                    for i, ve in enumerate(ob[:-1]):
                        objecto.append([i, i+1])
                    if cicl:
                        objecto.append([0, len(ob)-1])
                    edges.append(objecto)

        # not direction:
        elif dirn == 'V_dir':
            objecto = []
            # it making not direction order, but one-edged polygon instead of two rows
            # to remake - yet one flag that operates slicing. because the next is slicing,
            # not direction for polygons
            if polygons:
                if slice:
                    joinvers = joinvers(vers_)
                    for i, ve in enumerate(vers_[0][:]):
                        inds = [j*ml+i for j in range(lenvers)]
                        objecto.append(inds)
                else:
                    # flip matrix transpose:
                    vers_flip = [a for a in zip(*vers_)]
                    vers_ = vers_flip
                    # flip matrix transpose:

                    joinvers = joinvers(vers_)
                    for i, ob in enumerate(vers_[:-1]):
                        for k, ve in enumerate(ob[:-1]):
                            objecto.append([i*lenvers+k, (i+1)*lenvers+k, (i+1)*lenvers+k+1, i*lenvers+k+1])
                            if i == 0 and cicl:
                                objecto.append([k+1, (ml-1)*lenvers+k+1, (ml-1)*lenvers+k, k])
            elif not polygons:
                joinvers = joinvers(vers_)
                for i, ve in enumerate(vers_[0][:]):
                    inds = [j*ml+i for j in range(lenvers)]
                    for i, item in enumerate(inds):
                        if i == 0 and cicl:
                            objecto.append([inds[0], inds[-1]])
                        elif i == 0:
                            continue
                        else:
                            objecto.append([item, inds[i-1]])
            edges.append(objecto)
            vers_ = [joinvers]
        return vers_, edges