diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-09-05 09:28:32 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-09-05 09:28:32 +0400 |
commit | e5209c205974b03f1090bf73414a82072a6a0d5b (patch) | |
tree | 7fcb8b45cd1f58f33464cbd50326f6bf88dd9e29 /source/blender/modifiers/intern/MOD_weightvgedit.c | |
parent | 2c740a9b5e07faec543d30c85f16f6bbe6fa0c77 (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.c | 35 |
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; |