[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57404] trunk/blender/source/blender/ modifiers/intern/MOD_solidify.c: change to solidify modifiers own normal calculation function, dont attempt to calculate normals for edges with 3+ face users.

Campbell Barton ideasman42 at gmail.com
Wed Jun 12 09:53:54 CEST 2013


Revision: 57404
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57404
Author:   campbellbarton
Date:     2013-06-12 07:53:54 +0000 (Wed, 12 Jun 2013)
Log Message:
-----------
change to solidify modifiers own normal calculation function, dont attempt to calculate normals for edges with 3+ face users.

Modified Paths:
--------------
    trunk/blender/source/blender/modifiers/intern/MOD_solidify.c

Modified: trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2013-06-12 07:23:00 UTC (rev 57403)
+++ trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2013-06-12 07:53:54 UTC (rev 57404)
@@ -122,9 +122,13 @@
 					edge_ref->f1 =  i;
 					edge_ref->f2 = -1;
 				}
-				else {
+				else if ((edge_ref->f1 != -1) && (edge_ref->f2 == -1)) {
 					edge_ref->f2 = i;
 				}
+				else {
+					/* 3+ faces using an edge, we can't handle this usefully */
+					edge_ref->f1 = edge_ref->f2 = -1;
+				}
 				/* --- done --- */
 			}
 		}
@@ -132,25 +136,27 @@
 		for (i = 0, ed = medge, edge_ref = edge_ref_array; i < numEdges; i++, ed++, edge_ref++) {
 			/* Get the edge vert indices, and edge value (the face indices that use it) */
 
-			if (edgeref_is_init(edge_ref) && (edge_ref->f2 != -1)) {
-				/* We have 2 faces using this edge, calculate the edges normal
-				 * using the angle between the 2 faces as a weighting */
+			if (edgeref_is_init(edge_ref) && (edge_ref->f1 != -1)) {
+				if (edge_ref->f2 != -1) {
+					/* We have 2 faces using this edge, calculate the edges normal
+					 * using the angle between the 2 faces as a weighting */
 #if 0
-				add_v3_v3v3(edge_normal, face_nors[edge_ref->f1], face_nors[edge_ref->f2]);
-				normalize_v3(edge_normal);
+					add_v3_v3v3(edge_normal, face_nors[edge_ref->f1], face_nors[edge_ref->f2]);
+					normalize_v3(edge_normal);
 
-				mul_v3_fl(edge_normal, angle_normalized_v3v3(face_nors[edge_ref->f1], face_nors[edge_ref->f2]));
+					mul_v3_fl(edge_normal, angle_normalized_v3v3(face_nors[edge_ref->f1], face_nors[edge_ref->f2]));
 #else
-				mid_v3_v3v3_angle_weighted(edge_normal, face_nors[edge_ref->f1], face_nors[edge_ref->f2]);
+					mid_v3_v3v3_angle_weighted(edge_normal, face_nors[edge_ref->f1], face_nors[edge_ref->f2]);
 #endif
+				}
+				else {
+					/* only one face attached to that edge */
+					/* an edge without another attached- the weight on this is undefined */
+					copy_v3_v3(edge_normal, face_nors[edge_ref->f1]);
+				}
+				add_v3_v3(temp_nors[ed->v1], edge_normal);
+				add_v3_v3(temp_nors[ed->v2], edge_normal);
 			}
-			else {
-				/* only one face attached to that edge */
-				/* an edge without another attached- the weight on this is undefined */
-				copy_v3_v3(edge_normal, face_nors[edge_ref->f1]);
-			}
-			add_v3_v3(temp_nors[ed->v1], edge_normal);
-			add_v3_v3(temp_nors[ed->v2], edge_normal);
 		}
 		MEM_freeN(edge_ref_array);
 	}




More information about the Bf-blender-cvs mailing list