[Bf-extensions-cvs] [9a871959] master: GPencil Tools: Fixed empty keyframe error

Pullusb noreply at git.blender.org
Sat Oct 1 16:13:01 CEST 2022


Commit: 9a87195949ccad14e2de83fb563064725760b2ad
Author: Pullusb
Date:   Sat Oct 1 16:12:56 2022 +0200
Branches: master
https://developer.blender.org/rBA9a87195949ccad14e2de83fb563064725760b2ad

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.

===================================================================

M	greasepencil_tools/__init__.py
M	greasepencil_tools/draw_tools.py
M	greasepencil_tools/rotate_canvas.py
M	greasepencil_tools/timeline_scrub.py

===================================================================

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)



More information about the Bf-extensions-cvs mailing list