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:
authorGeoffrey Bantle <hairbat@yahoo.com>2008-02-25 07:53:37 +0300
committerGeoffrey Bantle <hairbat@yahoo.com>2008-02-25 07:53:37 +0300
commitd566fe665ad1c9f5a1078fba76f230fdd8675452 (patch)
treed07bbfbe316bf789438236934697d61595150d22 /source/blender/blenkernel/intern/BME_conversions.c
parent3023458aa7319a100cfb248a3ace72de5f854670 (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.c30
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);