Made vertex clear work for selected faces from the menu, to be the same as Shift+K.

Also makde Shift+K work in weightpaint mode.
This commit is contained in:
Campbell Barton 2006-02-27 12:34:53 +00:00
parent e48af6f10b
commit 534ee9e190
4 changed files with 108 additions and 8 deletions

@ -51,6 +51,7 @@ void vertex_paint(void);
void set_vpaint(void);
void set_wpaint(void);
void clear_wpaint_selectedfaces(void);
void weight_paint(void);
void wpaint_undo (void);
void copy_wpaint_undo (struct MDeformVert *dverts, int dcount);

@ -3537,8 +3537,14 @@ static void do_view3d_paintmenu(void *arg, int event)
case 1: /* undo weight painting */
wpaint_undo();
break;
case 2: /* clear vertex colors */
clear_vpaint();
case 2: /* set vertex colors/weight */
if(G.f & G_FACESELECT)
clear_vpaint_selectedfaces();
else /* we know were in vertex paint mode */
clear_vpaint();
break;
case 3: /* set vertex colors/weight */
clear_wpaint_selectedfaces();
break;
}
allqueue(REDRAWVIEW3D, 0);
@ -3558,10 +3564,12 @@ static uiBlock *view3d_paintmenu(void *arg_unused)
if (G.f & G_VERTEXPAINT) {
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
} else if (G.f & G_WEIGHTPAINT && G.f & G_FACESELECT) {
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Weight|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
}
if(curarea->headertype==HEADERTOP) {
uiBlockSetDirection(block, UI_DOWN);
}
@ -3766,7 +3774,7 @@ static void do_view3d_faceselmenu(void *arg, int event)
do_shared_vertexcol(me);
}
break;
case 3: /* clear vertex colors */
case 3: /* set vertex colors */
clear_vpaint_selectedfaces();
break;
case 8: /* uv calculation */
@ -3810,7 +3818,7 @@ static uiBlock *view3d_faceselmenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy UVs & Textures", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Vertex Colors", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");

@ -1467,7 +1467,10 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else {
if((G.qual==LR_SHIFTKEY)) {
if(G.f & G_FACESELECT)
clear_vpaint_selectedfaces();
if (G.f & G_WEIGHTPAINT)
clear_wpaint_selectedfaces();
else
clear_vpaint_selectedfaces();
else if(G.f & G_VERTEXPAINT)
clear_vpaint();
else

@ -360,6 +360,94 @@ void clear_vpaint_selectedfaces()
allqueue(REDRAWVIEW3D, 0);
}
void clear_wpaint_selectedfaces()
{
extern float editbutvweight;
float paintweight= editbutvweight;
Mesh *me;
TFace *tface;
MFace *mface;
Object *ob;
int index, vgroup;
MDeformWeight *dw, *uw;
ob= OBACT;
me= ob->data;
if(me==0 || me->totface==0 || me->dvert==0 || !me->tface) return;
if(indexar==NULL) init_vertexpaint();
for(index=0, tface=me->tface; index<me->totface; index++) {
if((tface->flag & TF_SELECT)==0) {
indexar[index]= 0;
} else {
indexar[index]= index+1;
}
tface++;
}
copy_wpaint_undo(me->dvert, me->totvert);
vgroup= ob->actdef-1;
for(index=0; index<me->totface; index++) {
if(indexar[index] && indexar[index]<=me->totface) {
mface= me->mface + (indexar[index]-1);
if(!((me->dvert+mface->v1)->flag)) {
dw= verify_defweight(me->dvert+mface->v1, vgroup);
if(dw) {
uw= verify_defweight(wpaintundobuf+mface->v1, vgroup);
uw->weight= dw->weight;
dw->weight= paintweight;
}
(me->dvert+mface->v1)->flag= 1;
}
if(!((me->dvert+mface->v2)->flag)) {
dw= verify_defweight(me->dvert+mface->v2, vgroup);
if(dw) {
uw= verify_defweight(wpaintundobuf+mface->v2, vgroup);
uw->weight= dw->weight;
dw->weight= paintweight;
}
(me->dvert+mface->v2)->flag= 1;
}
if(!((me->dvert+mface->v3)->flag)) {
dw= verify_defweight(me->dvert+mface->v3, vgroup);
if(dw) {
uw= verify_defweight(wpaintundobuf+mface->v3, vgroup);
uw->weight= dw->weight;
dw->weight= paintweight;
}
(me->dvert+mface->v3)->flag= 1;
}
if(mface->v4) {
if(!((me->dvert+mface->v4)->flag)) {
dw= verify_defweight(me->dvert+mface->v4, vgroup);
if(dw) {
uw= verify_defweight(wpaintundobuf+mface->v4, vgroup);
uw->weight= dw->weight;
dw->weight= paintweight;
}
}
(me->dvert+mface->v4)->flag= 1;
}
}
}
index=0;
while (index<me->totvert) {
(me->dvert+index)->flag= 0;
index++;
}
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
BIF_undo_push("Set vertex weight");
allqueue(REDRAWVIEW3D, 0);
}
void vpaint_dogamma()
{
Mesh *me;