Fix for 3D view transform: flipped rotation direction for numeric input

The rotation direction was flipped recently.

This meant that rotation on a single axis gave negative results compared
with previous Blender releases.

This partially reverts a9b53daf23.

Differential Revision: https://developer.blender.org/D10299
This commit is contained in:
2021-02-04 10:43:57 -03:00
parent bec08621d6
commit 760a16b88b
3 changed files with 13 additions and 15 deletions

View File

@@ -560,15 +560,15 @@ static void constraints_rotation_imp(TransInfo *t,
switch (mode) { switch (mode) {
case CON_AXIS0: case CON_AXIS0:
case (CON_AXIS1 | CON_AXIS2): case (CON_AXIS1 | CON_AXIS2):
negate_v3_v3(r_vec, axismtx[0]); copy_v3_v3(r_vec, axismtx[0]);
break; break;
case CON_AXIS1: case CON_AXIS1:
case (CON_AXIS0 | CON_AXIS2): case (CON_AXIS0 | CON_AXIS2):
negate_v3_v3(r_vec, axismtx[1]); copy_v3_v3(r_vec, axismtx[1]);
break; break;
case CON_AXIS2: case CON_AXIS2:
case (CON_AXIS0 | CON_AXIS1): case (CON_AXIS0 | CON_AXIS1):
negate_v3_v3(r_vec, axismtx[2]); copy_v3_v3(r_vec, axismtx[2]);
break; break;
} }
/* don't flip axis if asked to or if num input */ /* don't flip axis if asked to or if num input */

View File

@@ -428,7 +428,6 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
BLI_assert(is_zero_v4(t->values_modal_offset)); BLI_assert(is_zero_v4(t->values_modal_offset));
bool use_orient_axis = false;
bool t_values_set_is_array = false; bool t_values_set_is_array = false;
if (op && (prop = RNA_struct_find_property(op->ptr, "value")) && if (op && (prop = RNA_struct_find_property(op->ptr, "value")) &&
@@ -453,11 +452,6 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
} }
} }
if (op && (prop = RNA_struct_find_property(op->ptr, "orient_axis"))) {
t->orient_axis = RNA_property_enum_get(op->ptr, prop);
use_orient_axis = true;
}
if (op && (prop = RNA_struct_find_property(op->ptr, "constraint_axis"))) { if (op && (prop = RNA_struct_find_property(op->ptr, "constraint_axis"))) {
bool constraint_axis[3] = {false, false, false}; bool constraint_axis[3] = {false, false, false};
if (t->flag & T_INPUT_IS_VALUES_FINAL) { if (t->flag & T_INPUT_IS_VALUES_FINAL) {
@@ -466,9 +460,6 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
* orientation is more intuitive in the Redo Panel. */ * orientation is more intuitive in the Redo Panel. */
constraint_axis[0] = constraint_axis[1] = constraint_axis[2] = true; constraint_axis[0] = constraint_axis[1] = constraint_axis[2] = true;
} }
else if (use_orient_axis) {
constraint_axis[t->orient_axis] = true;
}
} }
else if (RNA_property_is_set(op->ptr, prop)) { else if (RNA_property_is_set(op->ptr, prop)) {
RNA_property_boolean_get_array(op->ptr, prop, constraint_axis); RNA_property_boolean_get_array(op->ptr, prop, constraint_axis);
@@ -497,6 +488,8 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
short orient_type_set = V3D_ORIENT_GLOBAL; short orient_type_set = V3D_ORIENT_GLOBAL;
short orient_type_matrix_set = -1; short orient_type_matrix_set = -1;
bool use_orient_axis = false;
if ((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW)) { if ((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW)) {
TransformOrientationSlot *orient_slot = &t->scene->orientation_slots[SCE_ORIENT_DEFAULT]; TransformOrientationSlot *orient_slot = &t->scene->orientation_slots[SCE_ORIENT_DEFAULT];
orient_type_scene = orient_slot->type; orient_type_scene = orient_slot->type;
@@ -508,6 +501,11 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
short orient_type_default = orient_type_scene; short orient_type_default = orient_type_scene;
if (op && (prop = RNA_struct_find_property(op->ptr, "orient_axis"))) {
t->orient_axis = RNA_property_enum_get(op->ptr, prop);
use_orient_axis = true;
}
if (op && (prop = RNA_struct_find_property(op->ptr, "orient_axis_ortho"))) { if (op && (prop = RNA_struct_find_property(op->ptr, "orient_axis_ortho"))) {
t->orient_axis_ortho = RNA_property_enum_get(op->ptr, prop); t->orient_axis_ortho = RNA_property_enum_get(op->ptr, prop);
} }

View File

@@ -1322,16 +1322,16 @@ void drawDial3d(const TransInfo *t)
if (tc->mode & CON_APPLY) { if (tc->mode & CON_APPLY) {
if (tc->mode & CON_AXIS0) { if (tc->mode & CON_AXIS0) {
axis_idx = MAN_AXIS_ROT_X; axis_idx = MAN_AXIS_ROT_X;
copy_v3_v3(mat_basis[2], t->spacemtx[0]); negate_v3_v3(mat_basis[2], t->spacemtx[0]);
} }
else if (tc->mode & CON_AXIS1) { else if (tc->mode & CON_AXIS1) {
axis_idx = MAN_AXIS_ROT_Y; axis_idx = MAN_AXIS_ROT_Y;
copy_v3_v3(mat_basis[2], t->spacemtx[1]); negate_v3_v3(mat_basis[2], t->spacemtx[1]);
} }
else { else {
BLI_assert((tc->mode & CON_AXIS2) != 0); BLI_assert((tc->mode & CON_AXIS2) != 0);
axis_idx = MAN_AXIS_ROT_Z; axis_idx = MAN_AXIS_ROT_Z;
copy_v3_v3(mat_basis[2], t->spacemtx[2]); negate_v3_v3(mat_basis[2], t->spacemtx[2]);
} }
} }
else { else {