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.
This commit is contained in:
parent
f1520a9a78
commit
9a87195949
|
@ -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": "",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
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)]
|
||||
|
||||
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)]
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue