diff options
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/tools/bmesh_bevel.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index bf32e8e6970..9259be7b240 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -37,7 +37,6 @@ #include "BLI_array.h" #include "BLI_alloca.h" -#include "BLI_bitmap.h" #include "BLI_gsqueue.h" #include "BLI_math.h" #include "BLI_memarena.h" @@ -1538,12 +1537,12 @@ static void check_edge_data_seam_sharp_edges(BevVert *bv, int flag, bool neg) { EdgeHalf *e = &bv->edges[0], *efirst = &bv->edges[0]; - while (neg ^ !EDGE_DATA_CHECK(e, flag)) { + while ((!neg && !EDGE_DATA_CHECK(e, flag) || (neg && EDGE_DATA_CHECK(e, flag)))) { e = e->next; if (e == efirst) break; } - if (neg ^ !EDGE_DATA_CHECK(e, flag)) + if ((!neg && !EDGE_DATA_CHECK(e, flag) || (neg && EDGE_DATA_CHECK(e, flag)))) return; efirst = e; @@ -1551,12 +1550,13 @@ static void check_edge_data_seam_sharp_edges(BevVert *bv, int flag, bool neg) int flag_count = 0; EdgeHalf *ne = e->next; - while ((neg ^ !EDGE_DATA_CHECK(ne, flag)) && ne != efirst) { + while ((!neg && !EDGE_DATA_CHECK(e, flag) || (neg && EDGE_DATA_CHECK(e, flag))) && ne != efirst) { if (ne->is_bev) flag_count++; ne = ne->next; } - if (ne == e || (ne == efirst && (neg ^ !EDGE_DATA_CHECK(efirst, flag)))) { + if (ne == e || (ne == efirst && (!neg && !EDGE_DATA_CHECK(e, flag) || + (neg && EDGE_DATA_CHECK(e, flag))))) { break; } if (flag == BM_ELEM_SEAM) @@ -5736,14 +5736,14 @@ void BM_mesh_bevel( } } - GHASH_ITER(giter, bp.vert_hash) { - bv = BLI_ghashIterator_getValue(&giter); - bevel_extend_edge_data(bv); - if(bm->use_toolflags) + if (bm->use_toolflags) { + GHASH_ITER(giter, bp.vert_hash) { + bv = BLI_ghashIterator_getValue(&giter); + bevel_extend_edge_data(bv); bevel_harden_normals_mode(bm, &bp, bv, op); + } } - /* Rebuild face polygons around affected vertices */ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { @@ -5752,6 +5752,13 @@ void BM_mesh_bevel( } } + BM_ITER_MESH_MUTABLE (v, v_next, &iter, bm, BM_VERTS_OF_MESH) { + if (BM_elem_flag_test(v, BM_ELEM_TAG)) { + BLI_assert(find_bevvert(&bp, v) != NULL); + BM_vert_kill(bm, v); + } + } + if (do_fix_shading) { BM_mesh_normals_update(bm); BM_lnorspace_update(bm); @@ -5763,13 +5770,6 @@ void BM_mesh_bevel( BLI_ghash_free(bp.faceHash, NULL, NULL); } - BM_ITER_MESH_MUTABLE (v, v_next, &iter, bm, BM_VERTS_OF_MESH) { - if (BM_elem_flag_test(v, BM_ELEM_TAG)) { - BLI_assert(find_bevvert(&bp, v) != NULL); - BM_vert_kill(bm, v); - } - } - /* When called from operator (as opposed to modifier), bm->use_toolflags * will be set, and we to transfer the oflags to BM_ELEM_TAGs */ if (bm->use_toolflags) { |