[Bf-blender-cvs] [2e66e2c37d2] xr-dev: Merge branch 'master' into xr-dev
Peter Kim
noreply at git.blender.org
Thu Jun 9 00:06:17 CEST 2022
Commit: 2e66e2c37d2179472b2d76e1d69ab9642cc60316
Author: Peter Kim
Date: Thu Jun 9 07:06:03 2022 +0900
Branches: xr-dev
https://developer.blender.org/rB2e66e2c37d2179472b2d76e1d69ab9642cc60316
Merge branch 'master' into xr-dev
===================================================================
===================================================================
diff --cc source/blender/editors/include/ED_transform.h
index 2d3a3bc6f0a,82cc518f029..1cebdfafd74
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@@ -13,12 -13,10 +13,13 @@@ extern "C"
/* ******************* Registration Function ********************** */
++struct ID;
struct Object;
struct bContext;
+struct ViewLayer;
struct wmKeyConfig;
struct wmOperatorType;
+struct wmTimer;
void ED_keymap_transform(struct wmKeyConfig *keyconf);
void transform_operatortypes(void);
@@@ -204,19 -202,6 +205,19 @@@ int ED_transform_calc_gizmo_stats(cons
const struct TransformCalcParams *params,
struct TransformBounds *tbounds);
+/* transform_convert.c */
+void ED_transform_animrecord_check_state(struct Scene *scene,
+ struct wmTimer *animtimer,
- struct Object *ob);
++ struct ID *id);
+
+/* transform_convert_object.c */
+void ED_transform_autokeyframe_object(struct bContext *C,
+ struct Scene *scene,
+ struct ViewLayer *view_layer,
+ struct Object *ob,
+ int tmode);
+bool ED_transform_motionpath_need_update_object(struct Scene *scene, struct Object *ob);
+
/**
* Iterates over all the strips and finds the closest snapping candidate of either \a frame_1 or \a
* frame_2. The closest snapping candidate will be the closest start or end frame of an existing
diff --cc source/blender/editors/transform/transform_convert.c
index 952fa5b7234,d9b971c5478..267a519ebee
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@@ -1607,9 -1607,10 +1607,8 @@@ void transform_convert_clip_mirror_modi
}
}
- void ED_transform_animrecord_check_state(Scene *scene, wmTimer *animtimer, struct Object *ob)
-void animrecord_check_state(TransInfo *t, struct ID *id)
++void ED_transform_animrecord_check_state(Scene *scene, wmTimer *animtimer, struct ID *id)
{
- ID *id = &ob->id;
- Scene *scene = t->scene;
- wmTimer *animtimer = t->animtimer;
ScreenAnimData *sad = (animtimer) ? animtimer->customdata : NULL;
/* sanity checks */
diff --cc source/blender/editors/transform/transform_convert.h
index 7080deaec66,037fbe26c77..3aeea049150
--- a/source/blender/editors/transform/transform_convert.h
+++ b/source/blender/editors/transform/transform_convert.h
@@@ -92,10 -92,10 +92,6 @@@ char transform_convert_frame_side_dir_g
*/
bool FrameOnMouseSide(char side, float frame, float cframe);
void transform_convert_clip_mirror_modifier_apply(TransDataContainer *tc);
--/**
-- * For the realtime animation recording feature, handle overlapping data.
-- */
- void animrecord_check_state(TransInfo *t, struct Object *ob);
-void animrecord_check_state(TransInfo *t, struct ID *id);
/* transform_convert_action.c */
diff --cc source/blender/editors/transform/transform_convert_armature.c
index dd39166bfd3,e1b25acb21e..485425c644a
--- a/source/blender/editors/transform/transform_convert_armature.c
+++ b/source/blender/editors/transform/transform_convert_armature.c
@@@ -1471,7 -1471,7 +1471,7 @@@ void recalcData_pose(TransInfo *t
/* XXX: this currently doesn't work, since flags aren't set yet! */
int targetless_ik = (t->flag & T_AUTOIK);
- ED_transform_animrecord_check_state(t->scene, t->animtimer, ob);
- animrecord_check_state(t, &ob->id);
++ ED_transform_animrecord_check_state(t->scene, t->animtimer, &ob->id);
autokeyframe_pose(t->context, t->scene, ob, t->mode, targetless_ik);
}
diff --cc source/blender/editors/transform/transform_convert_object.c
index bd6c6bb120f,5879a65eb4b..02549390c6a
--- a/source/blender/editors/transform/transform_convert_object.c
+++ b/source/blender/editors/transform/transform_convert_object.c
@@@ -884,11 -884,11 +884,11 @@@ void recalcData_objects(TransInfo *t
/* TODO: autokeyframe calls need some setting to specify to add samples
* (FPoints) instead of keyframes? */
if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) {
- ED_transform_animrecord_check_state(t->scene, t->animtimer, ob);
- animrecord_check_state(t, &ob->id);
- autokeyframe_object(t->context, t->scene, t->view_layer, ob, t->mode);
++ ED_transform_animrecord_check_state(t->scene, t->animtimer, &ob->id);
+ ED_transform_autokeyframe_object(t->context, t->scene, t->view_layer, ob, t->mode);
}
- motionpath_update |= motionpath_need_update_object(t->scene, ob);
+ motionpath_update |= ED_transform_motionpath_need_update_object(t->scene, ob);
/* sets recalc flags fully, instead of flushing existing ones
* otherwise proxies don't function correctly
diff --cc source/blender/editors/transform/transform_convert_sequencer_image.c
index deae51a1149,fe87f0cc288..f0dd0a42ddb
--- a/source/blender/editors/transform/transform_convert_sequencer_image.c
+++ b/source/blender/editors/transform/transform_convert_sequencer_image.c
@@@ -199,6 -235,12 +235,12 @@@ void recalcData_sequencer_image(TransIn
if (t->mode == TFM_ROTATION) {
transform->rotation = tdseq->orig_rotation - t->values_final[0];
}
+
+ if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) {
- animrecord_check_state(t, &t->scene->id);
++ ED_transform_animrecord_check_state(t->scene, t->animtimer, &t->scene->id);
+ autokeyframe_sequencer_image(t->context, t->scene, transform, t->mode);
+ }
+
SEQ_relations_invalidate_cache_preprocessed(t->scene, seq);
}
}
diff --cc source/blender/windowmanager/xr/intern/wm_xr_mocap.c
index 6192343705e,00000000000..a7086a3cfa8
mode 100644,000000..100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_mocap.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_mocap.c
@@@ -1,272 -1,0 +1,272 @@@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** \file
+ * \ingroup wm
+ *
+ * \name Window-Manager XR Motion Capture
+ *
+ * API for XR motion capture objects.
+ */
+
+#include "BKE_context.h"
+#include "BKE_layer.h"
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+
+#include "DEG_depsgraph.h"
+
+#include "DNA_object_types.h"
+
+#include "ED_keyframing.h"
+#include "ED_object.h"
+#include "ED_screen.h"
+#include "ED_transform.h"
+
+#include "GHOST_C-api.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "WM_api.h"
+
+#include "wm_xr_intern.h"
+
+/* -------------------------------------------------------------------- */
+/** \name XR Motion Capture Objects
+ *
+ * List of XR motion capture objects. Stored in session settings and can be written to files.
+ * \{ */
+
+XrMotionCaptureObject *WM_xr_mocap_object_new(XrSessionSettings *settings, Object *ob)
+{
+ XrMotionCaptureObject *mocap_ob = WM_xr_mocap_object_find(settings, ob);
+
+ if (!mocap_ob) {
+ mocap_ob = MEM_callocN(sizeof(XrMotionCaptureObject), __func__);
+ mocap_ob->ob = ob;
+ BLI_addtail(&settings->mocap_objects, mocap_ob);
+ }
+
+ return mocap_ob;
+}
+
+void WM_xr_mocap_object_ensure_unique(XrSessionSettings *settings, XrMotionCaptureObject *mocap_ob)
+{
+ LISTBASE_FOREACH (XrMotionCaptureObject *, mocap_ob_other, &settings->mocap_objects) {
+ if ((mocap_ob_other != mocap_ob) && (mocap_ob_other->ob == mocap_ob->ob)) {
+ mocap_ob->ob = NULL;
+ return;
+ }
+ }
+}
+
+void WM_xr_mocap_object_remove(XrSessionSettings *settings, XrMotionCaptureObject *mocap_ob)
+{
+ int idx = BLI_findindex(&settings->mocap_objects, mocap_ob);
+
+ if (idx != -1) {
+ BLI_freelinkN(&settings->mocap_objects, mocap_ob);
+
+ if (idx <= settings->sel_mocap_object) {
+ if (--settings->sel_mocap_object < 0) {
+ settings->sel_mocap_object = 0;
+ }
+ }
+ }
+}
+
+XrMotionCaptureObject *WM_xr_mocap_object_find(const XrSessionSettings *settings, const Object *ob)
+{
+ return ob ? BLI_findptr(&settings->mocap_objects, ob, offsetof(XrMotionCaptureObject, ob)) :
+ NULL;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Motion Capture Runtime
+ *
+ * Runtime functions for motion capture object poses and autokeying.
+ * \{ */
+
+static void wm_xr_mocap_object_pose_get(const XrMotionCaptureObject *mocap_ob, GHOST_XrPose *pose)
+{
+ BLI_assert(mocap_ob->ob);
+ copy_v3_v3(pose->position, mocap_ob->ob->loc);
+ eul_to_quat(pose->orientation_quat, mocap_ob->ob->rot);
+}
+
+static void wm_xr_mocap_object_pose_set(const GHOST_XrPose *pose,
+ XrMotionCaptureObject *mocap_ob,
+ bool apply_offset)
+{
+ BLI_assert(mocap_ob->ob);
+
+ if (apply_offset) {
+ /* Convert offsets to pose (device) space. */
+ float loc_ofs[3], rot_ofs[4];
+ copy_v3_v3(loc_ofs, mocap_ob->location_offset);
+ mul_qt_v3(pose->orientation_quat, loc_ofs);
+
+ eul_to_quat(rot_ofs, mocap_ob->rotation_offset);
+ normalize_qt(rot_ofs);
+ invert_qt_normalized(rot_ofs);
+ mul_qt_qtqt(rot_ofs, pose->orientation_quat, rot_ofs);
+ normalize_qt(rot_ofs);
+
+ add_v3_v3v3(mocap_ob->ob->loc, p
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list