[Bf-blender-cvs] [9b1d3182226] vr_scene_inspection: Expose VR view rotation in the RNA/BPY
Julian Eisel
noreply at git.blender.org
Fri Jan 10 17:00:17 CET 2020
Commit: 9b1d318222664e4a86e7b6065921daf80dd59737
Author: Julian Eisel
Date: Fri Jan 10 16:59:26 2020 +0100
Branches: vr_scene_inspection
https://developer.blender.org/rB9b1d318222664e4a86e7b6065921daf80dd59737
Expose VR view rotation in the RNA/BPY
===================================================================
M source/blender/makesrna/intern/rna_xr.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_xr.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c
index 705aaf92c37..20d9252ad07 100644
--- a/source/blender/makesrna/intern/rna_xr.c
+++ b/source/blender/makesrna/intern/rna_xr.c
@@ -42,14 +42,29 @@ static bool rna_XrSessionState_is_running(bContext *C)
return WM_xr_is_session_running(&wm->xr);
}
-static void rna_XrSessionState_viewer_location_get(PointerRNA *ptr, float *values)
+static wmXrData *rna_XrSessionState_wm_xr_data_get(PointerRNA *ptr)
{
- /* Could also get bXrSessionState pointer through ptr->data, but prefer if we just consistently
- * pass wmXrData pointers to the WM_xr_xxx() API. */
- const wmWindowManager *wm = (wmWindowManager *)ptr->owner_id;
+ /* Callers could also get bXrSessionState pointer through ptr->data, but prefer if we just
+ * consistently pass wmXrData pointers to the WM_xr_xxx() API. */
+
+ BLI_assert(ptr->type == &RNA_XrSessionState);
+
+ wmWindowManager *wm = (wmWindowManager *)ptr->owner_id;
BLI_assert(wm && (GS(wm->id.name) == ID_WM));
- WM_xr_session_state_viewer_location_get(&wm->xr, values);
+ return &wm->xr;
+}
+
+static void rna_XrSessionState_viewer_location_get(PointerRNA *ptr, float *values)
+{
+ const wmXrData *xr = rna_XrSessionState_wm_xr_data_get(ptr);
+ WM_xr_session_state_viewer_location_get(xr, values);
+}
+
+static void rna_XrSessionState_viewer_rotation_get(PointerRNA *ptr, float *values)
+{
+ const wmXrData *xr = rna_XrSessionState_wm_xr_data_get(ptr);
+ WM_xr_session_state_viewer_rotation_get(xr, values);
}
#else /* RNA_RUNTIME */
@@ -124,6 +139,15 @@ static void rna_def_xr_session_state(BlenderRNA *brna)
prop,
"Viewer Location",
"Last known location of the viewer (centroid of the eyes) in world space");
+
+ prop = RNA_def_property(srna, "viewer_rotation", PROP_FLOAT, PROP_QUATERNION);
+ RNA_def_property_array(prop, 4);
+ RNA_def_property_float_funcs(prop, "rna_XrSessionState_viewer_rotation_get", NULL, NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(
+ prop,
+ "Viewer Rotation",
+ "Last known Rotation of the viewer (centroid of the eyes) in world space");
}
void RNA_def_xr(BlenderRNA *brna)
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index b12b4a76c9a..bc7fe1f4c2b 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -857,6 +857,7 @@ void WM_generic_user_data_free(struct wmGenericUserData *user_data);
/* wm_xr.c */
bool WM_xr_is_session_running(const wmXrData *xr);
void WM_xr_session_state_viewer_location_get(const wmXrData *xr, float location[3]);
+void WM_xr_session_state_viewer_rotation_get(const wmXrData *xr, float rotation[4]);
#endif
#ifdef __cplusplus
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 158f9d33523..bced6717173 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -235,6 +235,10 @@ static void wm_xr_runtime_session_state_update(bXrRuntimeSessionState *state,
}
}
+ mul_qt_qtqt(state->viewer_pose.orientation_quat,
+ state->final_reference_pose.orientation_quat,
+ draw_view->local_pose.orientation_quat);
+
copy_v3_v3(state->viewer_pose.position, state->final_reference_pose.position);
if (use_position_tracking) {
state->viewer_pose.position[0] += draw_view->local_pose.position[0];
@@ -254,6 +258,15 @@ void WM_xr_session_state_viewer_location_get(const wmXrData *xr, float location[
copy_v3_v3(location, xr->session_state->viewer_pose.position);
}
+void WM_xr_session_state_viewer_rotation_get(const wmXrData *xr, float rotation[4])
+{
+ if (!WM_xr_is_session_running(xr)) {
+ return;
+ }
+
+ copy_v4_v4(rotation, xr->session_state->viewer_pose.orientation_quat);
+}
+
/** \} */ /* XR Runtime Session State */
/* -------------------------------------------------------------------- */
More information about the Bf-blender-cvs
mailing list