Commit: 470e694652a28d20d31e001240fdb9727a6d1480
Author: Campbell Barton
Date:   Mon Aug 25 16:40:46 2014 +1000
Branches: master
https://developer.blender.org/rB470e694652a28d20d31e001240fdb9727a6d1480

BMesh: New operator flag not to clear history

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

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

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

diff --git a/source/blender/bmesh/intern/bmesh_mesh.c 
b/source/blender/bmesh/intern/bmesh_mesh.c
index 26a224c..b16ea42 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -766,6 +766,8 @@ void bmesh_edit_begin(BMesh *UNUSED(bm), BMOpTypeFlag 
UNUSED(type_flag))
  */
 void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
 {
+       ListBase select_history;
+
        /* BMO_OPTYPE_FLAG_UNTAN_MULTIRES disabled for now, see comment above 
in bmesh_edit_begin. */
 #ifdef BMOP_UNTAN_MULTIRES_ENABLED
        /* switch multires data into tangent space */
@@ -784,9 +786,19 @@ void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
                BM_mesh_normals_update(bm);
        }
 
+
+       if ((type_flag & BMO_OPTYPE_FLAG_SELECT_VALIDATE) == 0) {
+               select_history = bm->selected;
+               BLI_listbase_clear(&bm->selected);
+       }
+
        if (type_flag & BMO_OPTYPE_FLAG_SELECT_FLUSH) {
                BM_mesh_select_mode_flush(bm);
        }
+
+       if ((type_flag & BMO_OPTYPE_FLAG_SELECT_VALIDATE) == 0) {
+               bm->selected = select_history;
+       }
 }
 
 void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c 
b/source/blender/bmesh/intern/bmesh_opdefines.c
index 7dc46cf..5e568f8 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -115,7 +115,7 @@ static BMOpDefine bmo_smooth_vert_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_smooth_vert_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -138,7 +138,7 @@ static BMOpDefine bmo_smooth_laplacian_vert_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_smooth_laplacian_vert_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -154,7 +154,8 @@ static BMOpDefine bmo_recalc_face_normals_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_recalc_face_normals_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -180,7 +181,8 @@ static BMOpDefine bmo_region_extend_def = {
         {{'\0'}},
        },
        bmo_region_extend_exec,
-       BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -201,7 +203,10 @@ static BMOpDefine bmo_rotate_edges_def = {
         {{'\0'}},
        },
        bmo_rotate_edges_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -218,7 +223,8 @@ static BMOpDefine bmo_reverse_faces_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_reverse_faces_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -240,7 +246,10 @@ static BMOpDefine bmo_bisect_edges_def = {
         {{'\0'}},
        },
        bmo_bisect_edges_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -266,7 +275,9 @@ static BMOpDefine bmo_mirror_def = {
         {{'\0'}},
        },
        bmo_mirror_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -291,7 +302,7 @@ static BMOpDefine bmo_find_doubles_def = {
         {{'\0'}},
        },
        bmo_find_doubles_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -309,7 +320,10 @@ static BMOpDefine bmo_remove_doubles_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_remove_doubles_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -328,7 +342,10 @@ static BMOpDefine bmo_automerge_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_automerge_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -344,7 +361,10 @@ static BMOpDefine bmo_collapse_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_collapse_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -361,7 +381,7 @@ static BMOpDefine bmo_pointmerge_facedata_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_pointmerge_facedata_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -379,7 +399,7 @@ static BMOpDefine bmo_average_vert_facedata_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_average_vert_facedata_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -396,7 +416,10 @@ static BMOpDefine bmo_pointmerge_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_pointmerge_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -412,7 +435,7 @@ static BMOpDefine bmo_collapse_uvs_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_collapse_uvs_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -431,7 +454,10 @@ static BMOpDefine bmo_weld_verts_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_weld_verts_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -451,7 +477,7 @@ static BMOpDefine bmo_create_vert_def = {
         {{'\0'}},
        },
        bmo_create_vert_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -476,7 +502,10 @@ static BMOpDefine bmo_join_triangles_def = {
         {{'\0'}},
        },
        bmo_join_triangles_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -504,7 +533,10 @@ static BMOpDefine bmo_contextual_create_def = {
         {{'\0'}},
        },
        bmo_contextual_create_exec,
-       BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | 
BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
+        BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -527,7 +559,9 @@ static BMOpDefine bmo_bridge_loops_def = {
         {{'\0'}},
        },
        bmo_bridge_loops_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH |
+        BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -551,7 +585,8 @@ static BMOpDefine bmo_grid_fill_def = {
         {{'\0'}},
        },
        bmo_grid_fill_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -573,7 +608,8 @@ static BMOpDefine bmo_holes_fill_def = {
         {{'\0'}},
        },
        bmo_holes_fill_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -596,7 +632,7 @@ static BMOpDefine bmo_face_attribute_fill_def = {
         {{'\0'}},
        },
        bmo_face_attribute_fill_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -619,7 +655,8 @@ static BMOpDefine bmo_edgeloop_fill_def = {
         {{'\0'}},
        },
        bmo_edgeloop_fill_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -643,7 +680,8 @@ static BMOpDefine bmo_edgenet_fill_def = {
         {{'\0'}},
        },
        bmo_edgenet_fill_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC |
+        BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -667,7 +705,7 @@ static BMOpDefine bmo_edgenet_prepare_def = {
         {{'\0'}},
        },
        bmo_edgenet_prepare_exec,
-       BMO_OPTYPE_FLAG_NOP,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -686,7 +724,7 @@ static BMOpDefine bmo_rotate_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_rotate_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -704,7 +742,7 @@ static BMOpDefine bmo_translate_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_translate_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -722,7 +760,7 @@ static BMOpDefine bmo_scale_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_scale_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 
@@ -742,7 +780,7 @@ static BMOpDefine bmo_transform_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_transform_exec,
-       BMO_OPTYPE_FLAG_NORMALS_CALC,
+       (BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -760,7 +798,7 @@ static BMOpDefine bmo_object_load_bmesh_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_object_load_bmesh_exec,
-       BMO_OPTYPE_FLAG_NOP,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 
@@ -782,7 +820,7 @@ static BMOpDefine bmo_bmesh_to_mesh_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_bmesh_to_mesh_exec,
-       BMO_OPTYPE_FLAG_NOP,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -804,7 +842,7 @@ static BMOpDefine bmo_mesh_to_bmesh_def = {
        },
        {{{'\0'}}},  /* no output */
        bmo_mesh_to_bmesh_exec,
-       BMO_OPTYPE_FLAG_NOP,
+       (BMO_OPTYPE_FLAG_NOP),
 };
 
 /*
@@ -823,7 +861,7 @@ static BMOpDefine bmo_extrude_discrete_faces_def = {
         {{'\0'}},
        },
        

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to