diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-09-19 09:06:21 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-09-19 09:06:21 +0400 |
commit | e197b993d389d38b1ee6cbbdabe3ef2846f4aab6 (patch) | |
tree | 67faa24a7d55fc36ad1652280b8188ed17e3e8de /source/blender/editors | |
parent | 8835a18e2e8521f88a809b78101efc109bd92848 (diff) |
remove duplicate variable - wpaint_make_validmap(ob) was being called twice for no good reason.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_vertex.c | 75 |
1 files changed, 31 insertions, 44 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 854febc0246..6cda5e07118 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -1147,7 +1147,7 @@ static void do_weight_paint_auto_normalize_all_groups(MDeformVert *dvert, char * /* See if the current deform vertex has a locked group */ -static char has_locked_group(MDeformVert *dvert, char *lock_flags) +static char has_locked_group(MDeformVert *dvert, const char *lock_flags) { int i; for(i = 0; i < dvert->totweight; i++) { @@ -1193,13 +1193,13 @@ static int has_locked_group_selected(int defbase_tot, char *defbase_sel, char *l #if 0 /* UNUSED */ -static int has_unselected_unlocked_bone_group(int defbase_tot, char *defbase_sel, int selected, char *lock_flags, char *bone_groups) { +static int has_unselected_unlocked_bone_group(int defbase_tot, char *defbase_sel, int selected, char *lock_flags, char *vgroup_validmap) { int i; if(defbase_tot == selected) { return FALSE; } for(i = 0; i < defbase_tot; i++) { - if(bone_groups[i] && !defbase_sel[i] && !lock_flags[i]) { + if(vgroup_validmap[i] && !defbase_sel[i] && !lock_flags[i]) { return TRUE; } } @@ -1242,7 +1242,7 @@ static void multipaint_selection(MDeformVert *dvert, float change, char *defbase // move all change onto valid, unchanged groups. If there is change left over, then return it. // assumes there are valid groups to shift weight onto -static float redistribute_change(MDeformVert *ndv, char *change_status, int changeme, int changeto, char *validmap, float totchange, float total_valid) { +static float redistribute_change(MDeformVert *ndv, char *change_status, int changeme, int changeto, const char *vgroup_validmap, float totchange, float total_valid) { float was_change; float change; float oldval; @@ -1259,7 +1259,7 @@ static float redistribute_change(MDeformVert *ndv, char *change_status, int chan if(change_status[ndw->def_nr] == changeme) { oldval = ndw->weight; // if auto normalize is active, don't worry about upper bounds - if(!validmap && ndw->weight + change > 1) { + if(!vgroup_validmap && ndw->weight + change > 1) { totchange -= 1-ndw->weight; ndw->weight = 1; // stop the changes to this group @@ -1289,7 +1289,9 @@ static float redistribute_change(MDeformVert *ndv, char *change_status, int chan // observe the changes made to the weights of groups. // make sure all locked groups on the vertex have the same deformation // by moving the changes made to groups onto other unlocked groups -static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, char *lock_flags, char *bone_groups, char *validmap) { +static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, + const char *lock_flags, const char *vgroup_validmap) +{ float totchange = 0.0f; float totchange_allowed = 0.0f; float left_over; @@ -1318,7 +1320,7 @@ static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, c odw = defvert_find_index(odv, i); // the weights are zero, so we can assume a lot if(!ndw || !odw) { - if (!lock_flags[i] && bone_groups[i]){ + if (!lock_flags[i] && vgroup_validmap[i]){ defvert_verify_index(odv, i); defvert_verify_index(ndv, i); total_valid++; @@ -1341,7 +1343,7 @@ static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, c designatedw = i; } } // unchanged, unlocked bone groups are handled here - else if (bone_groups[i]){ + else if (vgroup_validmap[i]){ totchange_allowed += ndw->weight; total_valid++; change_status[i] = 1; // can be altered while redistributing @@ -1350,7 +1352,7 @@ static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, c // if there was any change, redistribute it if(total_changed) { // auto normalize will allow weights to temporarily go above 1 in redistribution - if(validmap && total_changed < 0 && total_valid) { + if(vgroup_validmap && total_changed < 0 && total_valid) { totchange_allowed = total_valid; } // there needs to be change allowed, or you should not bother @@ -1376,7 +1378,7 @@ static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, c totchange_allowed = -totchange; } // move the weight evenly between the allowed groups, move excess back onto the used groups based on the change - totchange_allowed = redistribute_change(ndv, change_status, 1, -1, validmap, totchange_allowed, total_valid); + totchange_allowed = redistribute_change(ndv, change_status, 1, -1, vgroup_validmap, totchange_allowed, total_valid); left_over += totchange_allowed; if(left_over) { // more than one nonzero weights were changed with the same ratio, so keep them changed that way! @@ -1400,7 +1402,7 @@ static void enforce_locks(MDeformVert *odv, MDeformVert *ndv, int defbase_tot, c // a weight was changed to zero, only one weight was changed, or designatedw is still -1 // put weight back as evenly as possible else { - redistribute_change(ndv, change_status, 2, -2, validmap, left_over, total_changed); + redistribute_change(ndv, change_status, 2, -2, vgroup_validmap, left_over, total_changed); } } } @@ -1452,7 +1454,10 @@ static void clamp_weights(MDeformVert *dvert) { } } -/* struct to avoid passing many args each call to do_weight_paint_vertex() */ +/* struct to avoid passing many args each call to do_weight_paint_vertex() + * this _could_ be made a part of the operators 'WPaintData' struct, or at + * least a member, but for now keep its own struct, initialized on every + * paint stroke update - campbell */ typedef struct WeightPaintInfo { int defbase_tot; @@ -1468,16 +1473,8 @@ typedef struct WeightPaintInfo { char *defbase_sel; /* boolean array for selected bones, * length of defbase_tot */ - - /* TODO, both are the result of wpaint_make_validmap() buy I'm not - * convinced they must be separated like this, nevertheless there are - * possible side-effects with merging them which need to be looked into - * carefully, for now keep both since theres not too much harm in it - * but review at some point if bone_group's var can use validmap instead. - * - campbell */ - char *vgroup_validmap; - char *bone_groups; - + char *vgroup_validmap; /* same as WeightPaintData.vgroup_validmap, + * only added here for convenience */ char do_flip; char do_multipaint; @@ -1486,7 +1483,7 @@ typedef struct WeightPaintInfo { /* fresh start to make multi-paint and locking modular */ /* returns TRUE if it thinks you need to reset the weights due to * normalizing while multi-painting */ -static int apply_mp_locks_normalize(Mesh *me, WeightPaintInfo *wpi, +static int apply_mp_locks_normalize(Mesh *me, const WeightPaintInfo *wpi, const int index, MDeformWeight *dw, MDeformWeight *tdw, float change, float oldChange, @@ -1512,7 +1509,7 @@ static int apply_mp_locks_normalize(Mesh *me, WeightPaintInfo *wpi, } clamp_weights(dv); - enforce_locks(&dv_test, dv, wpi->defbase_tot, wpi->lock_flags, wpi->vgroup_validmap, wpi->vgroup_validmap); + enforce_locks(&dv_test, dv, wpi->defbase_tot, wpi->lock_flags, wpi->vgroup_validmap); do_weight_paint_auto_normalize_all_groups(dv, wpi->vgroup_validmap); @@ -1554,9 +1551,8 @@ static int get_first_selected_nonzero_weight(MDeformVert *dvert, char *defbase_s static char *wpaint_make_validmap(Object *ob); -// int flip, int vgroup_mirror, char *validmap, int multipaint static void do_weight_paint_vertex( /* vars which remain the same for every vert */ - VPaint *wp, Object *ob, WeightPaintInfo *wpi, + VPaint *wp, Object *ob, const WeightPaintInfo *wpi, /* vars which change on each stroke */ int index, float alpha, float paintweight ) @@ -1609,11 +1605,6 @@ static void do_weight_paint_vertex( /* vars which remain the same for every vert MDeformWeight *tdw = NULL, *tuw; MDeformVert dv= {NULL}; - /* Need to know which groups are bone groups */ - if(wpi->bone_groups == NULL) { - wpi->bone_groups= wpi->vgroup_validmap ? wpi->vgroup_validmap : wpaint_make_validmap(ob); - } - oldw = dw->weight; wpaint_blend(wp, dw, uw, alpha, paintweight, wpi->do_flip, wpi->do_multipaint && wpi->defbase_tot_sel >1); neww = dw->weight; @@ -1644,12 +1635,12 @@ static void do_weight_paint_vertex( /* vars which remain the same for every vert testw = tuw->weight*change; if( testw > tuw->weight ) { if(change > oldChange) { - // reset the weights and use the new change + /* reset the weights and use the new change */ reset_to_prev(wp->wpaint_prev+index, me->dvert+index); } else { - // the old change was more significant, - // so set the change to 0 so that it will not do another multi-paint + /* the old change was more significant, so set + * the change to 0 so that it will not do another multi-paint */ change = 0; } } @@ -1792,7 +1783,7 @@ static char *wpaint_make_validmap(Object *ob) { bDeformGroup *dg; ModifierData *md; - char *validmap; + char *vgroup_validmap; GHash *gh = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "wpaint_make_validmap gh"); int i = 0, step1=1; @@ -1804,7 +1795,7 @@ static char *wpaint_make_validmap(Object *ob) if (!i) return NULL; - validmap = MEM_callocN(i, "wpaint valid map"); + vgroup_validmap= MEM_callocN(i, "wpaint valid map"); /*now loop through the armature modifiers and identify deform bones*/ for (md = ob->modifiers.first; md; md= !md->next && step1 ? (step1=0), modifiers_getVirtualModifierList(ob) : md->next) { @@ -1835,13 +1826,13 @@ static char *wpaint_make_validmap(Object *ob) /*add all names to a hash table*/ for (dg=ob->defbase.first, i=0; dg; dg=dg->next, i++) { if (BLI_ghash_lookup(gh, dg->name) != NULL) { - validmap[i] = 1; + vgroup_validmap[i] = TRUE; } } BLI_ghash_free(gh, NULL, NULL); - return validmap; + return vgroup_validmap; } static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) @@ -1875,7 +1866,7 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *UNUSED /*set up auto-normalize, and generate map for detecting which vgroups affect deform bones*/ wpd->auto_normalize = ts->auto_normalize; - if (wpd->auto_normalize) + if (wpd->auto_normalize || ts->multipaint) wpd->vgroup_validmap = wpaint_make_validmap(ob); // if(qual & LR_CTRLKEY) { @@ -1983,8 +1974,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P wpi.defbase_tot_unsel= wpi.defbase_tot - wpi.defbase_tot_sel; wpi.vgroup_mirror= wpd->vgroup_mirror; wpi.lock_flags= gen_lock_flags(ob, wpi.defbase_tot); - wpi.vgroup_validmap= wpd->vgroup_validmap; - wpi.bone_groups= NULL; /* initialized on the fly */ + wpi.vgroup_validmap= wpd->vgroup_validmap; wpi.do_flip= RNA_boolean_get(itemptr, "pen_flip"); wpi.do_multipaint= (ts->multipaint != 0); /* *** done setting up WeightPaintInfo *** */ @@ -2106,9 +2096,6 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P if(wpi.lock_flags) { MEM_freeN(wpi.lock_flags); } - if(wpi.bone_groups && (wpi.bone_groups != wpi.vgroup_validmap)) { - MEM_freeN(wpi.bone_groups); - } MEM_freeN(wpi.defbase_sel); /* *** dont freeing wpi members */ |