fix for [#34283] wasn't working in my tests (attached to original report),

made bone roll get compatible angle values with the original roll.
This commit is contained in:
Campbell Barton 2013-02-19 04:37:28 +00:00
parent 926e0e7eb7
commit c68d5325d0
3 changed files with 11 additions and 1 deletions

@ -186,6 +186,8 @@ float fov_to_focallength(float fov, float sensor);
float angle_wrap_rad(float angle);
float angle_wrap_deg(float angle);
float angle_compat_rad(float angle, float angle_compat);
int mat3_from_axis_conversion(int from_forward, int from_up, int to_forward, int to_up,
float r_mat[3][3]);

@ -1740,6 +1740,12 @@ float angle_wrap_deg(float angle)
return mod_inline(angle + 180.0f, 360.0f) - 180.0f;
}
/* returns an angle compatible with angle_compat */
float angle_compat_rad(float angle, float angle_compat)
{
return angle + (floorf(((angle_compat - angle) / (float)M_PI) + 0.5f)) * (float)M_PI;
}
/* axis conversion */
static float _axis_convert_matrix[23][3][3] = {
{{-1.0, 0.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}},

@ -809,6 +809,7 @@ static void recalcData_view3d(TransInfo *t)
if (td->extra) {
float vec[3], up_axis[3];
float qrot[4];
float roll;
bool ztrans_hack = false;
ebo = td->extra;
@ -842,7 +843,8 @@ static void recalcData_view3d(TransInfo *t)
ztrans_hack = compare_v3v3(tdelta, ZAXIS_REF, 0.1f);
}
ebo->roll = ED_rollBoneToVector(ebo, up_axis, ztrans_hack);
roll = ED_rollBoneToVector(ebo, up_axis, ztrans_hack);
ebo->roll = angle_compat_rad(roll, ebo->roll);
}
}
}