Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Mon, 29 Oct 2018 02:04:47 +0000 (13:04 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 29 Oct 2018 02:04:47 +0000 (13:04 +1100)
release/scripts/startup/bl_ui/properties_data_modifier.py
source/blender/makesdna/DNA_modifier_types.h
source/blender/makesrna/intern/rna_modifier.c
source/blender/modifiers/intern/MOD_mask.c

index 761805800fef884dee17c62012100ab89f5b3614..329b8785aecb821d90ef16aae2051387cb69d84f 100644 (file)
@@ -537,6 +537,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
             sub.active = bool(md.vertex_group)
             sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
 
+        col = layout.column()
+        col.prop(md, "threshold")
+
     def MESH_DEFORM(self, layout, ob, md):
         split = layout.split()
 
index 9f7b09b4a183d10094edbf9f67b95dc29117b748..6f8793bf0f73d119ec6e75533f8e2e1938bfca2c 100644 (file)
@@ -219,8 +219,9 @@ typedef struct MaskModifierData {
        struct Object *ob_arm;  /* armature to use to in place of hardcoded vgroup */
        char vgroup[64];        /* name of vertex group to use to mask, MAX_VGROUP_NAME */
 
-       int mode;               /* using armature or hardcoded vgroup */
-       int flag;               /* flags for various things */
+       short mode;               /* using armature or hardcoded vgroup */
+       short flag;               /* flags for various things */
+       float threshold;
 } MaskModifierData;
 
 /* Mask Modifier -> mode */
index fe36880657ce670a4dc84a2ff9193540ffff353e..dda2ee1e415fbd0f910f1aa5262aedc09e36d0da 100644 (file)
@@ -3336,6 +3336,13 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MASK_INV);
        RNA_def_property_ui_text(prop, "Invert", "Use vertices that are not part of region defined");
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+       prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_sdna(prop, NULL, "threshold");
+       RNA_def_property_range(prop, 0.0, 1.0);
+       RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
+       RNA_def_property_ui_text(prop, "Threshold", "Weights over this threshold remain");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
 static void rna_def_modifier_simpledeform(BlenderRNA *brna)
index 6f431911741ceda7357fce3334ec9f77a3354bc5..78058277033fa61d75a38c99d0c2c16d44554528 100644 (file)
@@ -183,7 +183,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
                        for (j = 0; j < dv->totweight; j++, dw++) {
                                if (dw->def_nr < defbase_tot) {
                                        if (bone_select_array[dw->def_nr]) {
-                                               if (dw->weight != 0.0f) {
+                                               if (dw->weight > mmd->threshold) {
                                                        found = true;
                                                        break;
                                                }
@@ -216,7 +216,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
 
                /* add vertices which exist in vertexgroup into ghash for filtering */
                for (i = 0, dv = dvert; i < maxVerts; i++, dv++) {
-                       const bool found = defvert_find_weight(dv, defgrp_index) != 0.0f;
+                       const bool found = defvert_find_weight(dv, defgrp_index) > mmd->threshold;
                        if (found_test != found) {
                                continue;
                        }