Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-09-05 09:28:32 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-09-05 09:28:32 +0400
commite5209c205974b03f1090bf73414a82072a6a0d5b (patch)
tree7fcb8b45cd1f58f33464cbd50326f6bf88dd9e29 /source/blender/modifiers/intern/MOD_weightvgedit.c
parent2c740a9b5e07faec543d30c85f16f6bbe6fa0c77 (diff)
- vertex group modifiers isDisabled functions were incorrect, need to check if the string is set: == NULL will never be true.
- was doing NULL checks on freeing memory in cases where the values were already accessed (blender would have crashed anyway), so remove the NULL checks. - use deform.c api weight functions to replace inline weight lookups in some cases. - change if checks in weightvg_do_mask() so its more obvious whats going on.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_weightvgedit.c')
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgedit.c35
1 files changed, 15 insertions, 20 deletions
diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c
index 55f8716e0b0..87747f255fd 100644
--- a/source/blender/modifiers/intern/MOD_weightvgedit.c
+++ b/source/blender/modifiers/intern/MOD_weightvgedit.c
@@ -173,7 +173,7 @@ static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
/* If no vertex group, bypass. */
- return (wmd->defgrp_name == NULL);
+ return (wmd->defgrp_name[0] == '\0');
}
static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
@@ -185,17 +185,16 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
Mesh *ob_m = NULL;
#endif
MDeformVert *dvert = NULL;
- float *org_w = NULL; /* Array original weights. */
- float *new_w = NULL; /* Array new weights. */
+ float *org_w; /* Array original weights. */
+ float *new_w; /* Array new weights. */
int numVerts;
int defgrp_idx;
int i;
char rel_ret = 0; /* Boolean, whether we have to release ret dm or not, when not using it! */
- float *mapf = NULL; /* Cache for mapping factors. */
/* Flags. */
- char do_map = wmd->edit_flags & MOD_WVG_EDIT_CMAP;
- char do_add = wmd->edit_flags & MOD_WVG_EDIT_ADD2VG;
- char do_rem = wmd->edit_flags & MOD_WVG_EDIT_REMFVG;
+ int do_map = (wmd->edit_flags & MOD_WVG_EDIT_CMAP) != 0;
+ int do_add = (wmd->edit_flags & MOD_WVG_EDIT_ADD2VG) != 0;
+ int do_rem = (wmd->edit_flags & MOD_WVG_EDIT_REMFVG) != 0;
/* Get number of verts. */
numVerts = dm->getNumVerts(dm);
@@ -259,17 +258,17 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
org_w = MEM_mallocN(sizeof(float) * numVerts, "WeightVGEdit Modifier, org_w");
new_w = MEM_mallocN(sizeof(float) * numVerts, "WeightVGEdit Modifier, org_w");
for (i = 0; i < numVerts; i++) {
- int j;
+ MDeformWeight *dw= defvert_find_index(&dvert[i], defgrp_idx);
org_w[i] = new_w[i] = wmd->default_weight;
- for (j = 0; j < dvert[i].totweight; j++) {
- if(dvert[i].dw[j].def_nr == defgrp_idx) {
- org_w[i] = new_w[i] = dvert[i].dw[j].weight;
- break;
- }
+
+ if(dw) {
+ org_w[i] = new_w[i] = dw->weight;
}
+
/* Do mapping. */
- if (do_map)
+ if (do_map) {
new_w[i] = curvemapping_evaluateF(wmd->cmap_curve, 0, new_w[i]);
+ }
}
/* Do masking. */
@@ -282,12 +281,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
do_rem, wmd->rem_threshold);
/* Freeing stuff. */
- if (org_w)
- MEM_freeN(org_w);
- if (new_w)
- MEM_freeN(new_w);
- if (mapf)
- MEM_freeN(mapf);
+ MEM_freeN(org_w);
+ MEM_freeN(new_w);
/* Return the vgroup-modified mesh. */
return ret;