[Bf-blender-cvs] [9969c2dd165] blender-v2.91-release: Fix custom-normal support for mesh editing operations

Campbell Barton noreply at git.blender.org
Mon Oct 26 12:02:43 CET 2020


Commit: 9969c2dd165c7d8ffe607a5a050a80aa59ac50be
Author: Campbell Barton
Date:   Mon Oct 26 21:57:51 2020 +1100
Branches: blender-v2.91-release
https://developer.blender.org/rB9969c2dd165c7d8ffe607a5a050a80aa59ac50be

Fix custom-normal support for mesh editing operations

Account for custom normals for edit-mesh tools:

- Limited Dissolve
- Split
- Split (Edges/Vertices)
- Triangulate

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

M	source/blender/editors/mesh/editmesh_tools.c

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

diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 47836d2e529..85cc19e7471 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -1765,11 +1765,16 @@ static bool edbm_edge_split_selected_edges(wmOperator *op, Object *obedit, BMEdi
   if (bm->totedgesel == 0) {
     return false;
   }
+
+  BM_custom_loop_normals_to_vector_layer(em->bm);
+
   if (!EDBM_op_call_and_selectf(
           em, op, "edges.out", false, "split_edges edges=%he", BM_ELEM_SELECT)) {
     return false;
   }
 
+  BM_custom_loop_normals_from_vector_layer(em->bm, false);
+
   EDBM_select_flush(em);
   EDBM_update_generic(obedit->data, true, true);
 
@@ -1805,6 +1810,8 @@ static bool edbm_edge_split_selected_verts(wmOperator *op, Object *obedit, BMEdi
     }
   }
 
+  BM_custom_loop_normals_to_vector_layer(em->bm);
+
   if (!EDBM_op_callf(em,
                      op,
                      "split_edges edges=%he verts=%hv use_verts=%b",
@@ -1836,6 +1843,8 @@ static bool edbm_edge_split_selected_verts(wmOperator *op, Object *obedit, BMEdi
     }
   }
 
+  BM_custom_loop_normals_from_vector_layer(em->bm, false);
+
   EDBM_select_flush(em);
   EDBM_update_generic(obedit->data, true, true);
 
@@ -5284,6 +5293,8 @@ static int edbm_quads_convert_to_tris_exec(bContext *C, wmOperator *op)
     BMOIter oiter;
     BMFace *f;
 
+    BM_custom_loop_normals_to_vector_layer(em->bm);
+
     EDBM_op_init(em,
                  &bmop,
                  op,
@@ -5308,6 +5319,8 @@ static int edbm_quads_convert_to_tris_exec(bContext *C, wmOperator *op)
       continue;
     }
 
+    BM_custom_loop_normals_from_vector_layer(em->bm, false);
+
     EDBM_update_generic(obedit->data, true, true);
   }
 
@@ -5997,6 +6010,8 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op)
       dissolve_flag = BM_ELEM_SELECT;
     }
 
+    BM_custom_loop_normals_to_vector_layer(em->bm);
+
     EDBM_op_call_and_selectf(
         em,
         op,
@@ -6009,6 +6024,8 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op)
         use_dissolve_boundaries,
         delimit);
 
+    BM_custom_loop_normals_from_vector_layer(em->bm, false);
+
     EDBM_update_generic(obedit->data, true, true);
   }
   MEM_freeN(objects);
@@ -6233,6 +6250,8 @@ static int edbm_split_exec(bContext *C, wmOperator *op)
     if ((em->bm->totvertsel == 0) && (em->bm->totedgesel == 0) && (em->bm->totfacesel == 0)) {
       continue;
     }
+    BM_custom_loop_normals_to_vector_layer(em->bm);
+
     BMOperator bmop;
     EDBM_op_init(em, &bmop, op, "split geom=%hvef use_only_faces=%b", BM_ELEM_SELECT, false);
     BMO_op_exec(em->bm, &bmop);
@@ -6240,6 +6259,8 @@ static int edbm_split_exec(bContext *C, wmOperator *op)
     BMO_slot_buffer_hflag_enable(
         em->bm, bmop.slots_out, "geom.out", BM_ALL_NOLOOP, BM_ELEM_SELECT, true);
 
+    BM_custom_loop_normals_from_vector_layer(em->bm, false);
+
     if (!EDBM_op_finish(em, &bmop, op, true)) {
       continue;
     }



More information about the Bf-blender-cvs mailing list