[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40809] trunk/blender/source/blender/ editors/sculpt_paint/paint_vertex.c: fix for crash when painting normalize with no vertex groups, also minor cleanup to do_weight_paint_auto_normalize_all_groups()
Campbell Barton
ideasman42 at gmail.com
Thu Oct 6 03:29:34 CEST 2011
Revision: 40809
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40809
Author: campbellbarton
Date: 2011-10-06 01:29:32 +0000 (Thu, 06 Oct 2011)
Log Message:
-----------
fix for crash when painting normalize with no vertex groups, also minor cleanup to do_weight_paint_auto_normalize_all_groups()
Modified Paths:
--------------
trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c 2011-10-05 23:35:03 UTC (rev 40808)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c 2011-10-06 01:29:32 UTC (rev 40809)
@@ -1114,31 +1114,33 @@
#endif
/* the active group should be involved in auto normalize */
-static void do_weight_paint_auto_normalize_all_groups(MDeformVert *dvert, char *map, char do_auto_normalize)
+static void do_weight_paint_auto_normalize_all_groups(MDeformVert *dvert, const char *vgroup_validmap, char do_auto_normalize)
{
-// MDeformWeight *dw = dvert->dw;
- float sum=0.0f, fac=0.0f;
- int i, tot=0;
-
- if (do_auto_normalize == FALSE)
+ if (do_auto_normalize == FALSE) {
return;
+ }
+ else {
+ float sum= 0.0f, fac;
+ unsigned int i, tot=0;
+ MDeformWeight *dw;
- for (i=0; i<dvert->totweight; i++) {
- if (map[dvert->dw[i].def_nr]) {
- tot += 1;
- sum += dvert->dw[i].weight;
+ for (i= dvert->totweight, dw= dvert->dw; i != 0; i--, dw++) {
+ if (vgroup_validmap[dw->def_nr]) {
+ tot++;
+ sum += dw->weight;
+ }
}
- }
-
- if (!tot || sum == 1.0f)
- return;
- fac = sum;
- fac = fac==0.0f ? 1.0f : 1.0f / fac;
+ if ((tot == 0) || (sum == 1.0f) || (sum == 0.0f)) {
+ return;
+ }
- for (i=0; i<dvert->totweight; i++) {
- if (map[dvert->dw[i].def_nr]) {
- dvert->dw[i].weight *= fac;
+ fac= 1.0f / sum;
+
+ for (i= dvert->totweight, dw= dvert->dw; i != 0; i--, dw++) {
+ if (vgroup_validmap[dw->def_nr]) {
+ dw->weight *= fac;
+ }
}
}
}
@@ -1828,8 +1830,7 @@
if (!(md->mode & (eModifierMode_Realtime|eModifierMode_Virtual)))
continue;
- if (md->type == eModifierType_Armature)
- {
+ if (md->type == eModifierType_Armature) {
ArmatureModifierData *amd= (ArmatureModifierData*) md;
if(amd->object && amd->object->pose) {
@@ -2006,7 +2007,7 @@
wpi.vgroup_validmap= wpd->vgroup_validmap;
wpi.do_flip= RNA_boolean_get(itemptr, "pen_flip");
wpi.do_multipaint= (ts->multipaint != 0);
- wpi.do_auto_normalize= (ts->auto_normalize != 0);
+ wpi.do_auto_normalize= ((ts->auto_normalize != 0) && (wpi.vgroup_validmap != NULL));
/* *** done setting up WeightPaintInfo *** */
More information about the Bf-blender-cvs
mailing list