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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to