[Bf-blender-cvs] [74450265d0a] master: Fix T87185: value assigned to modal Scale does not work properly

Campbell Barton noreply at git.blender.org
Fri Jun 25 17:53:10 CEST 2021


Commit: 74450265d0ab42e7e4fcadc85796c0d2a215eb18
Author: Campbell Barton
Date:   Sun May 6 09:52:12 2018 +0200
Branches: master
https://developer.blender.org/rB74450265d0ab42e7e4fcadc85796c0d2a215eb18

Fix T87185: value assigned to modal Scale does not work properly

`t->values` does not necessarily represent a final value of the
transformation, as each mode treats this value differently.

So, unfortunately, we cannot have a generic offset solution for modal
transform operations. Offset needs to be handled by each mode.

Note: Currently only, `Move`, `Rotate` and `Resize` support this.

===================================================================

M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_input.c
M	source/blender/editors/transform/transform_mode_resize.c
M	source/blender/editors/transform/transform_mode_rotate.c
M	source/blender/editors/transform/transform_mode_translate.c

===================================================================

diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 00b36f6653b..9e048a0ca1d 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -353,8 +353,6 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
     t->around = V3D_AROUND_CENTER_BOUNDS;
   }
 
-  BLI_assert(is_zero_v4(t->values_modal_offset));
-
   bool t_values_set_is_array = false;
 
   if (op && (prop = RNA_struct_find_property(op->ptr, "value")) &&
@@ -368,7 +366,6 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
       values[0] = RNA_float_get(op->ptr, "value");
     }
 
-    copy_v4_v4(t->values, values);
     if (t->flag & T_MODAL) {
       /* Run before init functions so 'values_modal_offset' can be applied on mouse input. */
       copy_v4_v4(t->values_modal_offset, values);
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index 414199badd7..0b46d0b9a13 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -450,17 +450,6 @@ void applyMouseInput(TransInfo *t, MouseInput *mi, const int mval[2], float outp
     mi->apply(t, mi, mval_db, output);
   }
 
-  if (!is_zero_v3(t->values_modal_offset)) {
-    float values_ofs[3];
-    if (t->con.mode & CON_APPLY) {
-      mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset);
-    }
-    else {
-      copy_v3_v3(values_ofs, t->values_modal_offset);
-    }
-    add_v3_v3(t->values, values_ofs);
-  }
-
   if (mi->post) {
     mi->post(t, output);
   }
diff --git a/source/blender/editors/transform/transform_mode_resize.c b/source/blender/editors/transform/transform_mode_resize.c
index 1d7d1369f29..6af16dee9b7 100644
--- a/source/blender/editors/transform/transform_mode_resize.c
+++ b/source/blender/editors/transform/transform_mode_resize.c
@@ -88,6 +88,7 @@ static void applyResize(TransInfo *t, const int UNUSED(mval[2]))
     float ratio = t->values[0];
 
     copy_v3_fl(t->values_final, ratio);
+    add_v3_v3(t->values_final, t->values_modal_offset);
 
     transform_snap_increment(t, t->values_final);
 
diff --git a/source/blender/editors/transform/transform_mode_rotate.c b/source/blender/editors/transform/transform_mode_rotate.c
index 8350e94e0e8..066cdf20e93 100644
--- a/source/blender/editors/transform/transform_mode_rotate.c
+++ b/source/blender/editors/transform/transform_mode_rotate.c
@@ -194,7 +194,7 @@ static void applyRotation(TransInfo *t, const int UNUSED(mval[2]))
 {
   char str[UI_MAX_DRAW_STR];
   float axis_final[3];
-  float final = t->values[0];
+  float final = t->values[0] + t->values_modal_offset[0];
 
   if ((t->con.mode & CON_APPLY) && t->con.applyRot) {
     t->con.applyRot(t, NULL, NULL, axis_final, &final);
diff --git a/source/blender/editors/transform/transform_mode_translate.c b/source/blender/editors/transform/transform_mode_translate.c
index 0e734b3b74b..7ee8834c1fe 100644
--- a/source/blender/editors/transform/transform_mode_translate.c
+++ b/source/blender/editors/transform/transform_mode_translate.c
@@ -362,6 +362,11 @@ static void applyTranslation(TransInfo *t, const int UNUSED(mval[2]))
   }
   else {
     copy_v3_v3(global_dir, t->values);
+    if (!is_zero_v3(t->values_modal_offset)) {
+      float values_ofs[3];
+      mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset);
+      add_v3_v3(global_dir, values_ofs);
+    }
 
     t->tsnap.snapElem = 0;
     applySnapping(t, global_dir);



More information about the Bf-blender-cvs mailing list