Skip to content
Snippets Groups Projects
Commit 9a871959 authored by Pullusb's avatar Pullusb
Browse files

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.
parent f1520a9a
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,7 @@ bl_info = { ...@@ -4,7 +4,7 @@ bl_info = {
"name": "Grease Pencil Tools", "name": "Grease Pencil Tools",
"description": "Extra tools for Grease Pencil", "description": "Extra tools for Grease Pencil",
"author": "Samuel Bernou, Antonio Vazquez, Daniel Martinez Lara, Matias Mendiola", "author": "Samuel Bernou, Antonio Vazquez, Daniel Martinez Lara, Matias Mendiola",
"version": (1, 6, 1), "version": (1, 6, 2),
"blender": (3, 0, 0), "blender": (3, 0, 0),
"location": "Sidebar > Grease Pencil > Grease Pencil Tools", "location": "Sidebar > Grease Pencil > Grease Pencil Tools",
"warning": "", "warning": "",
......
...@@ -10,7 +10,8 @@ class GP_OT_camera_flip_x(bpy.types.Operator): ...@@ -10,7 +10,8 @@ class GP_OT_camera_flip_x(bpy.types.Operator):
@classmethod @classmethod
def poll(cls, context): 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): def execute(self, context):
context.scene.camera.scale.x *= -1 context.scene.camera.scale.x *= -1
......
...@@ -283,7 +283,8 @@ class RC_OT_Set_rotation(bpy.types.Operator): ...@@ -283,7 +283,8 @@ class RC_OT_Set_rotation(bpy.types.Operator):
@classmethod @classmethod
def poll(cls, context): 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): def execute(self, context):
cam_ob = context.scene.camera cam_ob = context.scene.camera
...@@ -306,7 +307,9 @@ class RC_OT_Reset_rotation(bpy.types.Operator): ...@@ -306,7 +307,9 @@ class RC_OT_Reset_rotation(bpy.types.Operator):
@classmethod @classmethod
def poll(cls, context): 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): def execute(self, context):
cam_ob = context.scene.camera cam_ob = context.scene.camera
......
...@@ -48,7 +48,7 @@ def draw_callback_px(self, context): ...@@ -48,7 +48,7 @@ def draw_callback_px(self, context):
self.batch_timeline.draw(shader) self.batch_timeline.draw(shader)
# Display keyframes # Display keyframes
if self.use_hud_keyframes: if self.use_hud_keyframes and self.batch_keyframes:
if self.keyframe_aspect == 'LINE': if self.keyframe_aspect == 'LINE':
gpu.state.line_width_set(3.0) gpu.state.line_width_set(3.0)
shader.bind() shader.bind()
...@@ -302,50 +302,50 @@ class GPTS_OT_time_scrub(bpy.types.Operator): ...@@ -302,50 +302,50 @@ class GPTS_OT_time_scrub(bpy.types.Operator):
else: else:
ui_key_pos = self.pos[:-2] 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 self.batch_keyframes = batch_for_shader(
if self.keyframe_aspect == 'LINE': shader, 'LINES', {"pos": key_lines})
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})
else: else:
# diamond and square # diamond and square
# keysize5 for square, 4 or 6 for diamond # keysize5 for square, 4 or 6 for diamond
keysize = 6 if self.keyframe_aspect == 'DIAMOND' else 5 keysize = 6 if self.keyframe_aspect == 'DIAMOND' else 5
upper = 0 upper = 0
shaped_key = [] shaped_key = []
indices = [] indices = []
idx_offset = 0 idx_offset = 0
for i in ui_key_pos: for i in ui_key_pos:
center = self.init_mouse_x + ((i-self.init_frame)*self.px_step) center = self.init_mouse_x + ((i-self.init_frame)*self.px_step)
if self.keyframe_aspect == 'DIAMOND': if self.keyframe_aspect == 'DIAMOND':
# +1 on x is to correct pixel alignment # +1 on x is to correct pixel alignment
shaped_key += [(center-keysize, my+upper), shaped_key += [(center-keysize, my+upper),
(center+1, my+keysize+upper), (center+1, my+keysize+upper),
(center+keysize, my+upper), (center+keysize, my+upper),
(center+1, my-keysize+upper)] (center+1, my-keysize+upper)]
elif self.keyframe_aspect == 'SQUARE': elif self.keyframe_aspect == 'SQUARE':
shaped_key += [(center-keysize+1, my-keysize+upper), shaped_key += [(center-keysize+1, my-keysize+upper),
(center-keysize+1, my+keysize+upper), (center-keysize+1, my+keysize+upper),
(center+keysize, my+keysize+upper), (center+keysize, my+keysize+upper),
(center+keysize, my-keysize+upper)] (center+keysize, my-keysize+upper)]
indices += [(0+idx_offset, 1+idx_offset, 2+idx_offset), indices += [(0+idx_offset, 1+idx_offset, 2+idx_offset),
(0+idx_offset, 2+idx_offset, 3+idx_offset)] (0+idx_offset, 2+idx_offset, 3+idx_offset)]
idx_offset += 4 idx_offset += 4
self.batch_keyframes = batch_for_shader( self.batch_keyframes = batch_for_shader(
shader, 'TRIS', {"pos": shaped_key}, indices=indices) shader, 'TRIS', {"pos": shaped_key}, indices=indices)
# Trim snapping list of frame outside of frame range if range lock activated # Trim snapping list of frame outside of frame range if range lock activated
# (after drawing batch so those are still showed) # (after drawing batch so those are still showed)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment