[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16746] branches/soc-2008-jaguarandi/ source/blender: Made simple deform limits be relative to BV of object

André Pinto andresusanopinto at gmail.com
Fri Sep 26 18:14:44 CEST 2008


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  )





More information about the Bf-blender-cvs mailing list