diff options
Diffstat (limited to 'source')
3 files changed, 37 insertions, 54 deletions
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 54533bf43e5..78d3f213102 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -538,6 +538,36 @@ static void applyObjectConstraintSize(TransInfo *t, } } +static void constraints_rotation_imp(TransInfo *t, + float axismtx[3][3], + float r_vec[3], + float *r_angle) +{ + BLI_assert(t->con.mode & CON_APPLY); + int mode = t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2); + + switch (mode) { + case CON_AXIS0: + case (CON_AXIS1 | CON_AXIS2): + negate_v3_v3(r_vec, axismtx[0]); + break; + case CON_AXIS1: + case (CON_AXIS0 | CON_AXIS2): + negate_v3_v3(r_vec, axismtx[1]); + break; + case CON_AXIS2: + case (CON_AXIS0 | CON_AXIS1): + negate_v3_v3(r_vec, axismtx[2]); + break; + } + /* don't flip axis if asked to or if num input */ + if (r_angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { + if (dot_v3v3(r_vec, t->viewinv[2]) > 0.0f) { + *r_angle = -(*r_angle); + } + } +} + /* * Generic callback for constant spatial constraints applied to rotations * @@ -551,33 +581,11 @@ static void applyObjectConstraintSize(TransInfo *t, * This insures that the rotation is always logically following the mouse. * (ie: not doing counterclockwise rotations when the mouse moves clockwise). */ - static void applyAxisConstraintRot( TransInfo *t, TransDataContainer *UNUSED(tc), TransData *td, float vec[3], float *angle) { if (!td && t->con.mode & CON_APPLY) { - int mode = t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2); - - switch (mode) { - case CON_AXIS0: - case (CON_AXIS1 | CON_AXIS2): - copy_v3_v3(vec, t->spacemtx[0]); - break; - case CON_AXIS1: - case (CON_AXIS0 | CON_AXIS2): - copy_v3_v3(vec, t->spacemtx[1]); - break; - case CON_AXIS2: - case (CON_AXIS0 | CON_AXIS1): - copy_v3_v3(vec, t->spacemtx[2]); - break; - } - /* don't flip axis if asked to or if num input */ - if (angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { - if (dot_v3v3(vec, t->viewinv[2]) > 0.0f) { - *angle = -(*angle); - } - } + constraints_rotation_imp(t, t->spacemtx, vec, angle); } } @@ -594,12 +602,10 @@ static void applyAxisConstraintRot( * This insures that the rotation is always logically following the mouse. * (ie: not doing counterclockwise rotations when the mouse moves clockwise). */ - static void applyObjectConstraintRot( TransInfo *t, TransDataContainer *tc, TransData *td, float vec[3], float *angle) { if (t->con.mode & CON_APPLY) { - int mode = t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2); float tmp_axismtx[3][3]; float(*axismtx)[3]; @@ -618,25 +624,7 @@ static void applyObjectConstraintRot( axismtx = td->axismtx; } - switch (mode) { - case CON_AXIS0: - case (CON_AXIS1 | CON_AXIS2): - copy_v3_v3(vec, axismtx[0]); - break; - case CON_AXIS1: - case (CON_AXIS0 | CON_AXIS2): - copy_v3_v3(vec, axismtx[1]); - break; - case CON_AXIS2: - case (CON_AXIS0 | CON_AXIS1): - copy_v3_v3(vec, axismtx[2]); - break; - } - if (angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { - if (dot_v3v3(vec, t->viewinv[2]) > 0.0f) { - *angle = -(*angle); - } - } + constraints_rotation_imp(t, axismtx, vec, angle); } } diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c index b5399b208e2..166fded5209 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.c +++ b/source/blender/editors/transform/transform_gizmo_3d.c @@ -1322,16 +1322,16 @@ void drawDial3d(const TransInfo *t) if (tc->mode & CON_APPLY) { if (tc->mode & CON_AXIS0) { axis_idx = MAN_AXIS_ROT_X; - negate_v3_v3(mat_basis[2], t->spacemtx[0]); + copy_v3_v3(mat_basis[2], t->spacemtx[0]); } else if (tc->mode & CON_AXIS1) { axis_idx = MAN_AXIS_ROT_Y; - negate_v3_v3(mat_basis[2], t->spacemtx[1]); + copy_v3_v3(mat_basis[2], t->spacemtx[1]); } else { BLI_assert((tc->mode & CON_AXIS2) != 0); axis_idx = MAN_AXIS_ROT_Z; - negate_v3_v3(mat_basis[2], t->spacemtx[2]); + copy_v3_v3(mat_basis[2], t->spacemtx[2]); } } else { @@ -1384,7 +1384,7 @@ void drawDial3d(const TransInfo *t) false, &(struct Dial3dParams){ .draw_options = ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_VALUE, - .angle_delta = t->values[0], + .angle_delta = t->values_final[0], .angle_increment = increment, }); diff --git a/source/blender/editors/transform/transform_mode_rotate.c b/source/blender/editors/transform/transform_mode_rotate.c index e81ea8b0a0d..fa02e5382a7 100644 --- a/source/blender/editors/transform/transform_mode_rotate.c +++ b/source/blender/editors/transform/transform_mode_rotate.c @@ -200,12 +200,7 @@ static void applyRotation(TransInfo *t, const int UNUSED(mval[2])) t->con.applyRot(t, NULL, NULL, axis_final, NULL); } else { - copy_v3_v3(axis_final, t->spacemtx[t->orient_axis]); - if (!(t->flag & T_INPUT_IS_VALUES_FINAL) && (dot_v3v3(axis_final, t->viewinv[2]) > 0.0f)) { - /* The input is obtained according to the position of the mouse. - * Flip to better match the movement. */ - final *= -1; - } + negate_v3_v3(axis_final, t->spacemtx[t->orient_axis]); } if (applyNumInput(&t->num, &final)) { |