[Bf-extensions-cvs] [8e019805] soc-2019-openxr: Support storing bookmarks in .blend files

Julian Eisel noreply at git.blender.org
Mon Feb 24 16:16:43 CET 2020


Commit: 8e0198052c50f2a917ca83e33026a3c67d707b34
Author: Julian Eisel
Date:   Mon Feb 24 16:15:32 2020 +0100
Branches: soc-2019-openxr
https://developer.blender.org/rBA8e0198052c50f2a917ca83e33026a3c67d707b34

Support storing bookmarks in .blend files

Had to do some refactoring, the bookmark data is now stored per scene,
rather than on window-manager level (which doesn't support storing
custom properties).

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

M	viewport_vr_preview.py

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

diff --git a/viewport_vr_preview.py b/viewport_vr_preview.py
index 0e77f933..b73ba443 100644
--- a/viewport_vr_preview.py
+++ b/viewport_vr_preview.py
@@ -28,6 +28,7 @@ from bpy.props import(
     IntProperty,
     BoolProperty,
 )
+from bpy.app.handlers import persistent
 from bl_ui.space_view3d import (
     VIEW3D_PT_shading_lighting,
     VIEW3D_PT_shading_color,
@@ -49,6 +50,15 @@ bl_info = {
 }
 
 
+ at persistent
+def ensure_default_vr_pose_bookmark(context: bpy.context):
+    # Ensure there's a default bookmark (scene camera by default).
+    bookmarks = bpy.context.scene.vr_pose_bookmarks
+    if len(bookmarks) == 0:
+        bookmarks.add()
+        bookmarks[0].type = 'SCENE_CAMERA'
+
+
 def xr_pose_bookmark_active_type_update(self, context):
     wm = context.window_manager
     session_settings = wm.xr_session_settings
@@ -170,23 +180,23 @@ class VRPoseBookmark(bpy.types.PropertyGroup):
 
     @staticmethod
     def get_selected_bookmark(context):
-        wm = context.window_manager
-        bookmarks = wm.vr_pose_bookmarks
+        scene = context.scene
+        bookmarks = scene.vr_pose_bookmarks
 
-        return None if len(bookmarks) < 1 else bookmarks[wm.vr_pose_bookmarks_selected]
+        return None if len(bookmarks) < 1 else bookmarks[scene.vr_pose_bookmarks_selected]
 
     @staticmethod
     def get_active_bookmark(context):
-        wm = context.window_manager
-        bookmarks = wm.vr_pose_bookmarks
+        scene = context.scene
+        bookmarks = scene.vr_pose_bookmarks
 
-        return None if len(bookmarks) < 1 else bookmarks[wm.vr_pose_bookmarks_active]
+        return None if len(bookmarks) < 1 else bookmarks[scene.vr_pose_bookmarks_active]
 
 
 class VIEW3D_UL_vr_pose_bookmarks(bpy.types.UIList):
     def draw_item(self, context, layout, _data, item, icon, _active_data, _active_propname, index):
         bookmark = item
-        bookmark_active_idx = context.window_manager.vr_pose_bookmarks_active
+        bookmark_active_idx = context.scene.vr_pose_bookmarks_active
 
         layout.emboss = 'NONE'
         layout.prop(bookmark, "name", text="")
@@ -204,7 +214,7 @@ class VIEW3D_PT_vr_pose_bookmarks(bpy.types.Panel):
 
     def draw(self, context):
         layout = self.layout
-        wm = context.window_manager
+        scene = context.scene
         bookmark_selected = VRPoseBookmark.get_selected_bookmark(context)
 
         layout.use_property_split = True
@@ -212,8 +222,8 @@ class VIEW3D_PT_vr_pose_bookmarks(bpy.types.Panel):
 
         row = layout.row()
 
-        row.template_list("VIEW3D_UL_vr_pose_bookmarks", "", wm, "vr_pose_bookmarks",
-                          wm, "vr_pose_bookmarks_selected", rows=3)
+        row.template_list("VIEW3D_UL_vr_pose_bookmarks", "", scene, "vr_pose_bookmarks",
+                         scene, "vr_pose_bookmarks_selected", rows=3)
 
         col = row.column(align=True)
         col.operator("view3d.vr_pose_bookmark_add", icon='ADD', text="")
@@ -275,13 +285,13 @@ class VIEW3D_OT_vr_pose_bookmark_add(bpy.types.Operator):
     bl_options = {'UNDO', 'REGISTER'}
 
     def execute(self, context):
-        wm = context.window_manager
-        bookmarks = wm.vr_pose_bookmarks
+        scene = context.scene
+        bookmarks = scene.vr_pose_bookmarks
 
         bookmarks.add()
 
         # select newly created set
-        wm.vr_pose_bookmarks_selected = len(bookmarks) - 1
+        scene.vr_pose_bookmarks_selected = len(bookmarks) - 1
 
         return {'FINISHED'}
 
@@ -293,14 +303,14 @@ class VIEW3D_OT_vr_pose_bookmark_remove(bpy.types.Operator):
     bl_options = {'UNDO', 'REGISTER'}
 
     def execute(self, context):
-        wm = context.window_manager
-        bookmarks = wm.vr_pose_bookmarks
+        scene = context.scene
+        bookmarks = scene.vr_pose_bookmarks
 
         if len(bookmarks) > 1:
-            bookmark_selected_idx = wm.vr_pose_bookmarks_selected
+            bookmark_selected_idx = scene.vr_pose_bookmarks_selected
             bookmarks.remove(bookmark_selected_idx)
 
-            wm.vr_pose_bookmarks_selected -= 1
+            scene.vr_pose_bookmarks_selected -= 1
 
         return {'FINISHED'}
 
@@ -317,13 +327,13 @@ class VIEW3D_OT_vr_pose_bookmark_activate(bpy.types.Operator):
     )
 
     def execute(self, context):
-        wm = context.window_manager
+        scene = context.scene
 
-        if self.index >= len(wm.vr_pose_bookmarks):
+        if self.index >= len(scene.vr_pose_bookmarks):
             return {'CANCELLED'}
 
-        wm.vr_pose_bookmarks_active = self.index if self.properties.is_property_set(
-            "index") else wm.vr_pose_bookmarks_selected
+        scene.vr_pose_bookmarks_active = self.index if self.properties.is_property_set(
+            "index") else scene.vr_pose_bookmarks_selected
 
         return {'FINISHED'}
 
@@ -510,12 +520,12 @@ def register():
     for cls in classes:
         bpy.utils.register_class(cls)
 
-    bpy.types.WindowManager.vr_pose_bookmarks = CollectionProperty(
+    bpy.types.Scene.vr_pose_bookmarks = CollectionProperty(
         name="Pose Bookmarks",
         type=VRPoseBookmark,
     )
-    bpy.types.WindowManager.vr_pose_bookmarks_selected = IntProperty()
-    bpy.types.WindowManager.vr_pose_bookmarks_active = IntProperty(
+    bpy.types.Scene.vr_pose_bookmarks_selected = IntProperty()
+    bpy.types.Scene.vr_pose_bookmarks_active = IntProperty(
         update=xr_pose_bookmark_active_update,
     )
     # View3DShading is the only per 3D-View struct with custom property
@@ -524,21 +534,18 @@ def register():
         name="Show Virtual Camera"
     )
 
-    # Ensure there's a default bookmark (scene camera by default).
-    bookmarks = bpy.context.window_manager.vr_pose_bookmarks
-    if len(bookmarks) == 0:
-        bookmarks.add()
-        bookmarks[0].type = 'SCENE_CAMERA'
-
+    bpy.app.handlers.load_post.append(ensure_default_vr_pose_bookmark)
 
 def unregister():
     for cls in classes:
         bpy.utils.unregister_class(cls)
 
-    del bpy.types.WindowManager.vr_pose_bookmarks
-    del bpy.types.WindowManager.vr_pose_bookmarks_selected
+    del bpy.types.Scene.vr_pose_bookmarks
+    del bpy.types.Scene.vr_pose_bookmarks_selected
+    del bpy.types.Scene.vr_pose_bookmarks_active
     del bpy.types.View3DShading.vr_show_virtual_camera
 
+    bpy.app.handlers.load_post.remove(ensure_default_vr_pose_bookmark)
 
 if __name__ == "__main__":
     register()



More information about the Bf-extensions-cvs mailing list