[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12625] trunk/blender/source/blender: Revamp of multi modifier option!

Ton Roosendaal ton at blender.org
Mon Nov 19 19:00:48 CET 2007


Revision: 12625
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12625
Author:   ton
Date:     2007-11-19 19:00:48 +0100 (Mon, 19 Nov 2007)

Log Message:
-----------
Revamp of multi modifier option!

- error fix: overall weight group value was used inverted
- added "Inv" button to make weight group work inverted
- added bigger, more clear Multi Modifier button

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/makesdna/DNA_armature_types.h
    trunk/blender/source/blender/src/buttons_editing.c

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2007-11-19 17:39:52 UTC (rev 12624)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2007-11-19 18:00:48 UTC (rev 12625)
@@ -801,6 +801,7 @@
 	int use_envelope = deformflag & ARM_DEF_ENVELOPE;
 	int use_quaternion = deformflag & ARM_DEF_QUATERNION;
 	int bbone_rest_def = deformflag & ARM_DEF_B_BONE_REST;
+	int invert_vgroup= deformflag & ARM_DEF_INVERT_VGROUP;
 	int numGroups = 0;		/* safety for vertexgroup index overflow */
 	int i, target_totvert = 0;	/* safety for vertexgroup overflow */
 	int use_dverts = 0;
@@ -921,7 +922,10 @@
 			}
 			/* hackish: the blending factor can be used for blending with prevCos too */
 			if(prevCos) {
-				prevco_weight= armature_weight;
+				if(invert_vgroup)
+					prevco_weight= 1.0f-armature_weight;
+				else
+					prevco_weight= armature_weight;
 				armature_weight= 1.0f;
 			}
 		}
@@ -1018,11 +1022,11 @@
 		
 		
 		/* interpolate with previous modifier position using weight group */
-		if(prevCos && prevco_weight!=1.0f) {
+		if(prevCos) {
 			float mw= 1.0f - prevco_weight;
-			vertexCos[i][0]= mw*vertexCos[i][0] + prevco_weight*co[0];
-			vertexCos[i][1]= mw*vertexCos[i][1] + prevco_weight*co[1];
-			vertexCos[i][2]= mw*vertexCos[i][2] + prevco_weight*co[2];
+			vertexCos[i][0]= prevco_weight*vertexCos[i][0] + mw*co[0];
+			vertexCos[i][1]= prevco_weight*vertexCos[i][1] + mw*co[1];
+			vertexCos[i][2]= prevco_weight*vertexCos[i][2] + mw*co[2];
 		}
 	}
 

Modified: trunk/blender/source/blender/makesdna/DNA_armature_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_armature_types.h	2007-11-19 17:39:52 UTC (rev 12624)
+++ trunk/blender/source/blender/makesdna/DNA_armature_types.h	2007-11-19 18:00:48 UTC (rev 12625)
@@ -112,10 +112,11 @@
 #define		ARM_ENVELOPE	3
 
 /* armature->deformflag */
-#define		ARM_DEF_VGROUP		1
-#define		ARM_DEF_ENVELOPE	2
-#define		ARM_DEF_QUATERNION	4
-#define		ARM_DEF_B_BONE_REST	8
+#define		ARM_DEF_VGROUP			1
+#define		ARM_DEF_ENVELOPE		2
+#define		ARM_DEF_QUATERNION		4
+#define		ARM_DEF_B_BONE_REST		8
+#define		ARM_DEF_INVERT_VGROUP	16
 
 /* armature->pathflag */
 #define		ARM_PATH_FNUMS		(1<<0)

Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c	2007-11-19 17:39:52 UTC (rev 12624)
+++ trunk/blender/source/blender/src/buttons_editing.c	2007-11-19 18:00:48 UTC (rev 12625)
@@ -1632,7 +1632,7 @@
 			if(wmd->flag & MOD_WAVE_NORM)
 				height += 19;
 		} else if (md->type==eModifierType_Armature) {
-			height = 86;
+			height = 105;
 		} else if (md->type==eModifierType_Hook) {
 			HookModifierData *hmd = (HookModifierData*) md;
 			height = 86;
@@ -1959,12 +1959,15 @@
 			
 			but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ",				  lx, (cy-=19), buttonWidth-40,19, &amd->defgrp_name, 0.0, 31.0, 0, 0, "Vertex Group name to control overall armature influence");
 			uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
-			uiDefButS(block, TOG, B_ARM_RECALCDATA, "MM",	lx+buttonWidth-40,cy, 40, 20, &amd->multi, 0, 0, 0, 0, "MultiModifier: This modifier uses same input as previous modifier, and mixes using this vgroup");
+			uiDefButBitS(block, TOG, ARM_DEF_INVERT_VGROUP, B_ARM_RECALCDATA, "Inv",	lx+buttonWidth-40,cy, 40, 20, &amd->deformflag, 0, 0, 0, 0, "Invert vertex group influence");
 			
 			uiDefButBitS(block, TOG, ARM_DEF_VGROUP, B_ARM_RECALCDATA, "Vert.Groups",	lx,cy-=19,buttonWidth/2,20, &amd->deformflag, 0, 0, 0, 0, "Enable VertexGroups defining deform");
 			uiDefButBitS(block, TOG, ARM_DEF_ENVELOPE, B_ARM_RECALCDATA, "Envelopes",	lx+buttonWidth/2,cy,(buttonWidth + 1)/2,20, &amd->deformflag, 0, 0, 0, 0, "Enable Bone Envelopes defining deform");
 			uiDefButBitS(block, TOG, ARM_DEF_QUATERNION, B_ARM_RECALCDATA, "Quaternion",	lx,(cy-=19),buttonWidth/2,20, &amd->deformflag, 0, 0, 0, 0, "Enable deform rotation interpolation with Quaternions");
 			uiDefButBitS(block, TOG, ARM_DEF_B_BONE_REST, B_ARM_RECALCDATA, "B-Bone Rest", lx+buttonWidth/2,cy,(buttonWidth + 1)/2,20, &amd->deformflag, 0, 0, 0, 0, "Make B-Bones deform already in rest position");
+			
+			uiDefButS(block, TOG, B_ARM_RECALCDATA, "MultiModifier",	lx,cy-=19, buttonWidth, 20, &amd->multi, 0, 0, 0, 0, "Use same input as previous modifier, and mix results using overall vgroup");
+
 		} else if (md->type==eModifierType_Hook) {
 			HookModifierData *hmd = (HookModifierData*) md;
 			uiDefButF(block, NUM, B_MODIFIER_RECALC, "Falloff: ",		lx, (cy-=19), buttonWidth,19, &hmd->falloff, 0.0, 100.0, 100, 0, "If not zero, the distance from hook where influence ends");





More information about the Bf-blender-cvs mailing list