diff --git a/greasepencil_tools/__init__.py b/greasepencil_tools/__init__.py index c75d0442f6b7064d73bb3a7c83e2fd9d2e472cf3..25363439bbef5ae39399bb15295be44e4579f601 100644 --- a/greasepencil_tools/__init__.py +++ b/greasepencil_tools/__init__.py @@ -4,7 +4,7 @@ bl_info = { "name": "Grease Pencil Tools", "description": "Extra tools for Grease Pencil", "author": "Samuel Bernou, Antonio Vazquez, Daniel Martinez Lara, Matias Mendiola", -"version": (1, 6, 1), +"version": (1, 6, 2), "blender": (3, 0, 0), "location": "Sidebar > Grease Pencil > Grease Pencil Tools", "warning": "", diff --git a/greasepencil_tools/draw_tools.py b/greasepencil_tools/draw_tools.py index 6d2cf3a908d6810fe74b61c2d8a107d4dd2cc778..375b433227bb7d4c7ce4306f2f428444d550d948 100644 --- a/greasepencil_tools/draw_tools.py +++ b/greasepencil_tools/draw_tools.py @@ -10,7 +10,8 @@ class GP_OT_camera_flip_x(bpy.types.Operator): @classmethod def poll(cls, context): - return context.space_data.region_3d.view_perspective == 'CAMERA' + return context.area.type == 'VIEW_3D' \ + and context.space_data.region_3d.view_perspective == 'CAMERA' def execute(self, context): context.scene.camera.scale.x *= -1 diff --git a/greasepencil_tools/rotate_canvas.py b/greasepencil_tools/rotate_canvas.py index c2482fbdb6f60cda5693eb414e05e9745f7b13ed..812aa025988da28a582772b1bb5a861739393e6b 100644 --- a/greasepencil_tools/rotate_canvas.py +++ b/greasepencil_tools/rotate_canvas.py @@ -283,7 +283,8 @@ class RC_OT_Set_rotation(bpy.types.Operator): @classmethod def poll(cls, context): - return context.space_data.region_3d.view_perspective == 'CAMERA' + return context.area.type == 'VIEW_3D' \ + and context.space_data.region_3d.view_perspective == 'CAMERA' def execute(self, context): cam_ob = context.scene.camera @@ -306,7 +307,9 @@ class RC_OT_Reset_rotation(bpy.types.Operator): @classmethod def poll(cls, context): - return context.space_data.region_3d.view_perspective == 'CAMERA' and context.scene.camera.get('stored_rotation') + return context.area.type == 'VIEW_3D' \ + and context.space_data.region_3d.view_perspective == 'CAMERA' \ + and context.scene.camera.get('stored_rotation') def execute(self, context): cam_ob = context.scene.camera diff --git a/greasepencil_tools/timeline_scrub.py b/greasepencil_tools/timeline_scrub.py index 1f6c2a41087ac2d9e4f52cb73f73aa276b559376..3336e16dbb7f39ced90499c3594d202a9710162f 100644 --- a/greasepencil_tools/timeline_scrub.py +++ b/greasepencil_tools/timeline_scrub.py @@ -48,7 +48,7 @@ def draw_callback_px(self, context): self.batch_timeline.draw(shader) # Display keyframes - if self.use_hud_keyframes: + if self.use_hud_keyframes and self.batch_keyframes: if self.keyframe_aspect == 'LINE': gpu.state.line_width_set(3.0) shader.bind() @@ -302,50 +302,50 @@ class GPTS_OT_time_scrub(bpy.types.Operator): else: ui_key_pos = self.pos[:-2] + self.batch_keyframes = None # init if there are no keyframe to draw + if ui_key_pos: + if self.keyframe_aspect == 'LINE': + key_lines = [] + # Slice off position of start/end frame added last (in list for snapping) + for i in ui_key_pos: + key_lines.append( + (self.init_mouse_x + ((i-self.init_frame) * self.px_step), my - (key_height/2))) + key_lines.append( + (self.init_mouse_x + ((i-self.init_frame) * self.px_step), my + (key_height/2))) - # keyframe display - if self.keyframe_aspect == 'LINE': - key_lines = [] - # Slice off position of start/end frame added last (in list for snapping) - for i in ui_key_pos: - key_lines.append( - (self.init_mouse_x + ((i-self.init_frame) * self.px_step), my - (key_height/2))) - key_lines.append( - (self.init_mouse_x + ((i-self.init_frame) * self.px_step), my + (key_height/2))) - - self.batch_keyframes = batch_for_shader( - shader, 'LINES', {"pos": key_lines}) + self.batch_keyframes = batch_for_shader( + shader, 'LINES', {"pos": key_lines}) - else: - # diamond and square - # keysize5 for square, 4 or 6 for diamond - keysize = 6 if self.keyframe_aspect == 'DIAMOND' else 5 - upper = 0 - - shaped_key = [] - indices = [] - idx_offset = 0 - for i in ui_key_pos: - center = self.init_mouse_x + ((i-self.init_frame)*self.px_step) - if self.keyframe_aspect == 'DIAMOND': - # +1 on x is to correct pixel alignment - shaped_key += [(center-keysize, my+upper), - (center+1, my+keysize+upper), - (center+keysize, my+upper), - (center+1, my-keysize+upper)] - - elif self.keyframe_aspect == 'SQUARE': - shaped_key += [(center-keysize+1, my-keysize+upper), - (center-keysize+1, my+keysize+upper), - (center+keysize, my+keysize+upper), - (center+keysize, my-keysize+upper)] - - indices += [(0+idx_offset, 1+idx_offset, 2+idx_offset), - (0+idx_offset, 2+idx_offset, 3+idx_offset)] - idx_offset += 4 - - self.batch_keyframes = batch_for_shader( - shader, 'TRIS', {"pos": shaped_key}, indices=indices) + else: + # diamond and square + # keysize5 for square, 4 or 6 for diamond + keysize = 6 if self.keyframe_aspect == 'DIAMOND' else 5 + upper = 0 + + shaped_key = [] + indices = [] + idx_offset = 0 + for i in ui_key_pos: + center = self.init_mouse_x + ((i-self.init_frame)*self.px_step) + if self.keyframe_aspect == 'DIAMOND': + # +1 on x is to correct pixel alignment + shaped_key += [(center-keysize, my+upper), + (center+1, my+keysize+upper), + (center+keysize, my+upper), + (center+1, my-keysize+upper)] + + elif self.keyframe_aspect == 'SQUARE': + shaped_key += [(center-keysize+1, my-keysize+upper), + (center-keysize+1, my+keysize+upper), + (center+keysize, my+keysize+upper), + (center+keysize, my-keysize+upper)] + + indices += [(0+idx_offset, 1+idx_offset, 2+idx_offset), + (0+idx_offset, 2+idx_offset, 3+idx_offset)] + idx_offset += 4 + + self.batch_keyframes = batch_for_shader( + shader, 'TRIS', {"pos": shaped_key}, indices=indices) # Trim snapping list of frame outside of frame range if range lock activated # (after drawing batch so those are still showed)