[Bf-blender-cvs] [28061ac85e5] soc-2017-normal-tools: Fixed bugs and cleanup
Rohan Rathi
noreply at git.blender.org
Mon Jul 3 09:32:26 CEST 2017
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. @@
More information about the Bf-blender-cvs
mailing list