Revision: 16746 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16746 Author: jaguarandi Date: 2008-09-26 18:14:35 +0200 (Fri, 26 Sep 2008)
Log Message: ----------- Made simple deform limits be relative to BV of object Modified Paths: -------------- branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c Modified: branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c =================================================================== --- branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c 2008-09-26 14:54:21 UTC (rev 16745) +++ branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c 2008-09-26 16:14:35 UTC (rev 16746) @@ -7360,12 +7360,12 @@ SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md; smd->mode = MOD_SIMPLEDEFORM_MODE_TWIST; - smd->axis = 0; + smd->axis = 0; smd->origin = NULL; - smd->factor = 0.35; - smd->limit[0] = FLT_MAX; - smd->limit[1] = -FLT_MAX; + smd->factor = 0.35f; + smd->limit[0] = 0.0f; + smd->limit[1] = 1.0f; } static void simpledeformModifier_copyData(ModifierData *md, ModifierData *target) Modified: branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c =================================================================== --- branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c 2008-09-26 14:54:21 UTC (rev 16745) +++ branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c 2008-09-26 16:14:35 UTC (rev 16746) @@ -144,7 +144,8 @@ static const float lock_axis[2] = {0.0f, 0.0f}; int i; - int limit_axis = 0; + int limit_axis = 0; + float smd_limit[2], smd_factor; SpaceTransform *transf = NULL, tmp_transf; void (*simpleDeform_callback)(const float factor, const float dcut[3], float *co) = NULL; //Mode callback int vgroup = get_named_vertexgroup_num(ob, smd->vgroup_name); @@ -152,6 +153,10 @@ //Safe-check if(smd->origin == ob) smd->origin = NULL; //No self references + + if(smd->limit[0] < 0.0) smd->limit[0] = 0.0f; + if(smd->limit[0] > 1.0) smd->limit[0] = 1.0f; + smd->limit[0] = MIN2(smd->limit[0], smd->limit[1]); //Upper limit >= than lower limit //Calculate matrixs do convert between coordinate spaces @@ -174,8 +179,6 @@ limit_axis = (smd->mode == MOD_SIMPLEDEFORM_MODE_BEND) ? 0 : 2; //Bend limits on X.. all other modes limit on Z //Update limits if needed - if(smd->limit[1] == -FLT_MAX - || smd->limit[0] == FLT_MAX) { float lower = FLT_MAX; float upper = -FLT_MAX; @@ -183,16 +186,20 @@ for(i=0; i<numVerts; i++) { float tmp[3]; + VECCOPY(tmp, vertexCos[i]); + if(transf) space_transform_apply(transf, tmp); - VECCOPY(tmp, vertexCos[i]); - lower = MIN2(lower, tmp[limit_axis]); upper = MAX2(upper, tmp[limit_axis]); } - smd->limit[1] = upper; - smd->limit[0] = lower; + + //SMD values are normalized to the BV, calculate the absolut values + smd_limit[1] = lower + (upper-lower)*smd->limit[1]; + smd_limit[0] = lower + (upper-lower)*smd->limit[0]; + + smd_factor = smd->factor / MAX2(FLT_EPSILON, smd_limit[1]-smd_limit[0]); } @@ -228,9 +235,9 @@ if(smd->axis & MOD_SIMPLEDEFORM_LOCK_AXIS_X) axis_limit(0, lock_axis, co, dcut); if(smd->axis & MOD_SIMPLEDEFORM_LOCK_AXIS_Y) axis_limit(1, lock_axis, co, dcut); } - axis_limit(limit_axis, smd->limit, co, dcut); + axis_limit(limit_axis, smd_limit, co, dcut); - simpleDeform_callback(smd->factor, dcut, co); //Apply deform + simpleDeform_callback(smd_factor, dcut, co); //Apply deform VecLerpf(vertexCos[i], vertexCos[i], co, weight); //Use vertex weight has coef of linear interpolation if(transf) space_transform_invert(transf, vertexCos[i]); Modified: branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c =================================================================== --- branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c 2008-09-26 14:54:21 UTC (rev 16745) +++ branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c 2008-09-26 16:14:35 UTC (rev 16746) @@ -2542,8 +2542,8 @@ uiDefButF(block, NUM, B_MODIFIER_RECALC, "Factor:", lx,(cy-=19),buttonWidth,19, &smd->factor, -10.0f, 10.0f, 0.5f, 0, "Deform Factor"); - uiDefButF(block, NUM, B_MODIFIER_RECALC, "Upper Limit:", lx,(cy-=19),buttonWidth,19, &smd->limit[1], -1000.0f, 1000.0f, 5.0f, 0, "Upper Limit Bend on X"); - uiDefButF(block, NUM, B_MODIFIER_RECALC, "Lower Limit:", lx,(cy-=19),buttonWidth,19, &smd->limit[0], -1000.0f, 1000.0f, 5.0f, 0, "Lower Limit Bend on X"); + uiDefButF(block, NUM, B_MODIFIER_RECALC, "Upper Limit:", lx,(cy-=19),buttonWidth,19, &smd->limit[1], 0.0f, 1.0f, 5.0f, 0, "Upper Limit for deform"); + uiDefButF(block, NUM, B_MODIFIER_RECALC, "Lower Limit:", lx,(cy-=19),buttonWidth,19, &smd->limit[0], 0.0f, 1.0f, 5.0f, 0, "Lower Limit for deform"); if(smd->mode == MOD_SIMPLEDEFORM_MODE_STRETCH || smd->mode == MOD_SIMPLEDEFORM_MODE_TAPER ) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs