Commit: 28061ac85e5d45e7a8cac9b6f678a3c6765f76c2
Author: Rohan Rathi
Date:   Mon Jul 3 13:02:00 2017 +0530
Branches: soc-2017-normal-tools
https://developer.blender.org/rB28061ac85e5d45e7a8cac9b6f678a3c6765f76c2

Fixed bugs and cleanup

===================================================================

M       source/blender/bmesh/intern/bmesh_mesh.c
M       source/blender/bmesh/intern/bmesh_opdefines.c
M       source/blender/bmesh/intern/bmesh_operator_api.h
M       source/blender/editors/transform/transform.c

===================================================================

diff --git a/source/blender/bmesh/intern/bmesh_mesh.c 
b/source/blender/bmesh/intern/bmesh_mesh.c
index e2d584a517f..449cbee7b82 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1024,9 +1024,8 @@ void BM_lnorspace_invalidate(BMesh *bm, bool inval_all)
        BMIter viter, fiter, liter;
        BLI_bitmap *faces = BLI_BITMAP_NEW(bm->totface, __func__);
 
-       if (bm->elem_index_dirty & BM_FACE) {
-               BM_mesh_elem_index_ensure(bm, BM_FACE);
-       }
+       BM_mesh_elem_index_ensure(bm, (BM_FACE | BM_LOOP));
+
        BM_ITER_MESH(v, &viter, bm, BM_VERTS_OF_MESH) {
                if (BM_elem_flag_test(v, BM_ELEM_SELECT)) {
 
@@ -1117,6 +1116,8 @@ void BM_lnorspace_update(BMesh *bm)
 {
        float(*lnors)[3] = MEM_callocN(sizeof(*lnors) * bm->totloop, 
"__func__");
 
+       BM_mesh_elem_index_ensure(bm, BM_LOOP);
+
        if (bm->lnor_spacearr == NULL) {
                bm->lnor_spacearr = MEM_callocN(sizeof(*bm->lnor_spacearr), 
__func__);
        }
@@ -1174,8 +1175,9 @@ static void BM_lnorspace_err(BMesh *bm)
        bm->spacearr_dirty &= ~BM_SPACEARR_DIRTY_ALL;
 
 }
+
 /* Marks the individual clnors to be edited, if multiple selection methods are 
used */
-static int BM_loop_normal_indiv(BMesh *bm)
+static int BM_loop_normal_mark_indiv(BMesh *bm)
 {
        BMEditSelection *ese, *vert;
        int totloopsel = 0;
@@ -1191,20 +1193,19 @@ static int BM_loop_normal_indiv(BMesh *bm)
                                if (vert->htype == BM_VERT) {
 
                                        BMLoop *l = 
BM_face_vert_share_loop((BMFace *)ese->ele, (BMVert *)vert->ele);   
-                                       if (l) {                                
                /* if vert and face selected share a loop, mark it for editing 
*/
+                                       if (l && !BM_elem_flag_test(l, 
BM_ELEM_LNORSPACE)) {    /* if vert and face selected share a loop, mark it for 
editing */
                                                BM_elem_flag_enable(l, 
BM_ELEM_LNORSPACE);
                                                totloopsel++;
                                        }
                                }
-                       }
-               }
-               else if (ese->htype == BM_EDGE) {
-                       vert = ese;
-                       while ((vert = vert->prev)) {
-                               if (vert->htype == BM_VERT) {
-
-                                       if (BM_vert_in_edge((BMEdge *)ese->ele, 
(BMVert *)vert->ele)) {
-                                               BMLoop *l = 
BM_edge_vert_share_loop(((BMEdge *)ese->ele)->l, (BMVert *)vert->ele);
+                               else if (vert->htype == BM_EDGE) {
+                                       BMLoop *l = 
BM_face_vert_share_loop((BMFace *)ese->ele, ((BMEdge *)vert->ele)->v1);
+                                       if (l && !BM_elem_flag_test(l, 
BM_ELEM_LNORSPACE)) {
+                                               BM_elem_flag_enable(l, 
BM_ELEM_LNORSPACE);
+                                               totloopsel++;
+                                       }
+                                       l = BM_face_vert_share_loop((BMFace 
*)ese->ele, ((BMEdge *)vert->ele)->v2);
+                                       if (l && !BM_elem_flag_test(l, 
BM_ELEM_LNORSPACE)) {
                                                BM_elem_flag_enable(l, 
BM_ELEM_LNORSPACE);
                                                totloopsel++;
                                        }
@@ -1224,7 +1225,7 @@ LoopNormalData *BM_loop_normal_init(BMesh *bm)
        int totloopsel = 0;
 
        if (verts + edges + faces > 1) {                /* More than 1 sel 
mode, check if only individual normals to edit */
-               totloopsel = BM_loop_normal_indiv(bm);
+               totloopsel = BM_loop_normal_mark_indiv(bm);
        }
        LoopNormalData *ld = MEM_mallocN(sizeof(*ld), "__func__");
        int cd_custom_normal_offset = CustomData_get_offset(&bm->ldata, 
CD_CUSTOMLOOPNORMAL);
@@ -1405,6 +1406,7 @@ void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
 
        /* compute normals, clear temp flags and flush selections */
        if (type_flag & BMO_OPTYPE_FLAG_NORMALS_CALC) {
+               bm->spacearr_dirty |= (BM_SPACEARR_DIRTY | BM_SPACEARR_BMO_SET);
                BM_mesh_normals_update(bm);
        }
 
@@ -1420,9 +1422,6 @@ void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
        if ((type_flag & BMO_OPTYPE_FLAG_SELECT_VALIDATE) == 0) {
                bm->selected = select_history;
        }
-       if (type_flag & BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE) {
-               bm->spacearr_dirty |= (BM_SPACEARR_DIRTY | BM_SPACEARR_BMO_SET);
-       }
        if (type_flag & BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL) {
                bm->spacearr_dirty |= BM_SPACEARR_DIRTY_ALL;
        }
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c 
b/source/blender/bmesh/intern/bmesh_opdefines.c
index 1b8879e27ee..3150df6ef6a 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -116,8 +116,7 @@ static BMOpDefine bmo_smooth_vert_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_smooth_vert_exec,
-       (BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -140,8 +139,7 @@ static BMOpDefine bmo_smooth_laplacian_vert_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_smooth_laplacian_vert_exec,
-       (BMO_OPTYPE_FLAG_NORMALS_CALC | 
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -232,8 +230,7 @@ static BMOpDefine bmo_rotate_edges_def = {
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_SELECT_VALIDATE | 
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -277,8 +274,7 @@ static BMOpDefine bmo_bisect_edges_def = {
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_SELECT_VALIDATE | 
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -306,8 +302,7 @@ static BMOpDefine bmo_mirror_def = {
        bmo_mirror_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -376,7 +371,7 @@ static BMOpDefine bmo_automerge_def = {
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
         BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -397,7 +392,7 @@ static BMOpDefine bmo_collapse_def = {
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
         BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -452,8 +447,7 @@ static BMOpDefine bmo_pointmerge_def = {
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -492,7 +486,7 @@ static BMOpDefine bmo_weld_verts_def = {
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
         BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -543,7 +537,7 @@ static BMOpDefine bmo_join_triangles_def = {
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
         BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -575,7 +569,7 @@ static BMOpDefine bmo_contextual_create_def = {
         BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
         BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -601,7 +595,7 @@ static BMOpDefine bmo_bridge_loops_def = {
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
         BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -627,7 +621,7 @@ static BMOpDefine bmo_grid_fill_def = {
        bmo_grid_fill_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH | 
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 
@@ -651,7 +645,7 @@ static BMOpDefine bmo_holes_fill_def = {
        bmo_holes_fill_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 
@@ -675,7 +669,7 @@ static BMOpDefine bmo_face_attribute_fill_def = {
        },
        bmo_face_attribute_fill_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -700,7 +694,7 @@ static BMOpDefine bmo_edgeloop_fill_def = {
        bmo_edgeloop_fill_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 
@@ -726,7 +720,7 @@ static BMOpDefine bmo_edgenet_fill_def = {
        bmo_edgenet_fill_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
         BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -912,7 +906,7 @@ static BMOpDefine bmo_extrude_discrete_faces_def = {
        },
        bmo_extrude_discrete_faces_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -934,7 +928,7 @@ static BMOpDefine bmo_extrude_edge_only_def = {
        },
        bmo_extrude_edge_only_exec,
        (BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -956,7 +950,7 @@ static BMOpDefine bmo_extrude_vert_indiv_def = {
        },
        bmo_extrude_vert_indiv_exec,
        (BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -979,8 +973,7 @@ static BMOpDefine bmo_connect_verts_def = {
        bmo_connect_verts_exec,
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -1002,8 +995,7 @@ static BMOpDefine bmo_connect_verts_concave_def = {
        bmo_connect_verts_concave_exec,
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -1026,8 +1018,7 @@ static BMOpDefine bmo_connect_verts_nonplanar_def = {
        bmo_connect_verts_nonplanar_exec,
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_SELECT_FLUSH |
-        BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -1050,8 +1041,7 @@ static BMOpDefine bmo_connect_vert_pair_def = {
        bmo_connect_vert_pair_exec,
        (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
         BMO_OPTYPE_FLAG_NORMALS_CALC |
-        BMO_OPTYPE_FLAG_SELECT_FLUS

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to