[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13458] trunk/blender/source/blender/ blenkernel:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Jan 29 20:49:03 CET 2008


Revision: 13458
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13458
Author:   blendix
Date:     2008-01-29 20:49:03 +0100 (Tue, 29 Jan 2008)

Log Message:
-----------

Fix for bug #7965:
Array modifier could generate edges with twice the same vertex, fix
provided by Ken, thanks.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2008-01-29 19:25:10 UTC (rev 13457)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2008-01-29 19:49:03 UTC (rev 13458)
@@ -64,7 +64,7 @@
 void tex_space_mesh(struct Mesh *me);
 float *get_mesh_orco_verts(struct Object *ob);
 void transform_mesh_orco_verts(struct Mesh *me, float (*orco)[3], int totvert, int invert);
-void test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr);
+int test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr);
 struct Mesh *get_mesh(struct Object *ob);
 void set_mesh(struct Object *ob, struct Mesh *me);
 void mball_to_mesh(struct ListBase *lb, struct Mesh *me);

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2008-01-29 19:25:10 UTC (rev 13457)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2008-01-29 19:49:03 UTC (rev 13458)
@@ -530,7 +530,7 @@
 
 /* rotates the vertices of a face in case v[2] or v[3] (vertex index) is = 0.
    this is necessary to make the if(mface->v4) check for quads work */
-void test_index_face(MFace *mface, CustomData *fdata, int mfindex, int nr)
+int test_index_face(MFace *mface, CustomData *fdata, int mfindex, int nr)
 {
 	/* first test if the face is legal */
 	if(mface->v3 && mface->v3==mface->v4) {
@@ -572,6 +572,8 @@
 				CustomData_swap(fdata, mfindex, corner_indices);
 		}
 	}
+
+	return nr;
 }
 
 Mesh *get_mesh(Object *ob)

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2008-01-29 19:25:10 UTC (rev 13457)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2008-01-29 19:49:03 UTC (rev 13458)
@@ -937,6 +937,8 @@
 			                      count - 1);
 		}
 
+		if(med.v1 == med.v2) continue;
+
 		if (initFlags) {
 			med.flag |= ME_EDGEDRAW | ME_EDGERENDER;
 		}
@@ -998,7 +1000,9 @@
 		if(inMF.v4 && indexMap[inMF.v4].merge_final)
 			mf->v4 = calc_mapping(indexMap, indexMap[inMF.v4].merge, count-1);
 
-		test_index_face(mf, &result->faceData, numFaces, inMF.v4?4:3);
+		if(test_index_face(mf, &result->faceData, numFaces, inMF.v4?4:3) < 3)
+			continue;
+
 		numFaces++;
 
 		/* if the face has fewer than 3 vertices, don't create it */





More information about the Bf-blender-cvs mailing list