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:
Diffstat (limited to 'viewport_vr_preview/properties.py')
-rw-r--r--viewport_vr_preview/properties.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/viewport_vr_preview/properties.py b/viewport_vr_preview/properties.py
index ae2d94ab..a6bde9bd 100644
--- a/viewport_vr_preview/properties.py
+++ b/viewport_vr_preview/properties.py
@@ -192,8 +192,53 @@ class VRLandmark(PropertyGroup):
)
+### Motion capture.
+def vr_mocap_object_selected_get(session_settings):
+ mocap_objects = session_settings.mocap_objects
+ return (
+ None if (len(mocap_objects) <
+ 1) else mocap_objects[session_settings.selected_mocap_object]
+ )
+
+
+def vr_scene_mocap_object_selected_get(scene, session_settings):
+ mocap_objects = scene.vr_mocap_objects
+ return (
+ None if (len(mocap_objects) <
+ 1) else mocap_objects[session_settings.selected_mocap_object]
+ )
+
+
+def vr_scene_mocap_object_update(self, context):
+ session_settings = context.window_manager.xr_session_settings
+ mocap_ob = vr_mocap_object_selected_get(session_settings)
+ if not mocap_ob:
+ return
+
+ scene = context.scene
+ scene_mocap_ob = vr_scene_mocap_object_selected_get(scene, session_settings)
+ if not scene_mocap_ob:
+ return
+
+ # Check for duplicate object.
+ if scene_mocap_ob.object and session_settings.mocap_objects.find(scene_mocap_ob.object):
+ scene_mocap_ob.object = None
+ return
+
+ mocap_ob.object = scene_mocap_ob.object
+
+
+class VRMotionCaptureObject(PropertyGroup):
+ object: bpy.props.PointerProperty(
+ name="Object",
+ type=bpy.types.Object,
+ update=vr_scene_mocap_object_update,
+ )
+
+
classes = (
VRLandmark,
+ VRMotionCaptureObject,
)
@@ -211,6 +256,13 @@ def register():
bpy.types.Scene.vr_landmarks_active = bpy.props.IntProperty(
update=vr_landmark_active_update,
)
+ # This scene collection property is needed instead of directly accessing
+ # XrSessionSettings.mocap_objects in the UI to avoid invalid pointers when
+ # deleting objects.
+ bpy.types.Scene.vr_mocap_objects = bpy.props.CollectionProperty(
+ name="Motion Capture Object",
+ type=VRMotionCaptureObject,
+ )
bpy.app.handlers.load_post.append(vr_ensure_default_landmark)
@@ -222,5 +274,6 @@ def unregister():
del bpy.types.Scene.vr_landmarks
del bpy.types.Scene.vr_landmarks_selected
del bpy.types.Scene.vr_landmarks_active
+ del bpy.types.Scene.vr_mocap_objects
bpy.app.handlers.load_post.remove(vr_ensure_default_landmark)