[Bf-blender-cvs] [9efe117535c] master: Normal UI: for all ops needing autosmooth on, enable it if needed.

Howard Trickey noreply at git.blender.org
Mon May 20 18:18:38 CEST 2019


Commit: 9efe117535c6bed02f41c3d5cb8df9b3f301ada1
Author: Howard Trickey
Date:   Mon May 20 12:15:52 2019 -0400
Branches: master
https://developer.blender.org/rB9efe117535c6bed02f41c3d5cb8df9b3f301ada1

Normal UI: for all ops needing autosmooth on, enable it if needed.

Now Normal menu operations and rotate normals (r n) do not need
manual enabling of autosmooth first.
See T64324 for discussion of Normal UI changes.

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

M	source/blender/blenkernel/BKE_editmesh.h
M	source/blender/blenkernel/intern/editmesh.c
M	source/blender/editors/mesh/editmesh_tools.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_ops.c

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

diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h
index 91a558a9ee2..b7280c702d2 100644
--- a/source/blender/blenkernel/BKE_editmesh.h
+++ b/source/blender/blenkernel/BKE_editmesh.h
@@ -90,6 +90,7 @@ void BKE_editmesh_color_free(BMEditMesh *em);
 void BKE_editmesh_color_ensure(BMEditMesh *em, const char htype);
 float (*BKE_editmesh_vertexCos_get_orco(BMEditMesh *em, int *r_numVerts))[3];
 void BKE_editmesh_lnorspace_update(BMEditMesh *em);
+void BKE_editmesh_ensure_autosmooth(BMEditMesh *em);
 
 /* editderivedmesh.c */
 /* should really be defined in editmesh.c, but they use 'EditDerivedBMesh' */
diff --git a/source/blender/blenkernel/intern/editmesh.c b/source/blender/blenkernel/intern/editmesh.c
index 130f4ae88f1..264054266eb 100644
--- a/source/blender/blenkernel/intern/editmesh.c
+++ b/source/blender/blenkernel/intern/editmesh.c
@@ -248,3 +248,13 @@ void BKE_editmesh_lnorspace_update(BMEditMesh *em)
 
   BM_lnorspace_update(bm);
 }
+
+/* If autosmooth not already set, set it */
+void BKE_editmesh_ensure_autosmooth(BMEditMesh *em)
+{
+  Mesh *me = em->ob->data;
+  if (!(me->flag & ME_AUTOSMOOTH)) {
+    me->flag |= ME_AUTOSMOOTH;
+    BKE_editmesh_lnorspace_update (em);
+  }
+}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 91e931115f4..a871bd35f16 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -7687,6 +7687,7 @@ static int point_normals_init(bContext *C, wmOperator *op, const wmEvent *UNUSED
   BMEditMesh *em = BKE_editmesh_from_object(obedit);
   BMesh *bm = em->bm;
 
+  BKE_editmesh_ensure_autosmooth(em);
   BKE_editmesh_lnorspace_update(em);
   BMLoopNorEditDataArray *lnors_ed_arr = BM_loop_normal_editdata_array_init(bm);
 
@@ -8076,7 +8077,7 @@ void MESH_OT_point_normals(struct wmOperatorType *ot)
   ot->exec = edbm_point_normals_exec;
   ot->invoke = edbm_point_normals_invoke;
   ot->modal = edbm_point_normals_modal;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
   ot->ui = edbm_point_normals_ui;
   ot->cancel = point_normals_free;
 
@@ -8242,6 +8243,7 @@ static int normals_split_merge(bContext *C, const bool do_merge)
   BMEdge *e;
   BMIter eiter;
 
+  BKE_editmesh_ensure_autosmooth(em);
   BKE_editmesh_lnorspace_update(em);
 
   BMLoopNorEditDataArray *lnors_ed_arr = do_merge ? BM_loop_normal_editdata_array_init(bm) : NULL;
@@ -8287,7 +8289,7 @@ void MESH_OT_merge_normals(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_merge_normals_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -8307,7 +8309,7 @@ void MESH_OT_split_normals(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_split_normals_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -8345,6 +8347,7 @@ static int edbm_average_normals_exec(bContext *C, wmOperator *op)
   BMLoop *l, *l_curr, *l_first;
   BMIter fiter;
 
+  BKE_editmesh_ensure_autosmooth(em);
   bm->spacearr_dirty |= BM_SPACEARR_DIRTY_ALL;
   BKE_editmesh_lnorspace_update(em);
 
@@ -8505,7 +8508,7 @@ void MESH_OT_average_normals(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_average_normals_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
   ot->ui = edbm_average_normals_ui;
 
   /* flags */
@@ -8568,6 +8571,7 @@ static int edbm_normals_tools_exec(bContext *C, wmOperator *op)
   const int mode = RNA_enum_get(op->ptr, "mode");
   const bool absolute = RNA_boolean_get(op->ptr, "absolute");
 
+  BKE_editmesh_ensure_autosmooth(em);
   BKE_editmesh_lnorspace_update(em);
   BMLoopNorEditDataArray *lnors_ed_arr = BM_loop_normal_editdata_array_init(bm);
   BMLoopNorEditData *lnor_ed = lnors_ed_arr->lnor_editdata;
@@ -8724,7 +8728,7 @@ void MESH_OT_normals_tools(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_normals_tools_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
   ot->ui = edbm_normals_tools_ui;
 
   /* flags */
@@ -8764,6 +8768,7 @@ static int edbm_set_normals_from_faces_exec(bContext *C, wmOperator *op)
 
     const bool keep_sharp = RNA_boolean_get(op->ptr, "keep_sharp");
 
+    BKE_editmesh_ensure_autosmooth(em);
     BKE_editmesh_lnorspace_update(em);
 
     float(*vnors)[3] = MEM_callocN(sizeof(*vnors) * bm->totvert, __func__);
@@ -8842,7 +8847,7 @@ void MESH_OT_set_normals_from_faces(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_set_normals_from_faces_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -8859,6 +8864,7 @@ static int edbm_smoothen_normals_exec(bContext *C, wmOperator *op)
   BMLoop *l;
   BMIter fiter, liter;
 
+  BKE_editmesh_ensure_autosmooth(em);
   BKE_editmesh_lnorspace_update(em);
   BMLoopNorEditDataArray *lnors_ed_arr = BM_loop_normal_editdata_array_init(bm);
 
@@ -8934,7 +8940,7 @@ void MESH_OT_smoothen_normals(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_smoothen_normals_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -9017,7 +9023,7 @@ void MESH_OT_mod_weighted_strength(struct wmOperatorType *ot)
 
   /* api callbacks */
   ot->exec = edbm_mod_weighted_strength_exec;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 09f198ff14c..c3acd604ee1 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -4835,6 +4835,7 @@ static void initNormalRotation(TransInfo *t)
     BMEditMesh *em = BKE_editmesh_from_object(tc->obedit);
     BMesh *bm = em->bm;
 
+    BKE_editmesh_ensure_autosmooth(em);
     BKE_editmesh_lnorspace_update(em);
 
     storeCustomLNorValue(tc, bm);
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 8606cd19c96..cdd0896ab66 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -1170,7 +1170,7 @@ static void TRANSFORM_OT_rotate_normal(struct wmOperatorType *ot)
   ot->exec = transform_exec;
   ot->modal = transform_modal;
   ot->cancel = transform_cancel;
-  ot->poll = ED_operator_editmesh_auto_smooth;
+  ot->poll = ED_operator_editmesh;
 
   RNA_def_float_rotation(
       ot->srna, "value", 0, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2);



More information about the Bf-blender-cvs mailing list