def save_image(image_type='image', view_selected=None, index=-1, zoom_val=0, add_index_to_name=True, add_colorbar=None, cb_ticks_num=None, cb_ticks_font_size=None): if add_colorbar is None: add_colorbar = False #todo: Fix!! bpy.context.scene.save_views_with_cb if cb_ticks_num is None: cb_ticks_num = bpy.context.scene.cb_ticks_num if cb_ticks_font_size is None: cb_ticks_font_size = bpy.context.scene.cb_ticks_font_size if view_selected is None: view_selected = bpy.context.scene.save_selected_view if index == -1: fol = bpy.path.abspath(bpy.context.scene.output_path) files = [ mu.namebase(f) for f in glob.glob( op.join(fol, '{}*.{}'.format(image_type, get_figure_format()))) ] files_with_numbers = sum([len(re.findall('\d+', f)) for f in files]) if files_with_numbers > 0: index = max([int(re.findall('\d+', f)[0]) for f in files]) + 1 if len(files) > 0 else 0 else: index = 0 switch_to_object_mode() index = bpy.context.scene.frame_current if index == -1 else index mu.show_only_render(True) fol = bpy.path.abspath(bpy.context.scene.output_path) if add_index_to_name: image_name = op.join( fol, '{}_{}.{}'.format(image_type, index, get_figure_format())) else: image_name = op.join(fol, '{}.{}'.format(image_type, get_figure_format())) print('Image saved in {}'.format(image_name)) bpy.context.scene.render.filepath = image_name view3d_context = mu.get_view3d_context() if view_selected: _addon().view_all() # todo: Understand when zoom(-1) is needed # if not _addon().subcorticals_are_hiding(): # _addon().zoom(-1) # mu.select_all_brain(True) # bpy.ops.view3d.camera_to_view_selected(view3d_context) # mu.view_selected() if zoom_val != 0: _addon().zoom(zoom_val) # _addon().zoom(1) # mu.center_view() bpy.ops.render.opengl(view3d_context, write_still=True) if add_colorbar: add_colorbar_to_image(image_name, cb_ticks_num, cb_ticks_font_size) # if view_selected: # _addon().zoom(1) return image_name
def save_image(image_type='image', view_selected=None, index=-1): if view_selected is None: view_selected = bpy.context.scene.save_selected_view if index == -1: fol = bpy.path.abspath(bpy.context.scene.output_path) files = [ mu.namebase(f) for f in glob.glob(op.join(fol, '{}*.png'.format(image_type))) ] files_with_numbers = sum([len(re.findall('\d+', f)) for f in files]) if files_with_numbers > 0: index = max([int(re.findall('\d+', f)[0]) for f in files]) + 1 if len(files) > 0 else 0 else: index = 0 if not _addon().is_solid(): _addon().change_to_solid_brain() exit_from_camera_view() index = bpy.context.scene.frame_current if index == -1 else index mu.show_only_render(True) fol = bpy.path.abspath(bpy.context.scene.output_path) image_name = op.join(fol, '{}_{}.png'.format(image_type, index)) print('Image saved in {}'.format(image_name)) bpy.context.scene.render.filepath = image_name view3d_context = mu.get_view3d_context() if view_selected: _addon().view_all() # mu.select_all_brain(True) # bpy.ops.view3d.camera_to_view_selected(view3d_context) # mu.view_selected() bpy.ops.render.opengl(view3d_context, write_still=True) # if view_selected: # _addon().zoom(1) return image_name
def invoke(self, context, event=None): self._first_time = True StreamingPanel.is_streaming = not StreamingPanel.is_streaming if StreamingPanel.first_time: StreamingPanel.first_time = False try: context.window_manager.event_timer_remove(self._timer) except: pass context.window_manager.modal_handler_add(self) self._timer = context.window_manager.event_timer_add( 0.01, context.window) if StreamingPanel.is_streaming: init_electrodes_fcurves(bpy.context.scene.streaming_window_length) show_electrodes_fcurves() self._first_timer = True # print('Setting _first_timer to True!') # _addon().set_colorbar_max_min(StreamingPanel.data_max, StreamingPanel.data_min) if not _addon().colorbar_values_are_locked(): _addon().set_colorbar_title('Electrodes Streaming Data') mu.show_only_render(True) bpy.context.scene.frame_current = 0 args = dict(buffer_size=bpy.context.scene.streaming_buffer_size, server=bpy.context.scene.streaming_server, multicast_group=bpy.context.scene.multicast_group, port=bpy.context.scene.streaming_server_port, timeout=bpy.context.scene.timeout, multicast=bpy.context.scene.multicast, mat_len=len( bpy.data.objects['Deep_electrodes'].children)) if bpy.context.scene.stream_type == 'offline': config = mu.read_config_ini( op.join(mu.get_user_fol(), 'electrodes', 'streaming', bpy.context.scene.logs_folders)) else: config = mu.read_config_ini( op.join(mu.get_user_fol(), 'electrodes', 'streaming')) if 'STREAMING' in config.sections(): args['good_channels'] = config['STREAMING'].get( 'good_electrodes', '') args['bad_channels'] = config['STREAMING'].get( 'bad_electrodes', '') args['no_channels'] = config['STREAMING'].get( 'no_electrodes', '') StreamButton._channels_names = config['STREAMING'].get( 'electrodes_names', '').split(',') StreamButton._stim_channels = config['STREAMING'].get( 'stim_electrodes', '').split(',') if bpy.context.scene.stream_type == 'offline': args['data'] = copy.deepcopy(StreamingPanel.offline_data) StreamingPanel.udp_queue = mu.run_thread( offline_logs_reader, reading_from_udp_while_termination_func, **args) else: StreamingPanel.udp_queue = mu.run_thread( udp_reader, reading_from_udp_while_termination_func, **args) return {'RUNNING_MODAL'}
def show_only_redner_update(self, context): mu.show_only_render(bpy.context.scene.show_only_render)