diff options
author | Andre Susano Pinto <andresusanopinto@gmail.com> | 2008-07-26 03:52:16 +0400 |
---|---|---|
committer | Andre Susano Pinto <andresusanopinto@gmail.com> | 2008-07-26 03:52:16 +0400 |
commit | 9e1ca2c1bef2d0e8db5e22a284134c37b2f6a457 (patch) | |
tree | 45093c4d265fa2af0db28ad284bdbd6c797fd205 /source/blender/blenkernel/intern/simple_deform.c | |
parent | 1537e75cba4df5604b695be54bbae724df5d4095 (diff) |
Fixed simple deform strech/squash function
Diffstat (limited to 'source/blender/blenkernel/intern/simple_deform.c')
-rw-r--r-- | source/blender/blenkernel/intern/simple_deform.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/simple_deform.c b/source/blender/blenkernel/intern/simple_deform.c index 0c58543a58d..86fef7208a1 100644 --- a/source/blender/blenkernel/intern/simple_deform.c +++ b/source/blender/blenkernel/intern/simple_deform.c @@ -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 |