[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