[Bf-blender-cvs] [d5ce2b5] master: Fix T39567: simple deform modifier error

Campbell Barton noreply at git.blender.org
Thu Apr 3 09:58:47 CEST 2014


Commit: d5ce2b5466619f429f6ffeef27a1802beb860eb3
Author: Campbell Barton
Date:   Thu Apr 3 18:57:37 2014 +1100
https://developer.blender.org/rBd5ce2b5466619f429f6ffeef27a1802beb860eb3

Fix T39567: simple deform modifier error

===================================================================

M	source/blender/modifiers/intern/MOD_simpledeform.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c
index fdc5578..5a9c2b4 100644
--- a/source/blender/modifiers/intern/MOD_simpledeform.c
+++ b/source/blender/modifiers/intern/MOD_simpledeform.c
@@ -51,6 +51,8 @@
 
 #include "MOD_util.h"
 
+#define BEND_EPS 0.000001f
+
 /* Clamps/Limits the given coordinate to:  limits[0] <= co[axis] <= limits[1]
  * The amount of clamp is saved on dcut */
 static void axis_limit(int axis, const float limits[2], float co[3], float dcut[3])
@@ -122,15 +124,15 @@ static void simpleDeform_bend(const float factor, const float dcut[3], float r_c
 	float x = r_co[0], y = r_co[1], z = r_co[2];
 	float theta, sint, cost;
 
+	BLI_assert(!(fabsf(factor) < BEND_EPS));
+
 	theta = x * factor;
 	sint = sinf(theta);
 	cost = cosf(theta);
 
-	if (fabsf(factor) > 1e-7f) {
-		r_co[0] = -(y - 1.0f / factor) * sint;
-		r_co[1] =  (y - 1.0f / factor) * cost + 1.0f / factor;
-		r_co[2] = z;
-	}
+	r_co[0] = -(y - 1.0f / factor) * sint;
+	r_co[1] =  (y - 1.0f / factor) * cost + 1.0f / factor;
+	r_co[2] = z;
 
 	{
 		r_co[0] += cost * dcut[0];
@@ -196,8 +198,6 @@ static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object
 		smd_factor   = smd->factor / max_ff(FLT_EPSILON, smd_limit[1] - smd_limit[0]);
 	}
 
-	modifier_get_vgroup(ob, dm, smd->vgroup_name, &dvert, &vgroup);
-
 	switch (smd->mode) {
 		case MOD_SIMPLEDEFORM_MODE_TWIST:   simpleDeform_callback = simpleDeform_twist;     break;
 		case MOD_SIMPLEDEFORM_MODE_BEND:    simpleDeform_callback = simpleDeform_bend;      break;
@@ -207,6 +207,14 @@ static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object
 			return; /* No simpledeform mode? */
 	}
 
+	if (smd->mode == MOD_SIMPLEDEFORM_MODE_BEND) {
+		if (fabsf(smd_factor) < BEND_EPS) {
+			return;
+		}
+	}
+
+	modifier_get_vgroup(ob, dm, smd->vgroup_name, &dvert, &vgroup);
+
 	for (i = 0; i < numVerts; i++) {
 		float weight = defvert_array_find_weight_safe(dvert, i, vgroup);




More information about the Bf-blender-cvs mailing list