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:
@@ -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 */
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user