[Bf-blender-cvs] [d29dd5916f7] master: Minor cleanup/refactor of EditMesh custom normals copy code.

Bastien Montagne noreply at git.blender.org
Tue Mar 19 12:31:59 CET 2019


Commit: d29dd5916f7d3cfb21cacb003df5796051c93301
Author: Bastien Montagne
Date:   Tue Mar 19 11:10:30 2019 +0100
Branches: master
https://developer.blender.org/rBd29dd5916f7d3cfb21cacb003df5796051c93301

Minor cleanup/refactor of EditMesh custom normals copy code.

Do not compute temp helper data when we do not need it (even though in
that case it was totally cheap to compute).

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

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 9a58608081f..5b2cb97aff1 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -8000,16 +8000,10 @@ static int edbm_normals_tools_exec(bContext *C, wmOperator *op)
 	switch (mode) {
 		case EDBM_CLNOR_TOOLS_COPY:
 			if (bm->totfacesel != 1 && lnors_ed_arr->totloop != 1 && bm->totvertsel != 1) {
-				BKE_report(op->reports, RPT_ERROR, "Can only copy custom normal, vertex normal or face normal");
+				BKE_report(op->reports, RPT_ERROR, "Can only copy one custom normal, vertex normal or face normal");
 				BM_loop_normal_editdata_array_free(lnors_ed_arr);
 				return OPERATOR_CANCELLED;
 			}
-			bool join = true;
-			for (int i = 0; i < lnors_ed_arr->totloop; i++, lnor_ed++) {
-				if (!compare_v3v3(lnors_ed_arr->lnor_editdata->nloc, lnor_ed->nloc, 1e-4f)) {
-					join = false;
-				}
-			}
 			if (lnors_ed_arr->totloop == 1) {
 				copy_v3_v3(scene->toolsettings->normal_vector, lnors_ed_arr->lnor_editdata->nloc);
 			}
@@ -8022,8 +8016,18 @@ static int edbm_normals_tools_exec(bContext *C, wmOperator *op)
 					}
 				}
 			}
-			else if (join) {
-				copy_v3_v3(scene->toolsettings->normal_vector, lnors_ed_arr->lnor_editdata->nloc);
+			else {
+				/* 'Vertex' normal, i.e. common set of loop normals on the same vertex,
+				 * only if they are all the same. */
+				bool are_same_lnors = true;
+				for (int i = 0; i < lnors_ed_arr->totloop; i++, lnor_ed++) {
+					if (!compare_v3v3(lnors_ed_arr->lnor_editdata->nloc, lnor_ed->nloc, 1e-4f)) {
+						are_same_lnors = false;
+					}
+				}
+				if (are_same_lnors) {
+					copy_v3_v3(scene->toolsettings->normal_vector, lnors_ed_arr->lnor_editdata->nloc);
+				}
 			}
 			break;



More information about the Bf-blender-cvs mailing list