minor cleanup for weightpaint fill

- SCE_SELECT_FACE and SCE_SELECT_VERTEX are mutually exclusive, use a macro to get a single value from them.
- was allocating an array for no reason.
This commit is contained in:
Campbell Barton 2011-11-02 00:51:21 +00:00
parent b60f60453b
commit 43e297c0c0
2 changed files with 50 additions and 64 deletions

@ -387,37 +387,16 @@ void vpaint_fill(Object *ob, unsigned int paintcol)
/* fills in the selected faces with the current weight and vertex group */
void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
{
Mesh *me;
MDeformWeight *dw, *uw;
int *indexar;
unsigned int index;
int vgroup, vgroup_mirror= -1;
int selected;
int use_vert_sel;
me= ob->data;
if(me==NULL || me->totface==0 || me->dvert==NULL || !me->mface) return;
selected= (me->editflag & ME_EDIT_PAINT_MASK);
use_vert_sel= (me->editflag & ME_EDIT_VERT_SEL) != 0;
indexar= get_indexarray(me);
if(selected) {
Mesh *me= ob->data;
MFace *mf;
for(index=0, mf= me->mface; index<me->totface; index++, mf++) {
if((mf->flag & ME_FACE_SEL)==0)
indexar[index]= 0;
else
indexar[index]= index+1;
}
}
else {
for(index=0; index<me->totface; index++)
indexar[index]= index+1;
}
MDeformWeight *dw, *uw;
int vgroup, vgroup_mirror= -1;
unsigned int index;
/* mutually exclusive, could be made into a */
const short paint_selmode= ME_EDIT_PAINT_SEL_MODE(me);
if(me->totface==0 || me->dvert==NULL || !me->mface) return;
vgroup= ob->actdef-1;
@ -428,16 +407,18 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
copy_wpaint_prev(wp, me->dvert, me->totvert);
for(index=0; index<me->totface; index++) {
if(indexar[index] && indexar[index]<=me->totface) {
MFace *mf= &me->mface[indexar[index]-1];
for(index=0, mf= me->mface; index < me->totface; index++, mf++) {
unsigned int fidx= mf->v4 ? 3:2;
if ((paint_selmode == SCE_SELECT_FACE) && !(mf->flag & ME_FACE_SEL)) {
continue;
}
do {
unsigned int vidx= *(&mf->v1 + fidx);
if(!me->dvert[vidx].flag) {
if(use_vert_sel && !(me->mvert[vidx].flag & SELECT)) {
if((paint_selmode == SCE_SELECT_VERTEX) && !(me->mvert[vidx].flag & SELECT)) {
continue;
}
@ -466,10 +447,8 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
me->dvert[vidx].flag= 1;
}
} while (fidx--);
}
}
{
MDeformVert *dv= me->dvert;
@ -478,7 +457,6 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
}
}
MEM_freeN(indexar);
copy_wpaint_prev(wp, NULL, 0);
DAG_id_tag_update(&me->id, 0);

@ -125,6 +125,14 @@ typedef struct TFace {
#define ME_EDIT_MIRROR_TOPO (1 << 4)
#define ME_EDIT_VERT_SEL (1 << 5)
/* we cant have both flags enabled at once,
* flags defined in DNA_scene_types.h */
#define ME_EDIT_PAINT_SEL_MODE(_me) ( \
(_me->editflag & ME_EDIT_PAINT_MASK) ? SCE_SELECT_FACE : \
(_me->editflag & ME_EDIT_VERT_SEL) ? SCE_SELECT_VERTEX : \
0 \
)
/* me->flag */
/* #define ME_ISDONE 1 */
#define ME_DEPRECATED 2