commit from r27250 to fix bug #21433, broke local axis rotation for pose bones and...
[blender.git] / source / blender / editors / transform / transform.c
index 5ff80a62ceea52ce3dd734f298206e006186b593..e4639b268de3328b5271ebe724b64a805ec7d531 100644 (file)
@@ -721,7 +721,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
                }
 
                // Modal numinput events
-               t->redraw |= handleNumInput(&(t->num), event, t->snap[1]);
+               t->redraw |= handleNumInput(&(t->num), event);
        }
        /* else do non-mapped events */
        else if (event->val==KM_PRESS) {
@@ -974,7 +974,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
                }
 
                // Numerical input events
-               t->redraw |= handleNumInput(&(t->num), event, t->snap[1]);
+               t->redraw |= handleNumInput(&(t->num), event);
 
                // NDof input events
                switch(handleNDofInput(&(t->ndof), event))
@@ -2081,6 +2081,8 @@ void initWarp(TransInfo *t)
        t->snap[1] = 5.0f;
        t->snap[2] = 1.0f;
        
+       t->num.increment = 1.0f;
+
        t->flag |= T_NO_CONSTRAINT;
        
        /* we need min/max in view space */
@@ -2237,6 +2239,8 @@ void initShear(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
        
+       t->num.increment = 0.1f;
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -2363,6 +2367,8 @@ void initResize(TransInfo *t)
        t->snap[0] = 0.0f;
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerResize(TransInfo *t, float vec[3], char *str) {
@@ -2614,6 +2620,8 @@ void initToSphere(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
        
+       t->num.increment = t->snap[1];
+
        t->num.flag |= NUM_NULL_ONE | NUM_NO_NEGATIVE;
        t->flag |= T_NO_CONSTRAINT;
        
@@ -2705,11 +2713,12 @@ void initRotation(TransInfo *t)
        t->snap[1] = (float)((5.0/180)*M_PI);
        t->snap[2] = t->snap[1] * 0.2f;
        
+       t->num.increment = 1.0f;
+
        if (t->flag & T_2D_EDIT)
                t->flag |= T_NO_CONSTRAINT;
 
-       VECCOPY(t->axis, t->viewinv[2]);
-       mul_v3_fl(t->axis, -1.0f);
+       negate_v3_v3(t->axis, t->viewinv[2]);
        normalize_v3(t->axis);
 }
 
@@ -2963,8 +2972,12 @@ int Rotation(TransInfo *t, short mval[2])
        
        snapGrid(t, &final);
        
-       if (t->con.applyRot) {
+       if ((t->con.mode & CON_APPLY) && t->con.applyRot) {
                t->con.applyRot(t, NULL, t->axis, &final);
+       } else {
+               /* reset axis if constraint is not set */
+               negate_v3_v3(t->axis, t->viewinv[2]);
+               normalize_v3(t->axis);
        }
        
        applySnapping(t, &final);
@@ -2991,6 +3004,9 @@ int Rotation(TransInfo *t, short mval[2])
                sprintf(str, "Rot: %.2f%s %s", 180.0*final/M_PI, t->con.text, t->proptext);
        }
        
+       // fixes [#21433] but breaks, typical local axis rotation - campbell
+       // t->values[0] = final;
+
        vec_rot_to_mat3( mat, t->axis, final);
        
        // TRANSFORM_FIX_ME
@@ -3027,6 +3043,8 @@ void initTrackball(TransInfo *t)
        t->snap[1] = (float)((5.0/180)*M_PI);
        t->snap[2] = t->snap[1] * 0.2f;
 
+       t->num.increment = 1.0f;
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -3144,6 +3162,8 @@ void initTranslation(TransInfo *t)
                t->snap[0] = 0.0f;
                t->snap[1] = t->snap[2] = 1.0f;
        }
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerTranslation(TransInfo *t, float vec[3], char *str) {
@@ -3334,6 +3354,8 @@ void initShrinkFatten(TransInfo *t)
                t->snap[1] = 1.0f;
                t->snap[2] = t->snap[1] * 0.1f;
 
+               t->num.increment = t->snap[1];
+
                t->flag |= T_NO_CONSTRAINT;
        }
 }
@@ -3408,6 +3430,8 @@ void initTilt(TransInfo *t)
        t->snap[1] = (float)((5.0/180)*M_PI);
        t->snap[2] = t->snap[1] * 0.2f;
 
+       t->num.increment = t->snap[1];
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -3477,6 +3501,8 @@ void initCurveShrinkFatten(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
 
+       t->num.increment = t->snap[1];
+
        t->flag |= T_NO_ZERO;
        t->num.flag |= NUM_NO_ZERO;
 
@@ -3546,6 +3572,8 @@ void initPushPull(TransInfo *t)
        t->snap[0] = 0.0f;
        t->snap[1] = 1.0f;
        t->snap[2] = t->snap[1] * 0.1f;
+
+       t->num.increment = t->snap[1];
 }
 
 
@@ -3634,6 +3662,8 @@ void initBevel(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
 
+       t->num.increment = t->snap[1];
+
        /* DON'T KNOW WHY THIS IS NEEDED */
        if (G.editBMesh->imval[0] == 0 && G.editBMesh->imval[1] == 0) {
                /* save the initial mouse co */
@@ -3743,6 +3773,8 @@ void initBevelWeight(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
 
+       t->num.increment = t->snap[1];
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -3814,6 +3846,8 @@ void initCrease(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
 
+       t->num.increment = t->snap[1];
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -3888,6 +3922,8 @@ void initBoneSize(TransInfo *t)
        t->snap[0] = 0.0f;
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerBoneSize(TransInfo *t, float vec[3], char *str) {
@@ -4004,6 +4040,8 @@ void initBoneEnvelope(TransInfo *t)
        t->snap[1] = 0.1f;
        t->snap[2] = t->snap[1] * 0.1f;
        
+       t->num.increment = t->snap[1];
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -4581,6 +4619,8 @@ void initEdgeSlide(TransInfo *t)
        t->snap[1] = (float)((5.0/180)*M_PI);
        t->snap[2] = t->snap[1] * 0.2f;
 
+       t->num.increment = t->snap[1];
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -4749,6 +4789,8 @@ void initBoneRoll(TransInfo *t)
        t->snap[1] = (float)((5.0/180)*M_PI);
        t->snap[2] = t->snap[1] * 0.2f;
 
+       t->num.increment = 1.0f;
+
        t->flag |= T_NO_CONSTRAINT;
 }
 
@@ -4809,6 +4851,8 @@ void initBakeTime(TransInfo *t)
        t->snap[0] = 0.0f;
        t->snap[1] = 1.0f;
        t->snap[2] = t->snap[1] * 0.1f;
+
+       t->num.increment = t->snap[1];
 }
 
 int BakeTime(TransInfo *t, short mval[2])
@@ -5026,6 +5070,8 @@ void initSeqSlide(TransInfo *t)
        t->snap[0] = 0.0f;
        t->snap[1] = floor(t->scene->r.frs_sec / t->scene->r.frs_sec_base);
        t->snap[2] = 10.0f;
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerSeqSlide(TransInfo *t, float val[2], char *str)
@@ -5241,6 +5287,8 @@ void initTimeTranslate(TransInfo *t)
        /* initialise snap like for everything else */
        t->snap[0] = 0.0f;
        t->snap[1] = t->snap[2] = 1.0f;
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerTimeTranslate(TransInfo *t, char *str)
@@ -5387,6 +5435,8 @@ void initTimeSlide(TransInfo *t)
        /* initialise snap like for everything else */
        t->snap[0] = 0.0f;
        t->snap[1] = t->snap[2] = 1.0f;
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerTimeSlide(TransInfo *t, float sval, char *str)
@@ -5519,6 +5569,8 @@ void initTimeScale(TransInfo *t)
        /* initialise snap like for everything else */
        t->snap[0] = 0.0f;
        t->snap[1] = t->snap[2] = 1.0f;
+
+       t->num.increment = t->snap[1];
 }
 
 static void headerTimeScale(TransInfo *t, char *str) {