Fixed simple deform strech/squash function
authorAndre Susano Pinto <andresusanopinto@gmail.com>
Fri, 25 Jul 2008 23:52:16 +0000 (23:52 +0000)
committerAndre Susano Pinto <andresusanopinto@gmail.com>
Fri, 25 Jul 2008 23:52:16 +0000 (23:52 +0000)
source/blender/blenkernel/intern/simple_deform.c
source/blender/makesdna/DNA_modifier_types.h
source/blender/src/buttons_editing.c

index 0c58543a58d53f9251e9047012379a8c01029315..86fef7208a1c6e29d6fd0fc0f7920de52f011c74 100644 (file)
@@ -68,17 +68,17 @@ static void simpleDeform_tapperXY(const float factor, const float *dcut, float *
        }
 }
 
-/* TODO strech and squash need review on function */
 static void simpleDeform_strech(const float factor, const float dcut[3], float *co)
 {
        float x = co[0], y = co[1], z = co[2];
        float scale;
 
-       scale = z*factor;
-       scale = scale*scale;
+       scale = (z*z*factor-factor + 1.0);
+
+       co[0] = x*scale;
+       co[1] = y*scale;
+       co[2] = z*(1.0+factor);
 
-       co[0] += x+x*scale;
-       co[1] += y+y*scale;
 
        if(dcut)
        {
@@ -86,7 +86,6 @@ static void simpleDeform_strech(const float factor, const float dcut[3], float *
                co[1] += dcut[0]*scale;
                co[2] += dcut[2]; 
        }
-
 }
 
 static void simpleDeform_squash(const float factor, const float dcut[3], float *co)
@@ -237,15 +236,10 @@ void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, s
                                simpleDeform_tapperXY(smd->factor[0], dcut, co);
                                break;
 
-                       case MOD_SIMPLEDEFORM_MODE_STRECH:
+                       case MOD_SIMPLEDEFORM_MODE_STRECH_SQUASH:
                                axis_limit(2, smd->factor+1, co, dcut);
                                simpleDeform_strech(smd->factor[0], dcut, co);
                                break;
-
-                       case MOD_SIMPLEDEFORM_MODE_SQUASH:
-                               axis_limit(2, smd->factor+1, co, dcut);
-                               simpleDeform_squash(smd->factor[0], dcut, co);
-                               break;
                }
 
                //linear interpolation
index 44a7017158b465d56e3c4caa7405b0dba80e690d..e63eb608295b4ed295f29ad593118a355ce7acbb 100644 (file)
@@ -531,11 +531,10 @@ typedef struct SimpleDeformModifierData {
 
 } SimpleDeformModifierData;
 
-#define MOD_SIMPLEDEFORM_MODE_TWIST            1
-#define MOD_SIMPLEDEFORM_MODE_BEND             2
-#define MOD_SIMPLEDEFORM_MODE_TAPER_X  3
-#define MOD_SIMPLEDEFORM_MODE_TAPER_XY 4
-#define MOD_SIMPLEDEFORM_MODE_STRECH   5
-#define MOD_SIMPLEDEFORM_MODE_SQUASH   6
+#define MOD_SIMPLEDEFORM_MODE_TWIST                    1
+#define MOD_SIMPLEDEFORM_MODE_BEND                     2
+#define MOD_SIMPLEDEFORM_MODE_TAPER_X          3
+#define MOD_SIMPLEDEFORM_MODE_TAPER_XY         4
+#define MOD_SIMPLEDEFORM_MODE_STRECH_SQUASH    5
 
 #endif
index d0b970bf5c67cdec2aa057b03614a3a1afa690fd..252350ea72b99689b8777d3b5a2ae8704aec10dd 100644 (file)
@@ -982,12 +982,11 @@ static uiBlock *modifiers_select_simpledeform_typemenu(void *ob_v)
        block= uiNewBlock(&curarea->uiblocks, "modifiers_select_simpledeform_typemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
        uiBlockSetButmFunc(block, do_modifiers_select_simpledeform_typemenu, ob_v);
 
-       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Twist",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_TWIST, "");
-       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Bend",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_BEND, "");
-       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Tapper X",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_TAPER_X, "");
-       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Tapper XY",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_TAPER_XY, "");
-       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Strech",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_STRECH, "");
-       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Squash",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_SQUASH, "");
+       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Twist",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_TWIST, "");
+       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Bend",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_BEND, "");
+       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Tapper X",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_TAPER_X, "");
+       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Tapper XY",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_TAPER_XY, "");
+       uiDefBut(block, BUTM, B_MODIFIER_RECALC, "Strech Squash",       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, MOD_SIMPLEDEFORM_MODE_STRECH_SQUASH, "");
        
        uiBlockSetDirection(block, UI_RIGHT);
        uiTextBoundsBlock(block, 50);