diff options
author | Cody Winchester <CodyWinch> | 2020-02-18 20:06:13 +0300 |
---|---|---|
committer | Bastien Montagne <b.mont29@gmail.com> | 2020-02-18 20:09:40 +0300 |
commit | 6cd4363c0c3ee73a0656e84e91ebf9e9c936d6bd (patch) | |
tree | 7bded0bc39f848d4bb5571382c99a1e694c144c9 /source/blender/modifiers/intern/MOD_bevel.c | |
parent | ed8aa154a33d1477a399ce165ed08963b441a0de (diff) |
Modifiers: Bevel modifier add invert vgroup option
Adds the invert vgroup option to the Bevel modifier.
Reviewed By: mont29
Differential Revision: https://developer.blender.org/D6845
Diffstat (limited to 'source/blender/modifiers/intern/MOD_bevel.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_bevel.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index f5bb1cb0ef8..14f1650d690 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -118,6 +118,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes const float spread = bmd->spread; const bool use_custom_profile = (bmd->flags & MOD_BEVEL_CUSTOM_PROFILE); const int vmesh_method = bmd->vmesh_method; + const bool invert_vgroup = (bmd->flags & MOD_BEVEL_INVERT_VGROUP) != 0; bm = BKE_mesh_to_bmesh_ex(mesh, &(struct BMeshCreateParams){0}, @@ -146,7 +147,9 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes } } else if (vgroup != -1) { - weight = defvert_array_find_weight_safe(dvert, BM_elem_index_get(v), vgroup); + weight = invert_vgroup ? + 1.0f - defvert_array_find_weight_safe(dvert, BM_elem_index_get(v), vgroup) : + defvert_array_find_weight_safe(dvert, BM_elem_index_get(v), vgroup); /* Check is against 0.5 rather than != 0.0 because cascaded bevel modifiers will * interpolate weights for newly created vertices, and may cause unexpected "selection" */ if (weight < 0.5f) { @@ -180,8 +183,14 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes } } else if (vgroup != -1) { - weight = defvert_array_find_weight_safe(dvert, BM_elem_index_get(e->v1), vgroup); - weight2 = defvert_array_find_weight_safe(dvert, BM_elem_index_get(e->v2), vgroup); + weight = invert_vgroup ? + 1.0f - defvert_array_find_weight_safe( + dvert, BM_elem_index_get(e->v1), vgroup) : + defvert_array_find_weight_safe(dvert, BM_elem_index_get(e->v1), vgroup); + weight2 = invert_vgroup ? + 1.0f - defvert_array_find_weight_safe( + dvert, BM_elem_index_get(e->v2), vgroup) : + defvert_array_find_weight_safe(dvert, BM_elem_index_get(e->v2), vgroup); if (weight < 0.5f || weight2 < 0.5f) { continue; } |