Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPullusb <bernou.samuel@gmail.com>2021-01-30 03:19:48 +0300
committerPullusb <bernou.samuel@gmail.com>2021-01-30 03:19:48 +0300
commit860e9710a56c137cc6cc8ddf1ce3d633d3fb8014 (patch)
tree4098798d0457415875440e0779f281c4b322bd5c /greasepencil_tools
parent2e0b13bb3e3b586020ec3328632aa5c76fb44d0c (diff)
GPencil Tools: Add reset camera rotation feature
Rotate canvas: Quick press/release of the shortcut now align camera with Global-Z. It was only possible in free navigation before. Timeline scrub: Now respect "limit to frame range" option if activated Pref register: Code cleanup
Diffstat (limited to 'greasepencil_tools')
-rw-r--r--greasepencil_tools/__init__.py2
-rw-r--r--greasepencil_tools/prefs.py13
-rw-r--r--greasepencil_tools/rotate_canvas.py10
-rw-r--r--greasepencil_tools/timeline_scrub.py40
4 files changed, 50 insertions, 15 deletions
diff --git a/greasepencil_tools/__init__.py b/greasepencil_tools/__init__.py
index e5135422..9ac882ba 100644
--- a/greasepencil_tools/__init__.py
+++ b/greasepencil_tools/__init__.py
@@ -21,7 +21,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, 2, 1),
+"version": (1, 2, 2),
"blender": (2, 91, 0),
"location": "Sidebar > Grease Pencil > Grease Pencil Tools",
"warning": "",
diff --git a/greasepencil_tools/prefs.py b/greasepencil_tools/prefs.py
index b8b9894d..fff0f18c 100644
--- a/greasepencil_tools/prefs.py
+++ b/greasepencil_tools/prefs.py
@@ -245,14 +245,19 @@ def unregister_keymaps():
### REGISTER ---
+classes = (
+ GPTS_timeline_settings,
+ GreasePencilAddonPrefs,
+)
+
def register():
- bpy.utils.register_class(GPTS_timeline_settings)
- bpy.utils.register_class(GreasePencilAddonPrefs)
+ for cls in classes:
+ bpy.utils.register_class(cls)
# Force box deform running to false
bpy.context.preferences.addons[os.path.splitext(__name__)[0]].preferences.boxdeform_running = False
register_keymaps()
def unregister():
unregister_keymaps()
- bpy.utils.unregister_class(GreasePencilAddonPrefs)
- bpy.utils.unregister_class(GPTS_timeline_settings)
+ for cls in reversed(classes):
+ bpy.utils.unregister_class(cls)
diff --git a/greasepencil_tools/rotate_canvas.py b/greasepencil_tools/rotate_canvas.py
index aec6e900..e2ada531 100644
--- a/greasepencil_tools/rotate_canvas.py
+++ b/greasepencil_tools/rotate_canvas.py
@@ -95,7 +95,15 @@ class RC_OT_RotateCanvas(bpy.types.Operator):
if not self.angle:
# self.report({'INFO'}, 'Reset')
aim = context.space_data.region_3d.view_rotation @ mathutils.Vector((0.0, 0.0, 1.0))#view vector
- context.space_data.region_3d.view_rotation = aim.to_track_quat('Z','Y')#track Z, up Y
+ z_up_quat = aim.to_track_quat('Z','Y')#track Z, up Y
+ if self.in_cam:
+ if self.cam.parent:
+ cam_quat = self.cam.parent.matrix_world.inverted().to_quaternion() @ z_up_quat
+ else:
+ cam_quat = z_up_quat
+ self.cam.rotation_euler = cam_quat.to_euler('XYZ')
+ else:
+ context.space_data.region_3d.view_rotation = z_up_quat
self.execute(context)
return {'FINISHED'}
diff --git a/greasepencil_tools/timeline_scrub.py b/greasepencil_tools/timeline_scrub.py
index 1f89f4d1..dfffdeaa 100644
--- a/greasepencil_tools/timeline_scrub.py
+++ b/greasepencil_tools/timeline_scrub.py
@@ -143,8 +143,17 @@ class GPTS_OT_time_scrub(bpy.types.Operator):
self.snap_on = False
self.mouse = (event.mouse_region_x, event.mouse_region_y)
self.init_mouse_x = self.cursor_x = event.mouse_region_x
+
# self.init_mouse_y = event.mouse_region_y # only to display init frame text
self.init_frame = self.new_frame = context.scene.frame_current
+ self.lock_range = context.scene.lock_frame_selection_to_range
+ if context.scene.use_preview_range:
+ self.f_start = context.scene.frame_preview_start
+ self.f_end = context.scene.frame_preview_end
+ else:
+ self.f_start = context.scene.frame_start
+ self.f_end = context.scene.frame_end
+
self.offset = 0
self.pos = []
@@ -181,17 +190,13 @@ class GPTS_OT_time_scrub(bpy.types.Operator):
for frame in layer.frames:
if frame.frame_number not in self.pos:
self.pos.append(frame.frame_number)
+
# Add start and end to snap on
- if context.scene.use_preview_range:
- play_bounds = [context.scene.frame_preview_start,
- context.scene.frame_preview_end]
- else:
- play_bounds = [context.scene.frame_start, context.scene.frame_end]
+
# Also snap on play bounds (sliced off for keyframe display)
- self.pos += play_bounds
- self.pos = np.asarray(self.pos)
+ self.pos += [self.f_start, self.f_end]
# Disable Onion skin
self.active_space_data = context.space_data
@@ -240,9 +245,9 @@ class GPTS_OT_time_scrub(bpy.types.Operator):
# Add start/end boundary bracket to HUD
start_x = self.init_mouse_x + \
- (play_bounds[0] - self.init_frame) * self.px_step
+ (self.f_start - self.init_frame) * self.px_step
end_x = self.init_mouse_x + \
- (play_bounds[1] - self.init_frame) * self.px_step
+ (self.f_end - self.init_frame) * self.px_step
# start
up = (start_x, my - (bound_h/2))
@@ -318,6 +323,15 @@ class GPTS_OT_time_scrub(bpy.types.Operator):
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)
+ if self.lock_range:
+ self.pos = [i for i in self.pos if self.f_start <= i <= self.f_end]
+
+ # convert frame list to array for numpy snap utility
+ self.pos = np.asarray(self.pos)
+
+
args = (self, context)
self.viewtype = None
self.spacetype = 'WINDOW' # is PREVIEW for VSE, needed for handler remove
@@ -371,6 +385,14 @@ class GPTS_OT_time_scrub(bpy.types.Operator):
if self.snap_on or mod_snap:
self.new_frame = nearest(self.pos, self.new_frame)
+ # frame range restriction
+ if self.lock_range:
+ if self.new_frame < self.f_start:
+ self.new_frame = self.f_start
+ elif self.new_frame > self.f_end:
+ self.new_frame = self.f_end
+
+ # context.scene.frame_set(self.new_frame)
context.scene.frame_current = self.new_frame
# - recalculate offset to snap cursor to frame