diff options
author | Rohan Rathi <rohanrathi08@gmail.com> | 2018-07-02 19:17:15 +0300 |
---|---|---|
committer | Rohan Rathi <rohanrathi08@gmail.com> | 2018-07-02 19:17:15 +0300 |
commit | 74ace41160bd6e98c904b34e5efe0893b1719387 (patch) | |
tree | 123e8d819221be124ec79a35f937b7562acf019f | |
parent | 0c25881c391b84e238fa9503ec8c6a6fa0e2e439 (diff) |
Minor cleanup and fixed normal updating erasing entire mesh
-rw-r--r-- | source/blender/bmesh/tools/bmesh_bevel.c | 34 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_bevel.c | 9 |
2 files changed, 22 insertions, 21 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) { diff --git a/source/blender/editors/mesh/editmesh_bevel.c b/source/blender/editors/mesh/editmesh_bevel.c index 40be91aada1..d92d655641f 100644 --- a/source/blender/editors/mesh/editmesh_bevel.c +++ b/source/blender/editors/mesh/editmesh_bevel.c @@ -197,8 +197,8 @@ static void bevel_harden_normals(BMEditMesh *em, BMOperator *bmop, float face_st normalize_v3(cn_wght); normalize_v3(cn_unwght); if (calc_n) { - mul_v3_fl(calc_n, face_strength); - mul_v3_fl(cn_wght, 1.0f - face_strength); + mul_v3_fl(cn_wght, face_strength); + mul_v3_fl(calc_n, 1.0f - face_strength); add_v3_v3(calc_n, cn_wght); normalize_v3(calc_n); } @@ -341,7 +341,8 @@ static bool edbm_bevel_calc(wmOperator *op) BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "faces.out", BM_FACE, BM_ELEM_SELECT, true); } - bevel_harden_normals(em, &bmop, strength, hnmode); + if(hnmode != BEVEL_HN_NONE) + bevel_harden_normals(em, &bmop, strength, hnmode); /* no need to de-select existing geometry */ if (!EDBM_op_finish(em, &bmop, op, true)) { @@ -788,5 +789,5 @@ void MESH_OT_bevel(wmOperatorType *ot) RNA_def_int(ot->srna, "material", -1, -1, INT_MAX, "Material", "Material for bevel faces (-1 means use adjacent faces)", -1, 100); RNA_def_float(ot->srna, "strength", 0.5f, 0.0f, 1.0f, "Normal Strength", "Strength of calculated normal", 0.0f, 1.0f); - RNA_def_enum(ot->srna, "hnmode", harden_normals_items, BEVEL_HN_FACE, "Normal Mode", "Weighting mode for Harden Normals"); + RNA_def_enum(ot->srna, "hnmode", harden_normals_items, BEVEL_HN_NONE, "Normal Mode", "Weighting mode for Harden Normals"); } |