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

Reply via email to