[Bf-blender-cvs] [a7a4beecb20] soc-2017-normal-tools: Fixed vertex groups not respected with keep sharp in modifier.

Rohan Rathi noreply at git.blender.org
Sun Mar 11 10:24:08 CET 2018


Commit: a7a4beecb208d12a00d550e3ebf4e2a37730fa6b
Author: Rohan Rathi
Date:   Sun Mar 11 14:53:19 2018 +0530
Branches: soc-2017-normal-tools
https://developer.blender.org/rBa7a4beecb208d12a00d550e3ebf4e2a37730fa6b

Fixed vertex groups not respected with keep sharp in modifier.

Also fixed some other trivial issues.

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

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/modifiers/intern/MOD_weighted_normal.c
M	source/tools

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

diff --git a/release/datafiles/locale b/release/datafiles/locale
index d3349b42856..59495b4b590 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit d3349b42856d00c278f72f2a5909a6c96b9cdb5e
+Subproject commit 59495b4b59077aa1cc68fffbdae1463af980f08e
diff --git a/release/scripts/addons b/release/scripts/addons
index 827c5e62e8f..27970761a18 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 827c5e62e8f121f8f946f1f5f514f7751b1d684a
+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/modifiers/intern/MOD_weighted_normal.c b/source/blender/modifiers/intern/MOD_weighted_normal.c
index ef1c7b170c6..8dc009e86a3 100644
--- a/source/blender/modifiers/intern/MOD_weighted_normal.c
+++ b/source/blender/modifiers/intern/MOD_weighted_normal.c
@@ -172,11 +172,15 @@ static void apply_weights_sharp_loops(
 		}
 	}
 
+	const bool has_face_influence = (wnmd->flag & MOD_WEIGHTEDNORMAL_FACE_INFLUENCE) != 0 && poly_strength != NULL;
+
 	zero_v3(wn_data->vert_normals[0]);
 	wn_data->vert_loops_count[0] = 0;
 	wn_data->curr_vert_val[0] = 0.0f;
-	wn_data->curr_vert_strength[0] = FACE_STRENGTH_WEAK;
-	const bool has_face_influence = (wnmd->flag & MOD_WEIGHTEDNORMAL_FACE_INFLUENCE) != 0 && poly_strength != NULL;
+
+	if (has_face_influence) {
+		wn_data->curr_vert_strength[0] = FACE_STRENGTH_WEAK;
+	}
 
 	float *vert_normals = wn_data->vert_normals[0];
 	int *vert_loops_count = &wn_data->vert_loops_count[0];
@@ -195,7 +199,7 @@ static void apply_weights_sharp_loops(
 			mp_index = loop_to_poly[j];
 		}
 
-		if (has_face_influence && poly_strength) {
+		if (has_face_influence) {
 			do_loop = check_strength(wn_data, 0, mp_index);
 		}
 		if (do_loop) {
@@ -312,7 +316,7 @@ static void aggregate_vertex_normal(
 	const bool has_vgroup = dvert != NULL;
 	const bool vert_of_group = has_vgroup && defvert_find_index(&dvert[mv_index], defgrp_index) != NULL;
 
-	if (has_vgroup && ((vert_of_group && use_invert_vgroup) || (!vert_of_group && !use_invert_vgroup))) {
+	if (has_vgroup && ((vert_of_group && !use_invert_vgroup) || (vert_of_group && !use_invert_vgroup))) {
 		return;
 	}
 
@@ -437,6 +441,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, Weight
 		if (loop_to_poly == NULL) {
 			loop_to_poly_mem = MEM_malloc_arrayN((size_t)numLoops, sizeof(*loop_to_poly_mem), __func__);
 			loop_to_poly = loop_to_poly_mem;
+			wn_data->loop_to_poly = loop_to_poly;
 		}
 
 		BKE_mesh_normals_loop_split(mvert, numVerts, medge, numEdges, mloop, loop_normal, numLoops, mpoly, polynors,
@@ -505,14 +510,21 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, Weight
 					int *e2l_curr = edge_to_loops[ml_curr->e];
 					int *e2l_prev = edge_to_loops[ml_prev->e];
 
-					if (IS_EDGE_SHARP(e2l_curr)) {
-						if (IS_EDGE_SHARP(e2l_curr) && IS_EDGE_SHARP(e2l_prev)) {
-							loop_split_worker(wnmd, wn_data, ml_curr, ml_prev, ml_curr_index, -1, NULL,
-							                  mp_index, loop_normal, edge_to_loops);
-						}
-						else {
-							loop_split_worker(wnmd, wn_data, ml_curr, ml_prev, ml_curr_index, ml_prev_index, e2l_prev,
-							                  mp_index, loop_normal, edge_to_loops);
+					const bool use_invert_vgroup = wn_data->use_invert_vgroup;
+					const int defgrp_index = wn_data->defgrp_index;
+					const bool vert_of_group = has_vgroup && defvert_find_index(&dvert[mloop[ml_curr_index].v], defgrp_index) != NULL;
+					/* Check for vertex groups before proceeding, not sure how to make this cleaner */
+
+					if (has_vgroup && ((vert_of_group && !use_invert_vgroup) || (!vert_of_group && use_invert_vgroup))) {
+						if (IS_EDGE_SHARP(e2l_curr)) {
+							if (IS_EDGE_SHARP(e2l_curr) && IS_EDGE_SHARP(e2l_prev)) {
+								loop_split_worker(wnmd, wn_data, ml_curr, ml_prev, ml_curr_index, -1, NULL,
+									mp_index, loop_normal, edge_to_loops);
+							}
+							else {
+								loop_split_worker(wnmd, wn_data, ml_curr, ml_prev, ml_curr_index, ml_prev_index, e2l_prev,
+									mp_index, loop_normal, edge_to_loops);
+							}
 						}
 					}
 					ml_prev = ml_curr;
@@ -658,7 +670,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
 
 	bool free_polynors = false;
 
-	/* Add some comment here about why this is needed? */
+	/* Right now if wnmd->weight = 50 then all faces are given equal weight
+	   If weight > 50 then more weight given to faces with larger vals (face area / corner angle)
+	   If weight < 50 then more weight given to faces with lesser vals. However current calculation
+	   does not converge to min/max */
 	float weight = ((float)wnmd->weight) / 50.0f;
 	if (wnmd->weight == 100) {
 		weight = (float)SHRT_MAX;
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