From 9a87195949ccad14e2de83fb563064725760b2ad Mon Sep 17 00:00:00 2001 From: Pullusb Date: Sat, 1 Oct 2022 16:12:56 +0200 Subject: GPencil Tools: Fixed empty keyframe error Fixed error when no keyframes to draw (gpu_extras.batch.batch_for_shader does not accept empty list in 3.4). Fixed warning messages from error in some operator's poll. --- greasepencil_tools/__init__.py | 2 +- greasepencil_tools/draw_tools.py | 3 +- greasepencil_tools/rotate_canvas.py | 7 ++- greasepencil_tools/timeline_scrub.py | 86 ++++++++++++++++++------------------ 4 files changed, 51 insertions(+), 47 deletions(-) diff --git a/greasepencil_tools/__init__.py b/greasepencil_tools/__init__.py index c75d0442..25363439 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 6d2cf3a9..375b4332 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 c2482fbd..812aa025 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 1f6c2a41..3336e16d 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) -- cgit v1.2.3