Tweaks to bevel and crease transform
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 3 Jun 2014 16:02:02 +0000 (22:02 +0600)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 3 Jun 2014 16:05:33 +0000 (22:05 +0600)
They were using INPUT_SPRING in a way which didn't allow
it to easily redo the operator because INPUT_SPRING internally
is stored as a ration between old value and new one and crease
and bevel were converting this to value delta.

Now made it special input type INPUT_SPRING_DELTA which is
storing delta of the spring, meaning now values in the redo
panel kind of makes sense -- they mean how much to add/remove
to the crease/bevel weight.

Expect to be no functional changes from interactive transform
POV, just a bit more convenient to use redo panel.

source/blender/editors/transform/transform.c
source/blender/editors/transform/transform.h
source/blender/editors/transform/transform_input.c

index 34e76ce5ece6888766e462f43e936543a71631ac..899f1191e338704e0caf5d346474d57478c1519f 100644 (file)
@@ -4730,7 +4730,7 @@ static void initBevelWeight(TransInfo *t)
        t->mode = TFM_BWEIGHT;
        t->transform = applyBevelWeight;
 
-       initMouseInputMode(t, &t->mouse, INPUT_SPRING);
+       initMouseInputMode(t, &t->mouse, INPUT_SPRING_DELTA);
 
        t->idx_max = 0;
        t->num.idx_max = 0;
@@ -4754,7 +4754,6 @@ static void applyBevelWeight(TransInfo *t, const int UNUSED(mval[2]))
 
        weight = t->values[0];
 
-       weight -= 1.0f;
        if (weight > 1.0f) weight = 1.0f;
 
        snapGridIncrement(t, &weight);
@@ -4809,7 +4808,7 @@ static void initCrease(TransInfo *t)
        t->mode = TFM_CREASE;
        t->transform = applyCrease;
 
-       initMouseInputMode(t, &t->mouse, INPUT_SPRING);
+       initMouseInputMode(t, &t->mouse, INPUT_SPRING_DELTA);
 
        t->idx_max = 0;
        t->num.idx_max = 0;
@@ -4833,7 +4832,6 @@ static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
 
        crease = t->values[0];
 
-       crease -= 1.0f;
        if (crease > 1.0f) crease = 1.0f;
 
        snapGridIncrement(t, &crease);
index f34d20508538feaf8b4a6555cb37ffbe7c12a25d..ae7e21f3824ca03a8436acaa1e6f6337de185d7d 100644 (file)
@@ -600,6 +600,7 @@ typedef enum {
        INPUT_VECTOR,
        INPUT_SPRING,
        INPUT_SPRING_FLIP,
+       INPUT_SPRING_DELTA,
        INPUT_ANGLE,
        INPUT_ANGLE_SPRING,
        INPUT_TRACKBALL,
@@ -608,7 +609,7 @@ typedef enum {
        INPUT_VERTICAL_RATIO,
        INPUT_VERTICAL_ABSOLUTE,
        INPUT_CUSTOM_RATIO,
-       INPUT_CUSTOM_RATIO_FLIP
+       INPUT_CUSTOM_RATIO_FLIP,
 } MouseInputMode;
 
 void initMouseInput(TransInfo *t, MouseInput *mi, const float center[2], const int mval[2]);
index 70b565859f3b9b359069a8242fcab175a2bff29e..6546a05aeddf7ca635564a4a018493ae957de3fd 100644 (file)
@@ -94,6 +94,12 @@ static void InputSpringFlip(TransInfo *t, MouseInput *mi, const int mval[2], flo
        }
 }
 
+static void InputSpringDelta(TransInfo *t, MouseInput *mi, const int mval[2], float output[3])
+{
+       InputSpring(t, mi, mval, output);
+       output[0] -= 1.0f;
+}
+
 static void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], float output[3])
 {
 
@@ -333,6 +339,11 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode)
                        mi->apply = InputSpringFlip;
                        t->helpline = HLP_SPRING;
                        break;
+               case INPUT_SPRING_DELTA:
+                       calcSpringFactor(mi);
+                       mi->apply = InputSpringDelta;
+                       t->helpline = HLP_SPRING;
+                       break;
                case INPUT_ANGLE:
                        mi->data = MEM_callocN(sizeof(double), "angle accumulator");
                        mi->apply = InputAngle;