diff options
author | Ton Roosendaal <ton@blender.org> | 2006-08-29 14:27:48 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-08-29 14:27:48 +0400 |
commit | 7bec4dba419b9aa63cf999e9ff08cf240f8c4d7f (patch) | |
tree | dfd7b4ee56dec542087a75c4431feb8b81a2a2b8 /source/blender/src/editdeform.c | |
parent | d0cabce8898a542354046ca18b6e3cd9ab3cb24e (diff) |
Recoded version of patch #4273, submitted by Daniel Genrich
This provides a weight-paint option that only paints on vertices that have
already the weight-group assigned before. The default adds weights on all
vertices painted on.
Fixes in patch include:
- much less code
- also support for 'filter' mode
- proper code styling
Diffstat (limited to 'source/blender/src/editdeform.c')
-rw-r--r-- | source/blender/src/editdeform.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/source/blender/src/editdeform.c b/source/blender/src/editdeform.c index dbfbbfde0c8..22fd58c8059 100644 --- a/source/blender/src/editdeform.c +++ b/source/blender/src/editdeform.c @@ -102,22 +102,36 @@ void sel_verts_defgroup (int select) else EM_deselect_flush(); } +/* check if deform vertex has defgroup index */ +MDeformWeight *get_defweight (MDeformVert *dv, int defgroup) +{ + int i; + + if (!dv || defgroup<0) + return NULL; + + for (i=0; i<dv->totweight; i++){ + if (dv->dw[i].def_nr == defgroup) + return dv->dw+i; + } + return NULL; +} + /* Ensures that mv has a deform weight entry for the specified defweight group */ /* Note this function is mirrored in editmesh_tools.c, for use for editvertices */ MDeformWeight *verify_defweight (MDeformVert *dv, int defgroup) { MDeformWeight *newdw; - int i; + /* do this check always, this function is used to check for it */ if (!dv || defgroup<0) return NULL; - - for (i=0; i<dv->totweight; i++){ - if (dv->dw[i].def_nr == defgroup) - return dv->dw+i; - } - + + newdw = get_defweight (dv, defgroup); + if (newdw) + return newdw; + newdw = MEM_callocN (sizeof(MDeformWeight)*(dv->totweight+1), "deformWeight"); if (dv->dw){ memcpy (newdw, dv->dw, sizeof(MDeformWeight)*dv->totweight); |