[Bf-blender-cvs] [d9c727e000b] temp-transform-conversions-split: Move Transform Conversion Amrmature to its own file

mano-wii noreply at git.blender.org
Wed Sep 4 20:48:07 CEST 2019


Commit: d9c727e000bb66079201e7e232b71c223524187b
Author: mano-wii
Date:   Wed Sep 4 15:30:16 2019 -0300
Branches: temp-transform-conversions-split
https://developer.blender.org/rBd9c727e000bb66079201e7e232b71c223524187b

Move Transform Conversion Amrmature to its own file

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

M	source/blender/editors/transform/CMakeLists.txt
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/transform/transform_conversions.h
A	source/blender/editors/transform/transform_conversions_armature.c
M	source/blender/editors/transform/transform_gizmo_3d.c

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

diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index 91ba72e8517..78c358bb0cd 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -41,6 +41,7 @@ set(SRC
   transform.c
   transform_constraints.c
   transform_conversions.c
+  transform_conversions_armature.c
   transform_conversions_mesh.c
   transform_generics.c
   transform_gizmo_2d.c
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index ade09d88c5d..2d24a8f10c8 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -95,6 +95,7 @@
 #include "BLT_translation.h"
 
 #include "transform.h"
+#include "transform_conversions.h"
 
 /* Disabling, since when you type you know what you are doing,
  * and being able to set it to zero is handy. */
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 45efde24d83..8898fcef8ed 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -940,14 +940,8 @@ void sort_trans_data_dist(TransInfo *t);
 void special_aftertrans_update(struct bContext *C, TransInfo *t);
 int special_transform_moving(TransInfo *t);
 
-void transform_autoik_update(TransInfo *t, short mode);
 bool transdata_check_local_islands(TransInfo *t, short around);
 
-int count_set_pose_transflags(struct Object *ob,
-                              const int mode,
-                              const short around,
-                              bool has_translate_rotate[2]);
-
 /* Auto-keyframe applied after transform, returns true if motion paths need to be updated. */
 void autokeyframe_object(struct bContext *C,
                          struct Scene *scene,
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 242d0ce2bab..a9c3098d7ac 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -53,10 +53,8 @@
 #include "BLI_rect.h"
 #include "BLI_kdtree.h"
 
-#include "BKE_action.h"
 #include "BKE_animsys.h"
 #include "BKE_armature.h"
-#include "BKE_constraint.h"
 #include "BKE_context.h"
 #include "BKE_curve.h"
 #include "BKE_fcurve.h"
@@ -120,7 +118,7 @@
  * Transforming around ourselves is no use, fallback to individual origins,
  * useful for curve/armatures.
  */
-static void transform_around_single_fallback(TransInfo *t)
+void transform_around_single_fallback(TransInfo *t)
 {
   if ((t->data_len_all == 1) &&
       (ELEM(t->around, V3D_AROUND_CENTER_BOUNDS, V3D_AROUND_CENTER_MEDIAN, V3D_AROUND_ACTIVE)) &&
@@ -129,9 +127,6 @@ static void transform_around_single_fallback(TransInfo *t)
   }
 }
 
-/* local function prototype - for Object/Bone Constraints */
-static bool constraints_list_needinv(TransInfo *t, ListBase *list);
-
 /* ************************** Functions *************************** */
 
 static int trans_data_compare_dist(const void *a, const void *b)
@@ -607,25 +602,6 @@ static void createTransEdge(TransInfo *t)
 
 /* ********************* pose mode ************* */
 
-static bKinematicConstraint *has_targetless_ik(bPoseChannel *pchan)
-{
-  bConstraint *con = pchan->constraints.first;
-
-  for (; con; con = con->next) {
-    if (con->type == CONSTRAINT_TYPE_KINEMATIC && (con->enforce != 0.0f)) {
-      bKinematicConstraint *data = con->data;
-
-      if (data->tar == NULL) {
-        return data;
-      }
-      if (data->tar->type == OB_ARMATURE && data->subtarget[0] == 0) {
-        return data;
-      }
-    }
-  }
-  return NULL;
-}
-
 static short apply_targetless_ik(Object *ob)
 {
   bPoseChannel *pchan, *parchan, *chanlist[256];
@@ -710,159 +686,6 @@ static short apply_targetless_ik(Object *ob)
   return apply;
 }
 
-static void add_pose_transdata(
-    TransInfo *t, bPoseChannel *pchan, Object *ob, TransDataContainer *tc, TransData *td)
-{
-  Bone *bone = pchan->bone;
-  float pmat[3][3], omat[3][3];
-  float cmat[3][3], tmat[3][3];
-  float vec[3];
-
-  copy_v3_v3(vec, pchan->pose_mat[3]);
-  copy_v3_v3(td->center, vec);
-
-  td->ob = ob;
-  td->flag = TD_SELECTED;
-  if (bone->flag & BONE_HINGE_CHILD_TRANSFORM) {
-    td->flag |= TD_NOCENTER;
-  }
-
-  if (bone->flag & BONE_TRANSFORM_CHILD) {
-    td->flag |= TD_NOCENTER;
-    td->flag |= TD_NO_LOC;
-  }
-
-  td->protectflag = pchan->protectflag;
-
-  td->loc = pchan->loc;
-  copy_v3_v3(td->iloc, pchan->loc);
-
-  td->ext->size = pchan->size;
-  copy_v3_v3(td->ext->isize, pchan->size);
-
-  if (pchan->rotmode > 0) {
-    td->ext->rot = pchan->eul;
-    td->ext->rotAxis = NULL;
-    td->ext->rotAngle = NULL;
-    td->ext->quat = NULL;
-
-    copy_v3_v3(td->ext->irot, pchan->eul);
-  }
-  else if (pchan->rotmode == ROT_MODE_AXISANGLE) {
-    td->ext->rot = NULL;
-    td->ext->rotAxis = pchan->rotAxis;
-    td->ext->rotAngle = &pchan->rotAngle;
-    td->ext->quat = NULL;
-
-    td->ext->irotAngle = pchan->rotAngle;
-    copy_v3_v3(td->ext->irotAxis, pchan->rotAxis);
-  }
-  else {
-    td->ext->rot = NULL;
-    td->ext->rotAxis = NULL;
-    td->ext->rotAngle = NULL;
-    td->ext->quat = pchan->quat;
-
-    copy_qt_qt(td->ext->iquat, pchan->quat);
-  }
-  td->ext->rotOrder = pchan->rotmode;
-
-  /* proper way to get parent transform + own transform + constraints transform */
-  copy_m3_m4(omat, ob->obmat);
-
-  /* New code, using "generic" BKE_bone_parent_transform_calc_from_pchan(). */
-  {
-    BoneParentTransform bpt;
-    float rpmat[3][3];
-
-    BKE_bone_parent_transform_calc_from_pchan(pchan, &bpt);
-    if (t->mode == TFM_TRANSLATION) {
-      copy_m3_m4(pmat, bpt.loc_mat);
-    }
-    else {
-      copy_m3_m4(pmat, bpt.rotscale_mat);
-    }
-
-    /* Grrr! Exceptional case: When translating pose bones that are either Hinge or NoLocal,
-     * and want align snapping, we just need both loc_mat and rotscale_mat.
-     * So simply always store rotscale mat in td->ext, and always use it to apply rotations...
-     * Ugly to need such hacks! :/ */
-    copy_m3_m4(rpmat, bpt.rotscale_mat);
-
-    if (constraints_list_needinv(t, &pchan->constraints)) {
-      copy_m3_m4(tmat, pchan->constinv);
-      invert_m3_m3(cmat, tmat);
-      mul_m3_series(td->mtx, cmat, omat, pmat);
-      mul_m3_series(td->ext->r_mtx, cmat, omat, rpmat);
-    }
-    else {
-      mul_m3_series(td->mtx, omat, pmat);
-      mul_m3_series(td->ext->r_mtx, omat, rpmat);
-    }
-    invert_m3_m3(td->ext->r_smtx, td->ext->r_mtx);
-  }
-
-  pseudoinverse_m3_m3(td->smtx, td->mtx, PSEUDOINVERSE_EPSILON);
-
-  /* exceptional case: rotate the pose bone which also applies transformation
-   * when a parentless bone has BONE_NO_LOCAL_LOCATION [] */
-  if (!ELEM(t->mode, TFM_TRANSLATION, TFM_RESIZE) &&
-      (pchan->bone->flag & BONE_NO_LOCAL_LOCATION)) {
-    if (pchan->parent) {
-      /* same as td->smtx but without pchan->bone->bone_mat */
-      td->flag |= TD_PBONE_LOCAL_MTX_C;
-      mul_m3_m3m3(td->ext->l_smtx, pchan->bone->bone_mat, td->smtx);
-    }
-    else {
-      td->flag |= TD_PBONE_LOCAL_MTX_P;
-    }
-  }
-
-  /* for axismat we use bone's own transform */
-  copy_m3_m4(pmat, pchan->pose_mat);
-  mul_m3_m3m3(td->axismtx, omat, pmat);
-  normalize_m3(td->axismtx);
-
-  if (ELEM(t->mode, TFM_BONESIZE, TFM_BONE_ENVELOPE_DIST)) {
-    bArmature *arm = tc->poseobj->data;
-
-    if ((t->mode == TFM_BONE_ENVELOPE_DIST) || (arm->drawtype == ARM_ENVELOPE)) {
-      td->loc = NULL;
-      td->val = &bone->dist;
-      td->ival = bone->dist;
-    }
-    else {
-      // abusive storage of scale in the loc pointer :)
-      td->loc = &bone->xwidth;
-      copy_v3_v3(td->iloc, td->loc);
-      td->val = NULL;
-    }
-  }
-
-  /* in this case we can do target-less IK grabbing */
-  if (t->mode == TFM_TRANSLATION) {
-    bKinematicConstraint *data = has_targetless_ik(pchan);
-    if (data) {
-      if (data->flag & CONSTRAINT_IK_TIP) {
-        copy_v3_v3(data->grabtarget, pchan->pose_tail);
-      }
-      else {
-        copy_v3_v3(data->grabtarget, pchan->pose_head);
-      }
-      td->loc = data->grabtarget;
-      copy_v3_v3(td->iloc, td->loc);
-      data->flag |= CONSTRAINT_IK_AUTO;
-
-      /* only object matrix correction */
-      copy_m3_m3(td->mtx, omat);
-      pseudoinverse_m3_m3(td->smtx, td->mtx, PSEUDOINVERSE_EPSILON);
-    }
-  }
-
-  /* store reference to first constraint */
-  td->con = pchan->constraints.first;
-}
-
 static void bone_children_clear_transflag(int mode, short around, ListBase *lb)
 {
   Bone *bone = lb->first;
@@ -1080,721 +903,6 @@ static void pose_grab_with_ik_clear(Main *bmain, Object *ob)
   }
 }
 
-/* adds the IK to pchan - returns if added */
-static short pose_grab_with_ik_add(bPoseChannel *pchan)
-{
-  bKinematicConstraint *targetless = NULL;
-  bKinematicConstraint *data;
-  bConstraint *con;
-
-  /* Sanity check */
-  if (pchan == NULL) {
-    return 0;
-  }
-
-  /* Rule: not if there's already an IK on this channel */
-  for (con = pchan->constraints.first; con; con = con->next) {
-    if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
-      data = con->data;
-
-      if (data->tar == NULL || (data->tar->type == OB_ARMATURE && data->subtarget[0] == '\0')) {
-        /* make reference to constraint to base things off later
-         * (if it's the last targetless constraint encountered) */
-        targetless = (bKinematicConstraint *)con->data;
-
-        /* but, if this is a targetless IK, we make it auto anyway (for the children loop) */
-        if (con->enforce != 0.0f) {
-          data->flag |= CONSTRAINT_IK_AUTO;
-
-          /* if no chain length has been specified,
-           * just make things obey standard rotation locks too */
-          if (data->rootbone == 0) {
-            for (; pchan; pchan = pchan->parent) {
-              /* here, we set ik-settings for bone from pchan->protectflag */
-              // XXX: careful with quats/axis-angle rotations where we're locking 4d components
-              if (pchan->protectflag & OB_LOCK_ROTX) {
-                pchan->ikflag |= BONE_IK_NO_XDOF_TEMP;
-   

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list