[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