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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to