Fixed simple deform strech/squash function
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user