diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2007-12-06 22:44:17 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2007-12-06 22:44:17 +0300 |
commit | 37d11907d0a96a68d1200bf57c6efdb31f4692e4 (patch) | |
tree | 74bcebd6e42354074a32bd5822ee7941bd7ebd85 | |
parent | 51322964f4e00891621e249e5bd15e93a2d2ee06 (diff) |
Bugfix for IK locked axes with an initial rotation, gave wrong
starting angle in some cases, but wasn't always noticeable due
to the IK solver changing it anyway.
Bugfix for hidden bones in pose mode still being active, and
preventing other bones from becoming active.
-rw-r--r-- | intern/iksolver/intern/IK_QSegment.cpp | 6 | ||||
-rw-r--r-- | source/blender/src/editarmature.c | 3 |
2 files changed, 5 insertions, 4 deletions
diff --git a/intern/iksolver/intern/IK_QSegment.cpp b/intern/iksolver/intern/IK_QSegment.cpp index a5217ed91d6..bf38c369363 100644 --- a/intern/iksolver/intern/IK_QSegment.cpp +++ b/intern/iksolver/intern/IK_QSegment.cpp @@ -61,11 +61,11 @@ static MT_Scalar EulerAngleFromMatrix(const MT_Matrix3x3& R, int axis) MT_Scalar t = sqrt(R[0][0]*R[0][0] + R[0][1]*R[0][1]); if (t > 16.0*MT_EPSILON) { - if (axis == 0) return atan2(R[1][2], R[2][2]); + if (axis == 0) return -atan2(R[1][2], R[2][2]); else if(axis == 1) return atan2(-R[0][2], t); - else return atan2(R[0][1], R[0][0]); + else return -atan2(R[0][1], R[0][0]); } else { - if (axis == 0) return atan2(-R[2][1], R[1][1]); + if (axis == 0) return -atan2(-R[2][1], R[1][1]); else if(axis == 1) return atan2(-R[0][2], t); else return 0.0f; } diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c index 9dcb190509f..66ee7a83f3a 100644 --- a/source/blender/src/editarmature.c +++ b/source/blender/src/editarmature.c @@ -2947,7 +2947,7 @@ static int hide_selected_pose_bone(Object *ob, Bone *bone, void *ptr) if(arm->layer & bone->layer) { if (bone->flag & BONE_SELECTED) { bone->flag |= BONE_HIDDEN_P; - bone->flag &= ~BONE_SELECTED; + bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); } } return 0; @@ -2977,6 +2977,7 @@ static int hide_unselected_pose_bone(Object *ob, Bone *bone, void *ptr) if(arm->layer & bone->layer) { if (~bone->flag & BONE_SELECTED) { bone->flag |= BONE_HIDDEN_P; + bone->flag &= ~BONE_ACTIVE; } } return 0; |