diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-01-29 22:49:03 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-01-29 22:49:03 +0300 |
commit | 3d3023126a6a90491106afe1c8b35dea4ae7c029 (patch) | |
tree | 9cce943f2ca8276562f3c7f1e92dd5eb80a28e1f /source/blender | |
parent | ce5f187d8a76120fc64b2d8daa727b2e82502df1 (diff) |
Fix for bug #7965:
Array modifier could generate edges with twice the same vertex, fix
provided by Ken, thanks.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/modifier.c | 6 |
3 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index b60fd0ce954..af531a0d50c 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -64,7 +64,7 @@ void boundbox_mesh(struct Mesh *me, float *loc, float *size); 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); diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 25a391be566..464af9a3359 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -530,7 +530,7 @@ void transform_mesh_orco_verts(Mesh *me, float (*orco)[3], int totvert, int inve /* 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 @@ void test_index_face(MFace *mface, CustomData *fdata, int mfindex, int nr) CustomData_swap(fdata, mfindex, corner_indices); } } + + return nr; } Mesh *get_mesh(Object *ob) diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index bd809a00ef0..50c6705c6b6 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -937,6 +937,8 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, count - 1); } + if(med.v1 == med.v2) continue; + if (initFlags) { med.flag |= ME_EDGEDRAW | ME_EDGERENDER; } @@ -998,7 +1000,9 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, 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 */ |