Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/transform/transform_constraints.c76
-rw-r--r--source/blender/editors/transform/transform_gizmo_3d.c8
-rw-r--r--source/blender/editors/transform/transform_mode_rotate.c7
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)) {