[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