Revision: 39198
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39198
Author:   mont29
Date:     2011-08-08 21:12:51 +0000 (Mon, 08 Aug 2011)
Log Message:
-----------
vgroup_modifiers: Now clamping output values to [0.0, 1.0] range (and added 
min/max mapping values for Prowimity modif).

Modified Paths:
--------------
    
branches/vgroup_modifiers/release/scripts/startup/bl_ui/properties_data_modifier.py
    branches/vgroup_modifiers/source/blender/makesdna/DNA_modifier_types.h
    branches/vgroup_modifiers/source/blender/makesrna/intern/rna_modifier.c
    
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c
    
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgproximity.c

Modified: 
branches/vgroup_modifiers/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- 
branches/vgroup_modifiers/release/scripts/startup/bl_ui/properties_data_modifier.py
 2011-08-08 20:25:00 UTC (rev 39197)
+++ 
branches/vgroup_modifiers/release/scripts/startup/bl_ui/properties_data_modifier.py
 2011-08-08 21:12:51 UTC (rev 39198)
@@ -859,6 +859,10 @@
                 row = layout.row()
                 row.prop(md, "proximity_geometry", expand=True)
 
+            row = layout.split()
+            row.prop(md, "min_dist")
+            row.prop(md, "max_dist")
+
             # Common mask options…
             layout.separator()
             self.weight_vg_mask(layout, ob, md)

Modified: branches/vgroup_modifiers/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/vgroup_modifiers/source/blender/makesdna/DNA_modifier_types.h      
2011-08-08 20:25:00 UTC (rev 39197)
+++ branches/vgroup_modifiers/source/blender/makesdna/DNA_modifier_types.h      
2011-08-08 21:12:51 UTC (rev 39198)
@@ -921,6 +921,8 @@
        int             mask_tex_mapping;          /* How to map the texture! */
        char    mask_tex_uvlayer_name[32]; /* Name of the UV layer. */
 
+       float   min_dist, max_dist;        /* Distances mapping to 0.0/1.0 
weights. */
+
        /* Padding… */
        int pad_i2;
 } WeightVGProximityModifierData;

Modified: 
branches/vgroup_modifiers/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- branches/vgroup_modifiers/source/blender/makesrna/intern/rna_modifier.c     
2011-08-08 20:25:00 UTC (rev 39197)
+++ branches/vgroup_modifiers/source/blender/makesrna/intern/rna_modifier.c     
2011-08-08 21:12:51 UTC (rev 39198)
@@ -2781,6 +2781,18 @@
        RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
        RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
 
+       prop= RNA_def_property(srna, "min_dist", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
+       RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Lowest Dist", "Distance mapping to 
weight 0.0.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+       prop= RNA_def_property(srna, "max_dist", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
+       RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Highest Dist", "Distance mapping to 
weight 1.0.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
        /* Common masking properties. */
        rna_def_modifier_weightvg_mask(brna, srna);
 }

Modified: 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c
===================================================================
--- 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c   
    2011-08-08 20:25:00 UTC (rev 39197)
+++ 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c   
    2011-08-08 21:12:51 UTC (rev 39198)
@@ -192,6 +192,9 @@
                MDeformVert *dv = &dvert[indices ? indices[i] : i];
                MDeformWeight *newdw;
 
+               /* Never allow weights out of [0.0, 1.0] range. */
+               CLAMP(w, 0.0, 1.0);
+
                /* Let’s first check to see if this vert is already in the 
weight group – if so
                 * let’s update it, or remove it if needed.
                 */

Modified: 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgproximity.c
===================================================================
--- 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgproximity.c
   2011-08-08 20:25:00 UTC (rev 39197)
+++ 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgproximity.c
   2011-08-08 21:12:51 UTC (rev 39198)
@@ -200,6 +200,27 @@
        return len_v3v3(ob->obmat[3], obr->obmat[3]); 
 }
 
+/**
+ * Maps distances to weights.
+ */
+void do_map(float *weights, const int nidx, const float min_d, const float 
max_d)
+{
+       int i;
+       float b = min_d / (min_d - max_d);
+       float a = -b / min_d;
+       for (i = 0; i < nidx; i++)
+               weights[i] = a * weights[i] + b;
+}
+
+/*a min_d + b = 0.0*/
+/*a max_d + b = 1.0*/
+/*a min_d = -b*/
+/*a = -b / min_d*/
+
+/*max_d(-b/min_d) + b = 1.0*/
+/*b((-max_d/min_d)+1.0) = 1.0*/
+/*b = 1.0 / ((min_d-max_d)/min_d)*/
+/*b = min_d/(min_d-max_d)*/
 /**************************************
  * Modifiers functions.               *
  **************************************/
@@ -476,6 +497,9 @@
                         wmd->mask_defgrp_name, wmd->mask_texture, 
wmd->mask_tex_use_channel,
                         wmd->mask_tex_mapping, wmd->mask_tex_map_obj, 
wmd->mask_tex_uvlayer_name);
 
+       /* Map distances to weights. */
+       do_map(org_w, numIdx, wmd->min_dist, wmd->max_dist);
+
        /* Update vgroup. Note we never add nor remove vertices from vgroup 
here. */
        weightvg_update_vg(dvert, defgrp_idx, numIdx, indices, org_w, 0, 0.0f, 
0, 0.0f);
 

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

Reply via email to