diff options
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_modifier.py | 4 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 5 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_warp.c | 5 |
4 files changed, 16 insertions, 4 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index ae450f17e09..021a4600a73 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -1139,7 +1139,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): col = split.column() col.label(text="To:") col.prop(md, "object_to", text="") - col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") + row = col.row(align=True) + row.prop_search(md, "vertex_group", ob, "vertex_groups", text="") + row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT') col = layout.column() diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index a203e77ab26..39efe838bab 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -1300,7 +1300,6 @@ typedef struct WarpModifierData { char defgrp_name[64]; float strength; float falloff_radius; - /** Not used yet. */ char flag; char falloff_type; char _pad[6]; @@ -1308,6 +1307,11 @@ typedef struct WarpModifierData { #define MOD_WARP_VOLUME_PRESERVE 1 +/* WarpModifierData->flag */ +enum { + MOD_WARP_INVERT_VGROUP = (1 << 0), +}; + typedef enum { eWarp_Falloff_None = 0, eWarp_Falloff_Curve = 1, diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 394f74f3675..6f2f12ebf98 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -1838,6 +1838,11 @@ static void rna_def_modifier_warp(BlenderRNA *brna) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WarpModifier_defgrp_name_set"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WARP_INVERT_VGROUP); + RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + rna_def_modifier_generic_map_info(srna); } diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 7155498c942..ba017577004 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -175,7 +175,7 @@ static void warpModifier_do(WarpModifierData *wmd, int i; int defgrp_index; MDeformVert *dvert, *dv = NULL; - + const bool invert_vgroup = (wmd->flag & MOD_WARP_INVERT_VGROUP) != 0; float(*tex_co)[3] = NULL; if (!(wmd->object_from && wmd->object_to)) { @@ -235,7 +235,8 @@ static void warpModifier_do(WarpModifierData *wmd, /* skip if no vert group found */ if (defgrp_index != -1) { dv = &dvert[i]; - weight = defvert_find_weight(dv, defgrp_index) * strength; + weight = invert_vgroup ? 1.0f - defvert_find_weight(dv, defgrp_index) * strength : + defvert_find_weight(dv, defgrp_index) * strength; if (weight <= 0.0f) { continue; } |