Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/modifiers/intern/MOD_solidify.c')
-rw-r--r--source/blender/modifiers/intern/MOD_solidify.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index d3e54651eea..5f9bce9ec36 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -447,8 +447,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* same as EM_solidify() in editmesh_lib.c */
float *vert_angles= MEM_callocN(sizeof(float) * numVerts * 2, "mod_solid_pair"); /* 2 in 1 */
float *vert_accum= vert_angles + numVerts;
- float *face_angles = NULL;
- BLI_array_staticdeclare(face_angles, 16); /* BM_NGON_STACK_SIZE */
int j, vidx;
face_nors = CustomData_get_layer(&dm->polyData, CD_NORMAL);
@@ -469,27 +467,28 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
mesh_calc_poly_normal(mp, &mloop[mp->loopstart], mvert, face_nors[i]);
/* just added, calc the normal */
- BLI_array_empty(face_angles);
for (j=0, ml=mloop+mp->loopstart; j<mp->totloop; j++, ml++) {
MLoop *ml_prev = ME_POLY_LOOP_PREV(mloop, mp, j);
MLoop *ml_next = ME_POLY_LOOP_NEXT(mloop, mp, j);
- float e1[3], e2[3], angle;
-
+ float e1[3], e2[3];
+ float angle;
+
+ /* TODO - we could speed this up by _not_ normalizing both verts each time
+ * and always re-usingthe last vector. */
sub_v3_v3v3(e1, mvert[ml_next->v].co, mvert[ml->v].co);
sub_v3_v3v3(e2, mvert[ml_prev->v].co, mvert[ml->v].co);
- angle = M_PI - angle_normalized_v3v3(e1, e2);
- BLI_array_append(face_angles, angle);
- }
-
- for (j=0, ml=mloop+mp->loopstart; j<mp->totloop; j++, ml++) {
+
+ angle = (float)M_PI - angle_v3v3(e1, e2);
+ if (angle < FLT_EPSILON) {
+ angle = FLT_EPSILON;
+ }
+
vidx = ml->v;
- vert_accum[vidx] += face_angles[j];
- vert_angles[vidx]+= shell_angle_to_dist(angle_normalized_v3v3(vert_nors[vidx], face_nors[i])) * face_angles[j];
+ vert_accum[vidx]+= angle;
+ vert_angles[vidx]+= shell_angle_to_dist(angle_normalized_v3v3(vert_nors[vidx], face_nors[i])) * angle;
}
}
-
- BLI_array_free(face_angles);
/* vertex group support */
if (dvert) {