diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-11-18 13:33:11 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-11-18 13:33:11 +0400 |
commit | fd9dac77d1d6de6ae6eea3ccc19099decfae665f (patch) | |
tree | 2c41ac308818992b27692f91359caf53bfb000b5 /source/blender | |
parent | b72c1ac33cd03553e4529b39215ed7e168920ad5 (diff) |
bevel now only takes manifold edges (so it doesnt need to check for them)
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/operators/bmo_bevel.c | 15 | ||||
-rw-r--r-- | source/blender/bmesh/tools/bmesh_bevel.c | 9 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_bevel.c | 8 |
3 files changed, 19 insertions, 13 deletions
diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index 9de15fb9c9c..049b923315b 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -32,20 +32,27 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) { - BMOIter siter; - BMVert *v; - const float offset = BMO_slot_float_get(op, "offset"); const int seg = BMO_slot_int_get(op, "segments"); if (offset > 0) { + BMOIter siter; + BMEdge *e; + BMVert *v; + /* first flush 'geom' into flags, this makes it possible to check connected data */ BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE, BM_ELEM_TAG, FALSE); - BMO_ITER (v, &siter, bm, op, "geom", BM_VERT | BM_EDGE) { + BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) { BM_elem_flag_enable(v, BM_ELEM_TAG); } + BMO_ITER (e, &siter, bm, op, "geom", BM_EDGE) { + if (BM_edge_is_manifold(e)) { + BM_elem_flag_enable(e, BM_ELEM_TAG); + } + } + BM_mesh_bevel(bm, offset, seg); } } diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 8020c404d5f..12a85ce34de 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -1414,12 +1414,8 @@ static void bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v) BM_ITER_ELEM (bme, &iter, v, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(bme, BM_ELEM_TAG)) { - if (BM_edge_is_manifold(bme)) { - nsel++; - } - else { - BM_elem_flag_disable(bme, BM_ELEM_TAG); - } + BLI_assert(BM_edge_is_manifold(bme)); + nsel++; } } @@ -1672,6 +1668,7 @@ static void bevel_build_edge_polygons(BMesh *bm, BevelParams *bp, BMEdge *bme) /** * currently only bevels BM_ELEM_TAG'd verts and edges + * all tagged edges _must_ be manifold. */ void BM_mesh_bevel(BMesh *bm, const float offset, const float segments) { diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index e01c555d89e..7a109c041b6 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -134,9 +134,11 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob), else { /* crummy, is there a way just to operator on all? - campbell */ BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { - BM_elem_flag_enable(e, BM_ELEM_TAG); - BM_elem_flag_enable(e->v1, BM_ELEM_TAG); - BM_elem_flag_enable(e->v2, BM_ELEM_TAG); + if (BM_edge_is_manifold(e)) { + BM_elem_flag_enable(e, BM_ELEM_TAG); + BM_elem_flag_enable(e->v1, BM_ELEM_TAG); + BM_elem_flag_enable(e->v2, BM_ELEM_TAG); + } } } |