forked from bartvdbraak/blender
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:
parent
b60f60453b
commit
43e297c0c0
@ -387,37 +387,16 @@ void vpaint_fill(Object *ob, unsigned int paintcol)
|
|||||||
/* fills in the selected faces with the current weight and vertex group */
|
/* fills in the selected faces with the current weight and vertex group */
|
||||||
void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
|
void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
|
||||||
{
|
{
|
||||||
Mesh *me;
|
Mesh *me= ob->data;
|
||||||
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) {
|
|
||||||
MFace *mf;
|
MFace *mf;
|
||||||
for(index=0, mf= me->mface; index<me->totface; index++, mf++) {
|
MDeformWeight *dw, *uw;
|
||||||
if((mf->flag & ME_FACE_SEL)==0)
|
int vgroup, vgroup_mirror= -1;
|
||||||
indexar[index]= 0;
|
unsigned int index;
|
||||||
else
|
|
||||||
indexar[index]= index+1;
|
/* mutually exclusive, could be made into a */
|
||||||
}
|
const short paint_selmode= ME_EDIT_PAINT_SEL_MODE(me);
|
||||||
}
|
|
||||||
else {
|
if(me->totface==0 || me->dvert==NULL || !me->mface) return;
|
||||||
for(index=0; index<me->totface; index++)
|
|
||||||
indexar[index]= index+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
vgroup= ob->actdef-1;
|
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);
|
copy_wpaint_prev(wp, me->dvert, me->totvert);
|
||||||
|
|
||||||
for(index=0; index<me->totface; index++) {
|
for(index=0, mf= me->mface; index < me->totface; index++, mf++) {
|
||||||
if(indexar[index] && indexar[index]<=me->totface) {
|
|
||||||
MFace *mf= &me->mface[indexar[index]-1];
|
|
||||||
unsigned int fidx= mf->v4 ? 3:2;
|
unsigned int fidx= mf->v4 ? 3:2;
|
||||||
|
|
||||||
|
if ((paint_selmode == SCE_SELECT_FACE) && !(mf->flag & ME_FACE_SEL)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
unsigned int vidx= *(&mf->v1 + fidx);
|
unsigned int vidx= *(&mf->v1 + fidx);
|
||||||
|
|
||||||
if(!me->dvert[vidx].flag) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,10 +447,8 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
|
|||||||
me->dvert[vidx].flag= 1;
|
me->dvert[vidx].flag= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} while (fidx--);
|
} while (fidx--);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
MDeformVert *dv= me->dvert;
|
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);
|
copy_wpaint_prev(wp, NULL, 0);
|
||||||
|
|
||||||
DAG_id_tag_update(&me->id, 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_MIRROR_TOPO (1 << 4)
|
||||||
#define ME_EDIT_VERT_SEL (1 << 5)
|
#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 */
|
/* me->flag */
|
||||||
/* #define ME_ISDONE 1 */
|
/* #define ME_ISDONE 1 */
|
||||||
#define ME_DEPRECATED 2
|
#define ME_DEPRECATED 2
|
||||||
|
Loading…
Reference in New Issue
Block a user