Fixed simple deform strech/squash function

This commit is contained in:
Andre Susano Pinto
2008-07-25 23:52:16 +00:00
parent 1537e75cba
commit 9e1ca2c1be
3 changed files with 16 additions and 24 deletions

View 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

View 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

View 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);