Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-02-02 12:04:06 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-02 12:04:06 +0400
commitab4dbc6d7844f49292d1811bef1fa782e1002f4e (patch)
treebd9f329724ec0f51aecc97a50a9d6f3f9c6ccfe5 /source/blender/blenkernel/intern
parent38ad71f0fa1a7f91aa8721445b36ae11ff9a6f93 (diff)
fix [#30051] Copy Scale constraint overrides Inherit Scale from parent
space conversion in constraint code ignored inherit scale option.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/constraint.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 59667743520..59374985d7d 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -287,8 +287,17 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
invert_m4_m4(imat, diff_mat);
}
else {
+ if (pchan->bone->flag & BONE_NO_SCALE) {
+ float tmat[4][4];
+ copy_m4_m4(tmat, pchan->parent->pose_mat);
+ normalize_m4(tmat);
+ mult_m4_m4m4(diff_mat, tmat, offs_bone);
+ }
+ else {
+ mult_m4_m4m4(diff_mat, pchan->parent->pose_mat, offs_bone);
+ }
+
/* pose_mat = par_pose_mat * bone_mat * chan_mat */
- mult_m4_m4m4(diff_mat, pchan->parent->pose_mat, offs_bone);
invert_m4_m4(imat, diff_mat);
}
}
@@ -348,7 +357,16 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
}
else {
/* pose_mat = par_pose_mat * bone_mat * chan_mat */
- mult_m4_m4m4(diff_mat, pchan->parent->pose_mat, offs_bone);
+ if (pchan->bone->flag & BONE_NO_SCALE) {
+ float tmat[4][4];
+ copy_m4_m4(tmat, pchan->parent->pose_mat);
+ normalize_m4(tmat);
+ mult_m4_m4m4(diff_mat, tmat, offs_bone);
+ }
+ else {
+ mult_m4_m4m4(diff_mat, pchan->parent->pose_mat, offs_bone);
+ }
+
copy_m4_m4(tempmat, mat);
mult_m4_m4m4(mat, diff_mat, tempmat);
}