def show_axial(): if bpy.types.Scene.in_camera_view and bpy.data.objects.get("Camera_empty") is not None: if mu.get_time_from_event(mu.get_time_obj()) > 2 or bpy.context.scene.current_view != 'axial': bpy.data.objects["Camera_empty"].rotation_euler = [np.pi / 2, 0.0, np.pi] bpy.context.scene.current_view = 'axial' bpy.context.scene.current_view_flip = 0 else: if bpy.context.scene.current_view_flip == 1: bpy.data.objects["Camera_empty"].rotation_euler = [np.pi / 2, 0.0, np.pi] else: # print('in ShowAxial else') bpy.data.objects["Camera_empty"].rotation_euler = [-np.pi / 2, 0.0, np.pi] bpy.context.scene.current_view_flip = not bpy.context.scene.current_view_flip ShowHideObjectsPanel.time_of_view_selection = mu.get_time_obj() else: mu.get_view3d_region().view_perspective = 'ORTHO' # todo: first term is always False... if mu.get_time_from_event(mu.get_time_obj()) > 2 or bpy.context.scene.current_view != 'axial': mu.get_view3d_region().view_rotation = AXIAL_SUPERIOR # [1, 0, 0, 0] bpy.context.scene.current_view = 'axial' bpy.context.scene.current_view_flip = 0 else: mu.rotate_view3d(AXIAL_SUPERIOR) if bpy.context.scene.current_view_flip else mu.rotate_view3d(AXIAL_INFERIOR) bpy.context.scene.current_view_flip = not bpy.context.scene.current_view_flip ShowHideObjectsPanel.time_of_view_selection = mu.get_time_obj()
def show_coronal(show_frontal=False): if show_frontal: mu.rotate_view3d(CORONAL_ANTERIOR) bpy.context.scene.current_view = 'coronal' bpy.context.scene.current_view_flip = 0 return if bpy.types.Scene.in_camera_view and bpy.data.objects.get("Camera_empty") is not None: if mu.get_time_from_event(mu.get_time_obj()) > 2 or bpy.context.scene.current_view != 'coronal': bpy.data.objects["Camera_empty"].rotation_euler = [0.0, 0.0, np.pi] bpy.context.scene.current_view = 'coronal' bpy.context.scene.current_view_flip = 0 else: if bpy.context.scene.current_view_flip == 1: bpy.data.objects["Camera_empty"].rotation_euler = [0.0, 0.0, np.pi] else: # print('in ShowCoronal else') bpy.data.objects["Camera_empty"].rotation_euler = [0.0, 0.0, 0.0] bpy.context.scene.current_view_flip = not bpy.context.scene.current_view_flip ShowHideObjectsPanel.time_of_view_selection = mu.get_time_obj() else: mu.get_view3d_region().view_perspective = 'ORTHO' if mu.get_time_from_event(mu.get_time_obj()) > 2 or bpy.context.scene.current_view != 'coronal': mu.rotate_view3d(CORONAL_ANTERIOR) bpy.context.scene.current_view = 'coronal' bpy.context.scene.current_view_flip = False else: mu.rotate_view3d(CORONAL_ANTERIOR) if bpy.context.scene.current_view_flip else mu.rotate_view3d(CORONAL_POSTERIOR) bpy.context.scene.current_view_flip = not bpy.context.scene.current_view_flip ShowHideObjectsPanel.time_of_view_selection = mu.get_time_obj()
def show_sagital(): if bpy.types.Scene.in_camera_view and bpy.data.objects.get("Camera_empty") is not None: if mu.get_time_from_event(mu.get_time_obj()) > 2 or bpy.context.scene.current_view != 'sagittal': bpy.data.objects["Camera_empty"].rotation_euler = [0.0, 0.0, np.pi / 2] bpy.context.scene.current_view = 'sagittal' bpy.context.scene.current_view_flip = 0 else: if bpy.context.scene.current_view_flip == 1: bpy.data.objects["Camera_empty"].rotation_euler = [0.0, 0.0, np.pi / 2] else: # print('in ShowSagittal else') bpy.data.objects["Camera_empty"].rotation_euler = [0.0, 0.0, -np.pi / 2] bpy.context.scene.current_view_flip = not bpy.context.scene.current_view_flip # ShowHideObjectsPanel.time_of_view_selection = mu.get_time_obj() else: mu.get_view3d_region().view_perspective = 'ORTHO' if mu.get_time_from_event(mu.get_time_obj()) > 2 or bpy.context.scene.current_view != 'sagittal': mu.rotate_view3d(SAGITTAL_LEFT) bpy.context.scene.current_view = 'sagittal' bpy.context.scene.current_view_flip = False else: mu.rotate_view3d(SAGITTAL_LEFT) if bpy.context.scene.current_view_flip else mu.rotate_view3d(SAGITTAL_RIGHT) bpy.context.scene.current_view_flip = not bpy.context.scene.current_view_flip # view_all() # zoom(-1) ShowHideObjectsPanel.time_of_view_selection = mu.get_time_obj()
def rotate_brain(dx=None, dy=None, dz=None, keep_rotating=False, save_image=False, render_image=False): dx = bpy.context.scene.rotate_dx if dx is None else dx dy = bpy.context.scene.rotate_dy if dy is None else dy dz = bpy.context.scene.rotate_dz if dz is None else dz bpy.context.scene.rotate_dx, bpy.context.scene.rotate_dy, bpy.context.scene.rotate_dz = dx, dy, dz rv3d = mu.get_view3d_region() rv3d.view_rotation.rotate(mathutils.Euler((math.radians(d) for d in (dx, dy, dz)))) if bpy.context.scene.rotate_and_save or save_image: _addon().save_image('rotation', view_selected=bpy.context.scene.save_selected_view) if bpy.context.scene.rotate_and_render or render_image: _addon().render_image('rotation') if keep_rotating: start_rotating()
def rotate_brain(dx=None, dy=None, dz=None, keep_rotating=False, save_image=False, render_image=False): dx = bpy.context.scene.rotate_dx if dx is None else dx dy = bpy.context.scene.rotate_dy if dy is None else dy dz = bpy.context.scene.rotate_dz if dz is None else dz ShowHideObjectsPanel.rotate_dxyz += np.array([dx, dy, dz]) bpy.context.scene.rotate_dx, bpy.context.scene.rotate_dy, bpy.context.scene.rotate_dz = dx, dy, dz rv3d = mu.get_view3d_region() rv3d.view_rotation.rotate( mathutils.Euler((math.radians(d) for d in (dx, dy, dz)))) if bpy.context.scene.rotate_and_save or save_image: _addon().save_image('rotation', view_selected=bpy.context.scene.save_selected_view) # if bpy.context.scene.rotate_and_render or render_image: # _addon().render_image('rotation') if bpy.context.scene.rotate_360 and any( [ShowHideObjectsPanel.rotate_dxyz[k] >= 360 for k in range(3)]): stop_rotating() elif keep_rotating: start_rotating()
def _save_all_views(views=None, inflated_ratio_in_file_name=False, rot_lh_axial=True, render_images=False, quality=0, img_name_prefix='', add_colorbar=False, cb_ticks_num=None, cb_ticks_font_size=None, overwrite=True): def get_image_name(view_name): return '{}{}{}_{}'.format( '{}_'.format(hemi) if hemi != '' else '', '{}_'.format(img_name_prefix) if img_name_prefix != '' else '', surf_name, view_name) def should_save_image(img_name): return overwrite or not op.isfile(get_full_output_fname(img_name)) def save_medial_views(): if _addon().ROT_MEDIAL_LEFT in views: image_name = '{}_left_medial'.format(surf_name) if should_save_image(image_name): _addon().hide_hemi('rh') _addon().show_hemi('lh') _addon().rotate_view(_addon().ROT_SAGITTAL_RIGHT) image_fname = save_render_image(image_name, quality, render_images, add_colorbar, cb_ticks_num, cb_ticks_font_size) images_names.append(image_fname) if _addon().ROT_MEDIAL_RIGHT in views: image_name = '{}_right_medial'.format(surf_name) if should_save_image(image_name): _addon().show_hemi('rh') _addon().hide_hemi('lh') _addon().rotate_view(_addon().ROT_SAGITTAL_LEFT) image_fname = save_render_image( '{}_right_medial'.format(surf_name), quality, render_images, add_colorbar, cb_ticks_num, cb_ticks_font_size) images_names.append(image_fname) _addon().show_hemi('rh') _addon().show_hemi('lh') if views is None: views = list(_addon().ANGLES_DICT.keys( )) # + [_addon().ROT_MEDIAL_LEFT, _addon().ROT_MEDIAL_RIGHT] else: views = list(map(int, views)) inf_r = bpy.context.scene.inflating if inflated_ratio_in_file_name: surf_name_dict = {-1: 'pial', 0: 'inflated', 1: 'flat'} surf_name = surf_name_dict.get(inf_r, '') if surf_name == '': if -1 < inf_r < 0: surf_name = '{:.1f}_inflated'.format(1 - inf_r) else: surf_name = '{:.1f}_flat'.format(inf_r) else: surf_name = 'pial' if inf_r == -1 else 'inflated' if -1 < inf_r <= 0 else 'flat' if mu.get_hemi_obj('rh').hide and not mu.get_hemi_obj('lh').hide: hemi = 'lh' elif not mu.get_hemi_obj('rh').hide and mu.get_hemi_obj('lh').hide: hemi = 'rh' elif not mu.get_hemi_obj('rh').hide and not mu.get_hemi_obj('lh').hide: hemi = '' else: mu.write_to_stderr('You need to show at least one hemi') org_view_ang = tuple(mu.get_view3d_region().view_rotation) images_names = [] for view in views: view_name = _addon().view_name(view) img_name = get_image_name(view_name) if not should_save_image(img_name): continue _addon().rotate_view(view) if hemi == 'lh' and rot_lh_axial and view in ( _addon().ROT_AXIAL_SUPERIOR, _addon().ROT_AXIAL_INFERIOR): _addon().rotate_brain(dz=180) mu.center_view() image_fname = save_render_image(img_name, quality, render_images, add_colorbar, cb_ticks_num, cb_ticks_font_size) print(image_fname, view, hemi) images_names.append(image_fname) # if not mu.get_hemi_obj('rh').hide and not mu.get_hemi_obj('lh').hide: if views is None: save_medial_views() # todo: doesn't work mu.rotate_view3d(org_view_ang) mu.center_view() return images_names
def view_distance_update(self, context): mu.get_view3d_region().view_distance = bpy.context.scene.view_distance