[Bf-extensions-cvs] [860e9710] master: GPencil Tools: Add reset camera rotation feature

Pullusb noreply at git.blender.org
Sat Jan 30 01:23:01 CET 2021


Commit: 860e9710a56c137cc6cc8ddf1ce3d633d3fb8014
Author: Pullusb
Date:   Sat Jan 30 01:19:48 2021 +0100
Branches: master
https://developer.blender.org/rBA860e9710a56c137cc6cc8ddf1ce3d633d3fb8014

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

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

M	greasepencil_tools/__init__.py
M	greasepencil_tools/prefs.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 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



More information about the Bf-extensions-cvs mailing list