예제 #1
0
 def init(self, context):
     n_id = node_id(self)
     self.width = 400
     self.color = (0.5, 0.5, 1)
     self.use_custom_color = True
     self.inputs.new('StringsSocket', "Text In", "Text In")
     self.outputs.new('StringsSocket', "Text Out", "Text Out")
예제 #2
0
 def free(self):
     global cache_viewer_baker
     n_id = node_id(self)
     callback_disable(n_id)
     cache_viewer_baker.pop(n_id+'v', None)
     cache_viewer_baker.pop(n_id+'ep', None)
     cache_viewer_baker.pop(n_id+'m', None)
예제 #3
0
 def free(self):
     global cache_viewer_baker
     n_id = node_id(self)
     callback_disable(n_id)
     cache_viewer_baker.pop(n_id + 'v', None)
     cache_viewer_baker.pop(n_id + 'ep', None)
     cache_viewer_baker.pop(n_id + 'm', None)
예제 #4
0
    def update(self):
        inputs = self.inputs
        n_id = node_id(self)

        # end early
        nvBGL.callback_disable(n_id)
        if not all([inputs[0], self.id_data.sv_show]):
            return

        in_links = inputs[0].links

        self.use_custom_color = True
        if self.activate and in_links:

            # gather vertices from input
            lines = nvBGL.parse_socket(inputs[0])

            draw_data = {
                'tree_name': self.id_data.name[:],
                'content': lines,
                'location': (self.location + Vector((self.width + 20, 0)))[:],
                'color': self.text_color[:],
            }
            nvBGL.callback_enable(n_id, draw_data)
            self.color = READY_COLOR
        else:
            self.color = FAIL_COLOR
            return
예제 #5
0
 def reset(self):
     n_id = node_id(self)
     self.outputs.clear()
     self.current_text = ''
     self.csv_data.pop(n_id, None)
     self.list_data.pop(n_id, None)
     self.json_data.pop(n_id, None)
예제 #6
0
    def update(self):
        inputs = self.inputs
        n_id = node_id(self)

        # end early
        nvBGL.callback_disable(n_id)
        if not all([inputs[0], self.id_data.sv_show]):
            return

        in_links = inputs[0].links

        self.use_custom_color = True
        if self.activate and in_links:

            # gather vertices from input
            lines = nvBGL.parse_socket(inputs[0])

            draw_data = {
                'tree_name': self.id_data.name[:],
                'content': lines,
                'location': (self.location + Vector((self.width+20, 0)))[:],
                'color': self.text_color[:],
                }
            nvBGL.callback_enable(n_id, draw_data)
            self.color = READY_COLOR
        else:
            self.color = FAIL_COLOR
            return
예제 #7
0
 def reset(self):
     n_id = node_id(self)
     self.outputs.clear()
     self.current_text = ''
     self.csv_data.pop(n_id, None)
     self.list_data.pop(n_id, None)
     self.json_data.pop(n_id, None)
예제 #8
0
 def load_csv(self):
     n_id = node_id(self)
     self.load_csv_data()
     if not n_id in self.csv_data:
         print("Error, no data loaded")
     else:
         for name in self.csv_data[n_id]:
             self.outputs.new('StringsSocket', name, name)
예제 #9
0
 def load_csv(self):
     n_id = node_id(self)
     self.load_csv_data()
     if not n_id in self.csv_data:
         print("Error, no data loaded")
     else:
         for name in self.csv_data[n_id]:
             self.outputs.new('StringsSocket', name, name)
예제 #10
0
    def load_sv(self):
        n_id = node_id(self)

        self.load_sv_data()

        if n_id in self.list_data:
            name_dict = {'m': 'Matrix', 's': 'Data', 'v': 'Vertices'}
            typ = self.socket_type
            new_output_socket(self, name_dict[typ], typ)
예제 #11
0
    def load_sv(self):
        n_id = node_id(self)

        self.load_sv_data()

        if n_id in self.list_data:
            name_dict = {'m': 'Matrix', 's': 'Data', 'v': 'Vertices'}
            typ = self.socket_type
            new_output_socket(self, name_dict[typ], typ)
예제 #12
0
    def update(self):
        if 'matrix' not in self.inputs:
            return

        if not (self.id_data.sv_show and self.activate):
            callback_disable(node_id(self))
            return

        self.process()
예제 #13
0
    def update(self):
        if 'matrix' not in self.inputs:
            return

        if not (self.id_data.sv_show and self.activate):
            callback_disable(node_id(self))
            return

        self.process()
예제 #14
0
파일: viewer.py 프로젝트: unity2k/sverchok
    def update(self):
        global cache_viewer_baker
        # node id, used as ref
        n_id = node_id(self)
        if 'matrix' not in self.inputs:
            return

        cache_viewer_baker[n_id+'v'] = []
        cache_viewer_baker[n_id+'ep'] = []
        cache_viewer_baker[n_id+'m'] = []

        if not self.id_data.sv_show:
            callback_disable(n_id)
            return

        if self.activate and (self.inputs['vertices'].links or self.inputs['matrix'].links):
            callback_disable(n_id)

            if self.inputs['vertices'].links and \
                type(self.inputs['vertices'].links[0].from_socket) == VerticesSocket:

                propv = SvGetSocketAnyType(self, self.inputs['vertices'])
                cache_viewer_baker[n_id+'v'] = dataCorrect(propv)
            else:
                cache_viewer_baker[n_id+'v'] = []

            if self.inputs['edg_pol'].links and \
                type(self.inputs['edg_pol'].links[0].from_socket) == StringsSocket:
                prope = SvGetSocketAnyType(self, self.inputs['edg_pol'])
                cache_viewer_baker[n_id+'ep'] = dataCorrect(prope)
                #print (prope)
            else:
                cache_viewer_baker[n_id+'ep'] = []

            if self.inputs['matrix'].links and \
                type(self.inputs['matrix'].links[0].from_socket) == MatrixSocket:
                propm = SvGetSocketAnyType(self, self.inputs['matrix'])
                cache_viewer_baker[n_id+'m'] = dataCorrect(propm)
            else:
                cache_viewer_baker[n_id+'m'] = []

        else:
            callback_disable(n_id)

        if cache_viewer_baker[n_id+'v'] or cache_viewer_baker[n_id+'m']:
            callback_enable(n_id, cache_viewer_baker[n_id+'v'], cache_viewer_baker[n_id+'ep'], \
                cache_viewer_baker[n_id+'m'], self.Vertex_show, self.color_view.copy(), self.transparant, self.shading)

            self.use_custom_color = True
            self.color = (1, 0.3, 0)
        else:
            self.use_custom_color = True
            self.color = (0.1, 0.05, 0)
            #print ('отражения вершин ',len(cache_viewer_baker['v']), " рёбёры ", len(cache_viewer_baker['ep']), "матрицы",len(cache_viewer_baker['m']))
        if not self.inputs['vertices'].links and not self.inputs['matrix'].links:
            callback_disable(n_id)
예제 #15
0
    def update(self):
        global cache_viewer_baker
        # node id, used as ref
        n_id = node_id(self)
        if 'matrix' not in self.inputs:
            return

        cache_viewer_baker[n_id+'v'] = []
        cache_viewer_baker[n_id+'ep'] = []
        cache_viewer_baker[n_id+'m'] = []

        if not self.id_data.sv_show:
            callback_disable(n_id)
            return

        if self.activate and (self.inputs['vertices'].links or self.inputs['matrix'].links):
            callback_disable(n_id)

            if self.inputs['vertices'].links and \
                type(self.inputs['vertices'].links[0].from_socket) == VerticesSocket:

                propv = SvGetSocketAnyType(self, self.inputs['vertices'])
                cache_viewer_baker[n_id+'v'] = dataCorrect(propv)
            else:
                cache_viewer_baker[n_id+'v'] = []

            if self.inputs['edg_pol'].links and \
                type(self.inputs['edg_pol'].links[0].from_socket) == StringsSocket:
                prope = SvGetSocketAnyType(self, self.inputs['edg_pol'])
                cache_viewer_baker[n_id+'ep'] = dataCorrect(prope)
                #print (prope)
            else:
                cache_viewer_baker[n_id+'ep'] = []

            if self.inputs['matrix'].links and \
                type(self.inputs['matrix'].links[0].from_socket) == MatrixSocket:
                propm = SvGetSocketAnyType(self, self.inputs['matrix'])
                cache_viewer_baker[n_id+'m'] = dataCorrect(propm)
            else:
                cache_viewer_baker[n_id+'m'] = []

        else:
            callback_disable(n_id)

        if cache_viewer_baker[n_id+'v'] or cache_viewer_baker[n_id+'m']:
            callback_enable(n_id, cache_viewer_baker[n_id+'v'], cache_viewer_baker[n_id+'ep'], \
                cache_viewer_baker[n_id+'m'], self.Vertex_show, self.color_view.copy(), self.transparant, self.shading)

            self.use_custom_color = True
            self.color = (1, 0.3, 0)
        else:
            self.use_custom_color = True
            self.color = (0.1, 0.05, 0)
            #print ('отражения вершин ',len(cache_viewer_baker['v']), " рёбёры ", len(cache_viewer_baker['ep']), "матрицы",len(cache_viewer_baker['m']))
        if not self.inputs['vertices'].links and not self.inputs['matrix'].links:
            callback_disable(n_id)
예제 #16
0
 def create_empty(self):
     n_id = node_id(self)
     scene = bpy.context.scene
     objects = bpy.data.objects
     empty = objects.new(self.empty_name, None)
     scene.objects.link(empty)
     scene.update()
     empty["SVERCHOK_REF"] = n_id
     self.empty_ref_name = empty.name
     return empty
예제 #17
0
 def create_empty(self):
     n_id = node_id(self)
     scene = bpy.context.scene
     objects = bpy.data.objects
     empty = objects.new(self.empty_name, None)
     scene.objects.link(empty)
     scene.update()
     empty["SVERCHOK_REF"] = n_id
     self.empty_ref_name = empty.name
     return empty
예제 #18
0
파일: note.py 프로젝트: beeka5/sverchok
 def update(self):
     n_id = node_id(self)
     if not n_id in self.text_cache:
         self.format_text()
         
     if 'Text' in self.outputs and self.outputs['Text'].links:
         # I'm not sure that this makes sense, but keeping it like 
         # old note right now. Would expect one value, and optional
         # split, or split via a text processing node, 
         # but keeping this for now
         text = [[a] for a in self.text.split()]
         SvSetSocketAnyType(self, 'Text', [text])
예제 #19
0
파일: viewer.py 프로젝트: unity2k/sverchok
 def execute(self, context):
     global cache_viewer_baker
     nid = node_id(bpy.data.node_groups[self.idtree].nodes[self.idname])
     if cache_viewer_baker[nid+'m'] and not cache_viewer_baker[nid+'v']:
         return {'CANCELLED'}
     vers = dataCorrect(cache_viewer_baker[nid+'v'])
     edg_pol = dataCorrect(cache_viewer_baker[nid+'ep'])
     if cache_viewer_baker[nid+'m']:
         matrixes = dataCorrect(cache_viewer_baker[nid+'m'])
     else:
         matrixes = []
         for i in range((len(vers))):
             matrixes.append(Matrix())
     self.makeobjects(vers, edg_pol, matrixes)
     return {'FINISHED'}
예제 #20
0
 def execute(self, context):
     global cache_viewer_baker
     nid = node_id(bpy.data.node_groups[self.idtree].nodes[self.idname])
     if cache_viewer_baker[nid+'m'] and not cache_viewer_baker[nid+'v']:
         return {'CANCELLED'}
     vers = dataCorrect(cache_viewer_baker[nid+'v'])
     edg_pol = dataCorrect(cache_viewer_baker[nid+'ep'])
     if cache_viewer_baker[nid+'m']:
         matrixes = dataCorrect(cache_viewer_baker[nid+'m'])
     else:
         matrixes = []
         for i in range((len(vers))):
             matrixes.append(Matrix())
     self.makeobjects(vers, edg_pol, matrixes)
     return {'FINISHED'}
예제 #21
0
    def load_json(self):
        n_id = node_id(self)
        self.load_json_data()
        json_data = self.json_data.get(n_id, [])
        if not json_data:
            self.current_text = ''
            return

        for item, data in json_data.items():
            if len(data) == 2 and data[0] in {'v', 's', 'm'}:
                new_output_socket(self, item, data[0])
            else:
                self.use_custom_color = True
                self.color = FAIL_COLOR
                return
예제 #22
0
    def update(self):
        if 'Text In' in self.inputs and self.inputs['Text In'].links:
            self.text = str(SvGetSocketAnyType(self,self.inputs['Text In']))

        n_id = node_id(self)
        if not n_id in self.text_cache:
            self.format_text()
            
        if 'Text Out' in self.outputs and self.outputs['Text Out'].links:
            # I'm not sure that this makes sense, but keeping it like 
            # old note right now. Would expect one value, and optional
            # split, or split via a text processing node, 
            # but keeping this for now
            text = [[a] for a in self.text.split()]
            SvSetSocketAnyType(self, 'Text Out', [text])
예제 #23
0
    def load_json(self):
        n_id = node_id(self)
        self.load_json_data()
        json_data = self.json_data.get(n_id, [])
        if not json_data:
            self.current_text = ''
            return

        for item, data in json_data.items():
            if len(data) == 2 and data[0] in {'v', 's', 'm'}:
                new_output_socket(self, item, data[0])
            else:
                self.use_custom_color = True
                self.color = FAIL_COLOR
                return
예제 #24
0
    def process(self):
        n_id = node_id(self)

        global cache_viewer_baker
        vertex_ref = n_id + 'v'
        poledg_ref = n_id + 'ep'
        matrix_ref = n_id + 'm'
        cache_viewer_baker[vertex_ref] = []
        cache_viewer_baker[poledg_ref] = []
        cache_viewer_baker[matrix_ref] = []

        callback_disable(n_id)

        # every time you hit a dot, you pay a price, so alias and benefit
        inputs = self.inputs
        vertex_links = inputs['vertices'].links
        matrix_links = inputs['matrix'].links
        edgepol_links = inputs['edg_pol'].links

        if (vertex_links or matrix_links):

            if vertex_links:
                if isinstance(vertex_links[0].from_socket, VerticesSocket):
                    propv = inputs['vertices'].sv_get()
                    if propv:
                        cache_viewer_baker[vertex_ref] = dataCorrect(propv)

            if edgepol_links:
                if isinstance(edgepol_links[0].from_socket, StringsSocket):
                    prope = inputs['edg_pol'].sv_get()
                    if prope:
                        cache_viewer_baker[poledg_ref] = dataCorrect(prope)

            if matrix_links:
                if isinstance(matrix_links[0].from_socket, MatrixSocket):
                    propm = inputs['matrix'].sv_get()
                    if propm:
                        cache_viewer_baker[matrix_ref] = dataCorrect(propm)

        if cache_viewer_baker[vertex_ref] or cache_viewer_baker[matrix_ref]:
            config_options = self.get_options().copy()
            callback_enable(n_id, cache_viewer_baker, config_options)
            self.color = (1, 1, 1)
        else:
            self.color = (0.7, 0.7, 0.7)
예제 #25
0
    def process(self):
        n_id = node_id(self)

        global cache_viewer_baker
        vertex_ref = n_id + 'v'
        poledg_ref = n_id + 'ep'
        matrix_ref = n_id + 'm'
        cache_viewer_baker[vertex_ref] = []
        cache_viewer_baker[poledg_ref] = []
        cache_viewer_baker[matrix_ref] = []

        callback_disable(n_id)

        # every time you hit a dot, you pay a price, so alias and benefit
        inputs = self.inputs
        vertex_links = inputs['vertices'].links
        matrix_links = inputs['matrix'].links
        edgepol_links = inputs['edg_pol'].links

        if (vertex_links or matrix_links):

            if vertex_links:
                if isinstance(vertex_links[0].from_socket, VerticesSocket):
                    propv = inputs['vertices'].sv_get()
                    if propv:
                        cache_viewer_baker[vertex_ref] = dataCorrect(propv)

            if edgepol_links:
                if isinstance(edgepol_links[0].from_socket, StringsSocket):
                    prope = inputs['edg_pol'].sv_get()
                    if prope:
                        cache_viewer_baker[poledg_ref] = dataCorrect(prope)

            if matrix_links:
                if isinstance(matrix_links[0].from_socket, MatrixSocket):
                    propm = inputs['matrix'].sv_get()
                    if propm:
                        cache_viewer_baker[matrix_ref] = dataCorrect(propm)

        if cache_viewer_baker[vertex_ref] or cache_viewer_baker[matrix_ref]:
            config_options = self.get_options().copy()
            callback_enable(n_id, cache_viewer_baker, config_options)
            self.color = (1, 1, 1)
        else:
            self.color = (0.7, 0.7, 0.7)
예제 #26
0
    def update_sv(self):
        n_id = node_id(self)

        if self.reload_on_update:
            self.reload_sv()
        # nothing loaded, try to load and if it doesn't work fail
        if n_id not in self.list_data and self.current_text:
            self.reload_sv()

        if n_id not in self.list_data:
            self.use_custom_color = True
            self.color = FAIL_COLOR
            return

        # load data into selected socket
        for item in ['Vertices', 'Data', 'Matrix']:
            if item in self.outputs and self.outputs[item].links:
                SvSetSocketAnyType(self, item, self.list_data[n_id])
예제 #27
0
    def update_sv(self):
        n_id = node_id(self)

        if self.reload_on_update:
            self.reload_sv()
        # nothing loaded, try to load and if it doesn't work fail
        if n_id not in self.list_data and self.current_text:
            self.reload_sv()

        if n_id not in self.list_data:
            self.use_custom_color = True
            self.color = FAIL_COLOR
            return

        # load data into selected socket
        for item in ['Vertices', 'Data', 'Matrix']:
            if item in self.outputs and self.outputs[item].links:
                SvSetSocketAnyType(self, item, self.list_data[n_id])
예제 #28
0
    def find_empty(self):
        n_id = node_id(self)

        def check_empty(obj):
            """ Check that it is the correct empty """
            if obj.type == 'EMPTY':
                return "SVERCHOK_REF" in obj and obj["SVERCHOK_REF"] == n_id
            return False

        objects = bpy.data.objects
        if self.empty_ref_name in objects:
            obj = objects[self.empty_ref_name]
            if check_empty(obj):
                return obj
        for obj in objects:
            if check_empty(obj):
                self.empty_ref_name = obj.name
                return obj
        return None
예제 #29
0
    def find_empty(self):
        n_id = node_id(self)

        def check_empty(obj):
            """ Check that it is the correct empty """
            if obj.type == 'EMPTY':
                return "SVERCHOK_REF" in obj and obj["SVERCHOK_REF"] == n_id
            return False

        objects = bpy.data.objects
        if self.empty_ref_name in objects:
            obj = objects[self.empty_ref_name]
            if check_empty(obj):
                return obj
        for obj in objects:
            if check_empty(obj):
                self.empty_ref_name = obj.name
                return obj
        return None
예제 #30
0
    def execute(self, context):
        global cache_viewer_baker

        node_group = bpy.data.node_groups[self.idtree]
        node = node_group.nodes[self.idname]
        nid = node_id(node)

        matrix_cache = cache_viewer_baker[nid + 'm']
        vertex_cache = cache_viewer_baker[nid + 'v']
        edgpol_cache = cache_viewer_baker[nid + 'ep']

        if matrix_cache and not vertex_cache:
            return {'CANCELLED'}

        v = dataCorrect(vertex_cache)
        e = self.dataCorrect3(edgpol_cache)
        m = self.dataCorrect2(matrix_cache, v)
        self.makeobjects(v, e, m)
        return {'FINISHED'}
예제 #31
0
    def execute(self, context):
        global cache_viewer_baker

        node_group = bpy.data.node_groups[self.idtree]
        node = node_group.nodes[self.idname]
        nid = node_id(node)

        matrix_cache = cache_viewer_baker[nid+'m']
        vertex_cache = cache_viewer_baker[nid+'v']
        edgpol_cache = cache_viewer_baker[nid+'ep']

        if matrix_cache and not vertex_cache:
            return {'CANCELLED'}

        v = dataCorrect(vertex_cache)
        e = self.dataCorrect3(edgpol_cache)
        m = self.dataCorrect2(matrix_cache, v)
        self.makeobjects(v, e, m)
        return {'FINISHED'}
예제 #32
0
    def load_json_data(self):
        json_data = {}
        n_id = node_id(self)
        # reset data
        if n_id in self.json_data:
            del self.json_data[n_id]

        f = io.StringIO(bpy.data.texts[self.text].as_string())
        try:
            json_data = json.load(f)
        except:
            print("Failed to load JSON data")

        if not json_data:
            self.use_custom_color = True
            self.color = FAIL_COLOR
            return

        self.current_text = self.text
        self.json_data[n_id] = json_data
예제 #33
0
    def update(self):
        inputs = self.inputs
        n_id = node_id(self)
        IV.callback_disable(n_id)

        # check if UI is populated.
        if not ('text' in inputs):
            return

        # end if tree status is set to not show
        if not self.id_data.sv_show:
            return

        self.use_custom_color = True

        if self.activate and inputs['vertices'].links:
            self.process(n_id, IV)
            self.color = READY_COLOR
        else:
            self.color = FAIL_COLOR
예제 #34
0
    def update(self):
        inputs = self.inputs
        n_id = node_id(self)
        IV.callback_disable(n_id)

        # check if UI is populated.
        if not ('text' in inputs):
            return

        # end if tree status is set to not show
        if not self.id_data.sv_show:
            return

        self.use_custom_color = True

        if self.activate and inputs['vertices'].links:
            self.process(n_id, IV)
            self.color = READY_COLOR
        else:
            self.color = FAIL_COLOR
예제 #35
0
    def load_json_data(self):
        json_data = {}
        n_id = node_id(self)
        # reset data
        if n_id in self.json_data:
            del self.json_data[n_id]

        f = io.StringIO(bpy.data.texts[self.text].as_string())
        try:
            json_data = json.load(f)
        except:
            print("Failed to load JSON data")

        if not json_data:
            self.use_custom_color = True
            self.color = FAIL_COLOR
            return

        self.current_text = self.text
        self.json_data[n_id] = json_data
예제 #36
0
    def load_sv_data(self):
        data = None
        n_id = node_id(self)

        if n_id in self.list_data:
            del self.list_data[n_id]

        f = bpy.data.texts[self.text].as_string()
        # should be able to select external file
        try:
            data = ast.literal_eval(f)
        except:
            pass
        if isinstance(data, list):
            self.list_data[n_id] = data
            self.use_custom_color = True
            self.color = READY_COLOR
            self.current_text = self.text
        else:
            self.use_custom_color = True
            self.color = FAIL_COLOR
예제 #37
0
    def load_sv_data(self):
        data = None
        n_id = node_id(self)

        if n_id in self.list_data:
            del self.list_data[n_id]

        f = bpy.data.texts[self.text].as_string()
        # should be able to select external file
        try:
            data = ast.literal_eval(f)
        except:
            pass
        if isinstance(data, list):
            self.list_data[n_id] = data
            self.use_custom_color = True
            self.color = READY_COLOR
            self.current_text = self.text
        else:
            self.use_custom_color = True
            self.color = FAIL_COLOR
예제 #38
0
    def update_csv(self):
        n_id = node_id(self)

        if self.reload_on_update:
            self.reload_csv()

        if self.current_text and n_id not in self.csv_data:
            self.reload_csv()

            if n_id not in self.csv_data:
                print("CSV auto reload failed, press update")
                self.use_custom_color = True
                self.color = FAIL_COLOR
                return

        self.use_custom_color = True
        self.color = READY_COLOR
        csv_data = self.csv_data[n_id]
        for name in csv_data.keys():
            if name in self.outputs and self.outputs[name].links:
                SvSetSocketAnyType(self, name, [csv_data[name]])
예제 #39
0
    def update_json(self):
        n_id = node_id(self)

        if self.reload_on_update:
            self.reload_csv()

        if n_id not in self.json_data and self.current_text:
            self.reload_json()

        if n_id not in self.json_data:
            self.use_custom_color = True
            self.color = FAIL_COLOR
            return

        self.use_custom_color = True
        self.color = READY_COLOR
        json_data = self.json_data[n_id]
        for item in json_data:
            if item in self.outputs and self.outputs[item].links:
                out = json_data[item][1]
                SvSetSocketAnyType(self, item, out)
예제 #40
0
    def update_json(self):
        n_id = node_id(self)

        if self.reload_on_update:
            self.reload_csv()

        if n_id not in self.json_data and self.current_text:
            self.reload_json()

        if n_id not in self.json_data:
            self.use_custom_color = True
            self.color = FAIL_COLOR
            return

        self.use_custom_color = True
        self.color = READY_COLOR
        json_data = self.json_data[n_id]
        for item in json_data:
            if item in self.outputs and self.outputs[item].links:
                out = json_data[item][1]
                SvSetSocketAnyType(self, item, out)
예제 #41
0
    def update_csv(self):
        n_id = node_id(self)

        if self.reload_on_update:
            self.reload_csv()

        if self.current_text and n_id not in self.csv_data:
            self.reload_csv()

            if n_id not in self.csv_data:
                print("CSV auto reload failed, press update")
                self.use_custom_color = True
                self.color = FAIL_COLOR
                return

        self.use_custom_color = True
        self.color = READY_COLOR
        csv_data = self.csv_data[n_id]
        for name in csv_data.keys():
            if name in self.outputs and self.outputs[name].links:
                SvSetSocketAnyType(self, name, [csv_data[name]])
예제 #42
0
 def _set_script(self, value):
     n_id = node_id(self)
     value.node = self
     self.script_objects[n_id] = value
예제 #43
0
 def init(self, context):
     node_id(self)
     self.color = FAIL_COLOR
예제 #44
0
 def copy(self, node):
     self.n_id = ""
     node_id(self)
예제 #45
0
 def free(self):
     nvBGL.callback_disable(node_id(self))
예제 #46
0
 def format_text(self):
     n_id = node_id(self)
     tl = format_text(self.text, self.width)
     self.text_cache[n_id] = (self.width, tl)
예제 #47
0
 def reload_json(self):
     n_id = node_id(self)
     self.load_json_data()
     if n_id in self.json_data:
         self.use_custom_color = True
         self.color = READY_COLOR
예제 #48
0
 def copy(self, node):
     self.n_id = ''
     node_id(self)
예제 #49
0
 def free(self):
     n_id = node_id(self)
     self.csv_data.pop(n_id, None)
     self.list_data.pop(n_id, None)
     self.json_data.pop(n_id, None)
예제 #50
0
 def free(self):
     nvBGL.callback_disable(node_id(self))
예제 #51
0
 def free(self):
     IV.callback_disable(node_id(self))
예제 #52
0
    def load_csv_data(self):
        n_id = node_id(self)

        csv_data = collections.OrderedDict()

        if n_id in self.csv_data:
            del self.csv_data[n_id]

        f = io.StringIO(bpy.data.texts[self.text].as_string())

        # setup CSV options

        if self.csv_dialect == 'user':
            if self.csv_delimiter == 'CUSTOM':
                d = self.csv_custom_delimiter
            else:
                d = self.csv_delimiter

            reader = csv.reader(f, delimiter=d)
        elif self.csv_dialect == 'semicolon':
            self.csv_decimalmark = ','
            reader = csv.reader(f, delimiter=';')
        else:
            reader = csv.reader(f, dialect=self.csv_dialect)
            self.csv_decimalmark = '.'

        # setup parse decimalmark

        if self.csv_decimalmark == ',':
            get_number = lambda s: float(s.replace(',', '.'))
        elif self.csv_decimalmark == 'LOCALE':
            get_number = lambda s: locale.atof(s)
        elif self.csv_decimalmark == 'CUSTOM':
            if self.csv_custom_decimalmark:
                get_number = lambda s: float(s.replace(self.csv_custom_decimalmark, '.'))
        else:  # . default
            get_number = float

    # load data
        for i, row in enumerate(reader):
            if i == 0:  # setup names
                if self.csv_header:
                    for name in row:
                        tmp = name
                        c = 1
                        while tmp in csv_data:
                            tmp = name+str(c)
                            c += 1
                        csv_data[str(tmp)] = []
                    continue  # first row is names
                else:
                    for j in range(len(row)):
                        csv_data["Col "+str(j)] = []
            # load data

            for j, name in enumerate(csv_data):
                try:
                    n = get_number(row[j])
                    csv_data[name].append(n)
                except (ValueError, IndexError):
                    pass  # discard strings other than first row

        if csv_data:
            # check for actual data otherwise fail.
            if not csv_data[list(csv_data.keys())[0]]:
                return
            self.current_text = self.text
            self.csv_data[n_id] = csv_data
예제 #53
0
    def load_csv_data(self):
        n_id = node_id(self)

        csv_data = collections.OrderedDict()

        if n_id in self.csv_data:
            del self.csv_data[n_id]

        f = io.StringIO(bpy.data.texts[self.text].as_string())

        # setup CSV options

        if self.csv_dialect == 'user':
            if self.csv_delimiter == 'CUSTOM':
                d = self.csv_custom_delimiter
            else:
                d = self.csv_delimiter

            reader = csv.reader(f, delimiter=d)
        elif self.csv_dialect == 'semicolon':
            self.csv_decimalmark = ','
            reader = csv.reader(f, delimiter=';')
        else:
            reader = csv.reader(f, dialect=self.csv_dialect)
            self.csv_decimalmark = '.'

        # setup parse decimalmark

        if self.csv_decimalmark == ',':
            get_number = lambda s: float(s.replace(',', '.'))
        elif self.csv_decimalmark == 'LOCALE':
            get_number = lambda s: locale.atof(s)
        elif self.csv_decimalmark == 'CUSTOM':
            if self.csv_custom_decimalmark:
                get_number = lambda s: float(
                    s.replace(self.csv_custom_decimalmark, '.'))
        else:  # . default
            get_number = float

    # load data
        for i, row in enumerate(reader):
            if i == 0:  # setup names
                if self.csv_header:
                    for name in row:
                        tmp = name
                        c = 1
                        while tmp in csv_data:
                            tmp = name + str(c)
                            c += 1
                        csv_data[str(tmp)] = []
                    continue  # first row is names
                else:
                    for j in range(len(row)):
                        csv_data["Col " + str(j)] = []
            # load data

            for j, name in enumerate(csv_data):
                try:
                    n = get_number(row[j])
                    csv_data[name].append(n)
                except (ValueError, IndexError):
                    pass  # discard strings other than first row

        if csv_data:
            # check for actual data otherwise fail.
            if not csv_data[list(csv_data.keys())[0]]:
                return
            self.current_text = self.text
            self.csv_data[n_id] = csv_data
예제 #54
0
 def reload_json(self):
     n_id = node_id(self)
     self.load_json_data()
     if n_id in self.json_data:
         self.use_custom_color = True
         self.color = READY_COLOR
예제 #55
0
 def reload_csv(self):
     n_id = node_id(self)
     self.load_csv_data()
예제 #56
0
 def _del_script(self):       
     n_id = node_id(self)
     if n_id in self.script_objects:
         del self.script_objects[n_id]
예제 #57
0
 def _get_script(self):
     n_id = node_id(self)
     script = self.script_objects.get(n_id)
     if script:
         script.node = self # paranoid update often safety setting
     return script
예제 #58
0
 def free(self):
     IV.callback_disable(node_id(self))