diff options
author | Geoffrey Bantle <hairbat@yahoo.com> | 2008-02-25 07:53:37 +0300 |
---|---|---|
committer | Geoffrey Bantle <hairbat@yahoo.com> | 2008-02-25 07:53:37 +0300 |
commit | d566fe665ad1c9f5a1078fba76f230fdd8675452 (patch) | |
tree | d07bbfbe316bf789438236934697d61595150d22 /source/blender/blenkernel/intern/BME_conversions.c | |
parent | 3023458aa7319a100cfb248a3ace72de5f854670 (diff) |
-> Bevel
Fixed the following problems with Bevel code
-meshes with 2 edged faces left over at the end would cause buffer
overrun whens converting from a Bmesh to a Derived Mesh. The
conversion process now checks for both double edges and faces
and removes them when present.
-BME_reverse_loop euler had a bug that was causing the corruption of
radial cycle. This would lead to the bevel tool hanging for a long time
and possibly crashing.
-Added optimization of BME_reverse loop so that it no longer does tiny
allocations but instead uses an area of 'scratch' memory. The same thing
will be done to the Make Face euler soon
-Added proper call to selection flushing for editmode.
-Some miscellaneous cleanups and removal of unneeded debug printfs.
Diffstat (limited to 'source/blender/blenkernel/intern/BME_conversions.c')
-rw-r--r-- | source/blender/blenkernel/intern/BME_conversions.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/BME_conversions.c b/source/blender/blenkernel/intern/BME_conversions.c index f7a9cfcb15c..db4e39794d6 100644 --- a/source/blender/blenkernel/intern/BME_conversions.c +++ b/source/blender/blenkernel/intern/BME_conversions.c @@ -191,17 +191,19 @@ EditMesh *BME_bmesh_to_editmesh(BME_Mesh *bm, BME_TransData_Head *td) { /* make edges */ CustomData_copy(&bm->edata, &em->edata, CD_MASK_EDITMESH, CD_CALLOC, 0); for (e=bm->edges.first;e;e=e->next) { - eed= addedgelist(evlist[e->v1->tflag1], evlist[e->v2->tflag1], NULL); - eed->crease = e->crease; - eed->bweight = e->bweight; - if(e->flag & ME_SEAM) eed->seam = 1; - if(e->flag & ME_SHARP) eed->sharp = 1; - if(e->flag & SELECT) eed->f |= SELECT; - if(e->flag & ME_FGON) eed->h= EM_FGON; // 2 different defines! - if(e->flag & ME_HIDE) eed->h |= 1; - if(G.scene->selectmode==SCE_SELECT_EDGE) - EM_select_edge(eed, eed->f & SELECT); - CustomData_em_copy_data(&bm->edata, &em->edata, e->data, &eed->data); + if(!(findedgelist(evlist[e->v1->tflag1], evlist[e->v2->tflag1]))){ + eed= addedgelist(evlist[e->v1->tflag1], evlist[e->v2->tflag1], NULL); + eed->crease = e->crease; + eed->bweight = e->bweight; + if(e->flag & ME_SEAM) eed->seam = 1; + if(e->flag & ME_SHARP) eed->sharp = 1; + if(e->flag & SELECT) eed->f |= SELECT; + if(e->flag & ME_FGON) eed->h= EM_FGON; // 2 different defines! + if(e->flag & ME_HIDE) eed->h |= 1; + if(G.scene->selectmode==SCE_SELECT_EDGE) + EM_select_edge(eed, eed->f & SELECT); + CustomData_em_copy_data(&bm->edata, &em->edata, e->data, &eed->data); + } } /* make faces */ @@ -417,10 +419,10 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm) test_index_face(mf, NULL, i, len); } i++; + mf->mat_nr = (unsigned char)f->mat_nr; + mf->flag = (unsigned char)f->flag; + CustomData_from_em_block(&bm->pdata, &result->faceData, f->data, i); } - mf->mat_nr = (unsigned char)f->mat_nr; - mf->flag = (unsigned char)f->flag; - CustomData_from_em_block(&bm->pdata, &result->faceData, f->data, i); } } BLI_edgehash_free(edge_hash, NULL); |