[Bf-blender-cvs] [ff2dcdb4479] xr-actions-D9124: XR: Implement XR constraints toggle operator

Peter Kim noreply at git.blender.org
Tue Nov 3 10:50:54 CET 2020


Commit: ff2dcdb447951882313c85f60b44dc3fbb419d92
Author: Peter Kim
Date:   Tue Nov 3 18:47:11 2020 +0900
Branches: xr-actions-D9124
https://developer.blender.org/rBff2dcdb447951882313c85f60b44dc3fbb419d92

XR: Implement XR constraints toggle operator

Useful for quickly playing back recorded animations without
overwriting existing data.

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

M	source/blender/windowmanager/xr/intern/wm_xr_operators.c

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

diff --git a/source/blender/windowmanager/xr/intern/wm_xr_operators.c b/source/blender/windowmanager/xr/intern/wm_xr_operators.c
index 12bdbd6719a..3b6ee6fa3e9 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_operators.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_operators.c
@@ -159,7 +159,7 @@ static void WM_OT_xr_session_toggle(wmOperatorType *ot)
 /** \} */
 
 /* -------------------------------------------------------------------- */
-/** \name XR Raycast Select Operator
+/** \name XR Raycast Select
  *
  * Casts a ray from an XR controller's pose and selects any hit geometry.
  * \{ */
@@ -606,6 +606,99 @@ static void WM_OT_xr_select_raycast(wmOperatorType *ot)
 
 /** \} */
 
+/* -------------------------------------------------------------------- */
+/** \name XR Constraints Toggle
+ *
+ * Toggles enabled / auto key behavior for XR constraint objects.
+ * \{ */
+
+static void wm_xr_constraint_toggle(char *flag, bool enable, bool autokey)
+{
+  if (enable) {
+    if ((*flag & XR_OBJECT_ENABLE) != 0) {
+      *flag &= ~(XR_OBJECT_ENABLE);
+    }
+    else {
+      *flag |= XR_OBJECT_ENABLE;
+    }
+  }
+
+  if (autokey) {
+    if ((*flag & XR_OBJECT_AUTOKEY) != 0) {
+      *flag &= ~(XR_OBJECT_AUTOKEY);
+    }
+    else {
+      *flag |= XR_OBJECT_AUTOKEY;
+    }
+  }
+}
+
+static int wm_xr_constraints_toggle_exec(bContext *C, wmOperator *op)
+{
+  wmWindowManager *wm = CTX_wm_manager(C);
+  XrSessionSettings *settings = &wm->xr.session_settings;
+  PropertyRNA *prop = NULL;
+  bool headset, controller0, controller1, enable, autokey;
+
+  prop = RNA_struct_find_property(op->ptr, "headset");
+  headset = prop ? RNA_property_boolean_get(op->ptr, prop) : true;
+
+  prop = RNA_struct_find_property(op->ptr, "controller0");
+  controller0 = prop ? RNA_property_boolean_get(op->ptr, prop) : true;
+
+  prop = RNA_struct_find_property(op->ptr, "controller1");
+  controller1 = prop ? RNA_property_boolean_get(op->ptr, prop) : true;
+
+  prop = RNA_struct_find_property(op->ptr, "enable");
+  enable = prop ? RNA_property_boolean_get(op->ptr, prop) : true;
+
+  prop = RNA_struct_find_property(op->ptr, "autokey");
+  autokey = prop ? RNA_property_boolean_get(op->ptr, prop) : true;
+
+  if (headset) {
+    wm_xr_constraint_toggle(&settings->headset_flag, enable, autokey);
+  }
+  if (controller0) {
+    wm_xr_constraint_toggle(&settings->controller0_flag, enable, autokey);
+  }
+  if (controller1) {
+    wm_xr_constraint_toggle(&settings->controller1_flag, enable, autokey);
+  }
+
+  WM_event_add_notifier(C, NC_WM | ND_XR_DATA_CHANGED, NULL);
+
+  return OPERATOR_FINISHED;
+}
+
+static void WM_OT_xr_constraints_toggle(wmOperatorType *ot)
+{
+  /* identifiers */
+  ot->name = "XR Constraints Toggle";
+  ot->idname = "WM_OT_xr_constraints_toggle";
+  ot->description = "Toggles enabled / auto key behavior for VR constraint objects";
+
+  /* callbacks */
+  ot->exec = wm_xr_constraints_toggle_exec;
+  ot->poll = wm_xr_operator_sessionactive;
+
+  /* properties */
+  RNA_def_boolean(ot->srna, "headset", true, "Headset", "Toggle behavior for the headset object");
+  RNA_def_boolean(ot->srna,
+                  "controller0",
+                  true,
+                  "Controller 0",
+                  "Toggle behavior for the first controller object ");
+  RNA_def_boolean(ot->srna,
+                  "controller1",
+                  true,
+                  "Controller 1",
+                  "Toggle behavior for the second controller object");
+  RNA_def_boolean(ot->srna, "enable", true, "Enable", "Toggle constraint enabled behavior");
+  RNA_def_boolean(ot->srna, "autokey", false, "Auto Key", "Toggle auto keying behavior");
+}
+
+/** \} */
+
 /* -------------------------------------------------------------------- */
 /** \name Operator Registration
  * \{ */
@@ -614,6 +707,7 @@ void wm_xr_operatortypes_register(void)
 {
   WM_operatortype_append(WM_OT_xr_session_toggle);
   WM_operatortype_append(WM_OT_xr_select_raycast);
+  WM_operatortype_append(WM_OT_xr_constraints_toggle);
 }
 
 /** \} */



More information about the Bf-blender-cvs mailing list