Transform: fix redo rotate adjusting orientation
authorCampbell Barton <ideasman42@gmail.com>
Wed, 27 Feb 2019 15:30:26 +0000 (02:30 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 27 Feb 2019 15:37:17 +0000 (02:37 +1100)
Regression in recent update.
Also de-duplicate orientation matrix initialization.

source/blender/editors/transform/transform.c
source/blender/editors/transform/transform_generics.c
source/blender/editors/transform/transform_orientations.c

index 878f938..6f97946 100644 (file)
@@ -2226,8 +2226,10 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
                 * so use the orientation in the constraint if set */
 
                /* Use 'orient_matrix' instead. */
-               if (orientation != V3D_ORIENT_CUSTOM_MATRIX) {
-                       RNA_property_enum_set(op->ptr, prop, orientation);
+               if (t->flag & T_MODAL) {
+                       if (orientation != V3D_ORIENT_CUSTOM_MATRIX) {
+                               RNA_property_enum_set(op->ptr, prop, orientation);
+                       }
                }
        }
 
@@ -3459,10 +3461,6 @@ static void initShear(TransInfo *t)
                t->orient_axis = 2;
                t->orient_axis_ortho = 1;
        }
-       if (t->orient_matrix_is_set == false) {
-               t->orient_matrix_is_set = true;
-               copy_m3_m3(t->orient_matrix, t->spacemtx);
-       }
 
        initShear_mouseInputMode(t);
 
@@ -4166,18 +4164,6 @@ static void initRotation(TransInfo *t)
 
        if (t->flag & T_2D_EDIT)
                t->flag |= T_NO_CONSTRAINT;
-
-       if ((t->options & CTX_PAINT_CURVE) == 0) {
-               if (t->orient_matrix_is_set == false) {
-                       t->orient_matrix_is_set = true;
-                       t->orientation.unset = V3D_ORIENT_VIEW;
-                       copy_m3_m4(t->orient_matrix, t->viewinv);
-                       normalize_m3(t->orient_matrix);
-                       negate_m3(t->orient_matrix);
-               }
-       }
-
-       t->orient_axis = 2;
 }
 
 /* Used by Transform Rotation and Transform Normal Rotation */
@@ -4692,16 +4678,6 @@ static void initNormalRotation(TransInfo *t)
 
                storeCustomLNorValue(tc, bm);
        }
-
-       if (t->orient_matrix_is_set == false) {
-               t->orient_matrix_is_set = true;
-               t->orientation.unset = V3D_ORIENT_VIEW;
-               copy_m3_m4(t->orient_matrix, t->viewinv);
-               normalize_m3(t->orient_matrix);
-               negate_m3(t->orient_matrix);
-       }
-
-       t->orient_axis = 2;
 }
 
 /* Works by getting custom normal from clnor_data, transform, then store */
index 46eeb04..4039252 100644 (file)
@@ -1342,6 +1342,10 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
        /* Leave 't->orient_matrix_is_set' to false,
         * so we overwrite it when we have a useful value. */
 
+       /* Default to rotate on the Z axis. */
+       t->orient_axis = 2;
+       t->orient_axis_ortho = 1;
+
        /* if there's an event, we're modal */
        if (event) {
                t->flag |= T_MODAL;
index 019ea2c..b486976 100644 (file)
@@ -483,6 +483,20 @@ void initTransformOrientation(bContext *C, TransInfo *t)
                        }
                        break;
        }
+
+       if (t->orient_matrix_is_set == false) {
+               t->orient_matrix_is_set = true;
+               if (t->flag & T_MODAL) {
+                       /* Rotate for example defaults to operating on the view plane. */
+                       t->orientation.unset = V3D_ORIENT_VIEW;
+                       copy_m3_m4(t->orient_matrix, t->viewinv);
+                       normalize_m3(t->orient_matrix);
+               }
+               else {
+                       copy_m3_m3(t->orient_matrix, t->spacemtx);
+               }
+               negate_m3(t->orient_matrix);
+       }
 }
 
 /**