[Bf-blender-cvs] [dd6642bb80a] soc-2017-normal-tools: Added custom loop normals to work correctly with autosmooth

Rohan Rathi noreply at git.blender.org
Wed Feb 14 09:34:23 CET 2018


Commit: dd6642bb80acedc601244ed841576c9082e90af3
Author: Rohan Rathi
Date:   Wed Feb 14 14:03:04 2018 +0530
Branches: soc-2017-normal-tools
https://developer.blender.org/rBdd6642bb80acedc601244ed841576c9082e90af3

Added custom loop normals to work correctly with autosmooth

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

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
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/tools

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

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 469c949d1ca..59495b4b590 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 469c949d1ca882be19daa128842f813b72a944d8
+Subproject commit 59495b4b59077aa1cc68fffbdae1463af980f08e
diff --git a/release/scripts/addons b/release/scripts/addons
index c88411ff777..27970761a18 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit c88411ff7776a2db5d6ef6117a1b2faa42a95611
+Subproject commit 27970761a18926abe1b0020aa350305e3109a537
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 310578043de..6a4f93c9b8f 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 310578043dec1aae382eb6a447ae1d103792d7e6
+Subproject commit 6a4f93c9b8f36b19bd02087abf3d7f5983df035a
diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h
index 55a9db9b1e5..7c87eb40a60 100644
--- a/source/blender/blenkernel/BKE_editmesh.h
+++ b/source/blender/blenkernel/BKE_editmesh.h
@@ -93,6 +93,7 @@ void        BKE_editmesh_update_linked_customdata(BMEditMesh *em);
 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);
 
 /* 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 fea3c24d322..a0205a828e3 100644
--- a/source/blender/blenkernel/intern/editmesh.c
+++ b/source/blender/blenkernel/intern/editmesh.c
@@ -264,3 +264,27 @@ float (*BKE_editmesh_vertexCos_get_orco(BMEditMesh *em, int *r_numVerts))[3]
 
 	return orco;
 }
+
+void BKE_editmesh_lnorspace_update(BMEditMesh *em)
+{
+	BMesh *bm = em->bm;
+	if (bm->lnor_spacearr == NULL) {
+		float split_angle = ((Mesh *)em->ob->data)->smoothresh;
+		split_angle = cosf(split_angle);
+
+		BMEdge *e;
+		BMIter eiter;
+		BM_ITER_MESH(e, &eiter, em->bm, BM_EDGES_OF_MESH) {
+			BMLoop *l_1, *l_2;
+			if (BM_edge_loop_pair(e, &l_1, &l_2)) {
+				const float *no_1 = l_1->f->no;
+				const float *no_2 = l_2->f->no;
+
+				if (dot_v3v3(no_1, no_2) < split_angle && BM_elem_flag_test(e, BM_ELEM_SMOOTH)) {
+					BM_elem_flag_disable(e, BM_ELEM_SMOOTH);
+				}
+			}
+		}
+	}
+	BM_lnorspace_update(bm);
+}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 9d5751f4782..56042d1f5dd 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -5994,9 +5994,10 @@ void MESH_OT_mark_freestyle_face(wmOperatorType *ot)
 static int init_point_normals(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
 	Object *obedit = CTX_data_edit_object(C);
-	BMesh *bm = BKE_editmesh_from_object(obedit)->bm;
+	BMEditMesh *em = BKE_editmesh_from_object(obedit);
+	BMesh *bm = em->bm;
 
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 	LoopNormalData *ld = BM_loop_normal_init(bm);
 
 	ld->funcdata = NULL;
@@ -6520,7 +6521,7 @@ static int split_merge_loop_normals(bContext *C, const bool do_merge)
 	BMEdge *e;
 	BMIter eiter;
 
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 
 	LoopNormalData *ld = do_merge ? BM_loop_normal_init(bm) : NULL;
 
@@ -6537,7 +6538,7 @@ static int split_merge_loop_normals(bContext *C, const bool do_merge)
 	}
 
 	bm->spacearr_dirty |= BM_SPACEARR_DIRTY_ALL;
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 
 	if (do_merge) {
 		merge_loop(C, ld);
@@ -6620,7 +6621,7 @@ static int edbm_average_loop_normals_exec(bContext *C, wmOperator *op)
 	BMIter fiter;
 
 	bm->spacearr_dirty |= BM_SPACEARR_DIRTY_ALL;
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 
 	const int average_type = RNA_enum_get(op->ptr, "average_type");
 	int cd_clnors_offset = CustomData_get_offset(&bm->ldata, CD_CUSTOMLOOPNORMAL);
@@ -6813,7 +6814,7 @@ static int edbm_custom_normal_tools_exec(bContext *C, wmOperator *op)
 	const int mode = RNA_enum_get(op->ptr, "mode");
 	const bool absolute = RNA_boolean_get(op->ptr, "absolute");
 
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 	LoopNormalData *ld = BM_loop_normal_init(bm);
 	TransDataLoopNormal *tld = ld->normal;
 
@@ -6965,7 +6966,7 @@ static int edbm_set_normals_from_faces_exec(bContext *C, wmOperator *op)
 
 	const bool keep_sharp = RNA_boolean_get(op->ptr, "keep_sharp");
 
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 
 	float(*vnors)[3] = MEM_callocN(sizeof(*vnors) * bm->totvert, __func__);
 	BM_ITER_MESH(f, &fiter, bm, BM_FACES_OF_MESH) {
@@ -7057,7 +7058,7 @@ static int edbm_smoothen_normals_exec(bContext *C, wmOperator *op)
 	BMLoop *l;
 	BMIter fiter, liter;
 
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 	LoopNormalData *ld = BM_loop_normal_init(bm);
 
 	float(*smooth_normal)[3] = MEM_callocN(sizeof(*smooth_normal) * ld->totloop, __func__);
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index a81e775e12c..60e79a046a0 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2411,7 +2411,7 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
 			if (!all_select) {
 				const bool preserve_clnor = RNA_property_boolean_get(op->ptr, prop);
 				if (preserve_clnor) {
-					BM_lnorspace_update(em->bm);
+					BKE_editmesh_lnorspace_update(em);
 					t->flag |= T_CLNOR_REBUILD;
 				}
 				BM_lnorspace_invalidate(em->bm, true);
@@ -4280,7 +4280,7 @@ static void initNormalRotation(TransInfo *t)
 	BMEditMesh *em = BKE_editmesh_from_object(t->obedit);
 	BMesh *bm = em->bm;
 
-	BM_lnorspace_update(bm);
+	BKE_editmesh_lnorspace_update(em);
 
 	StoreCustomlnorValue(t, bm);
 	
diff --git a/source/tools b/source/tools
index 7695e14cfc5..88a1758d2d2 160000
--- a/source/tools
+++ b/source/tools
@@ -1 +1 @@
-Subproject commit 7695e14cfc5820ac66546e0e515914d85ab81af3
+Subproject commit 88a1758d2d2e862cc69c08b5b40a4e75f71592d3



More information about the Bf-blender-cvs mailing list