[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