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:
2006-02-27 12:34:53 +00:00
parent e48af6f10b
commit 534ee9e190
4 changed files with 108 additions and 8 deletions

View File

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

View File

@@ -3537,8 +3537,14 @@ static void do_view3d_paintmenu(void *arg, int event)
case 1: /* undo weight painting */ case 1: /* undo weight painting */
wpaint_undo(); wpaint_undo();
break; break;
case 2: /* clear vertex colors */ case 2: /* set vertex colors/weight */
clear_vpaint(); 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; break;
} }
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
@@ -3558,10 +3564,12 @@ static uiBlock *view3d_paintmenu(void *arg_unused)
if (G.f & G_VERTEXPAINT) { if (G.f & G_VERTEXPAINT) {
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Vertex Colors|Shift K", 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, 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) { if(curarea->headertype==HEADERTOP) {
uiBlockSetDirection(block, UI_DOWN); uiBlockSetDirection(block, UI_DOWN);
} }
@@ -3766,7 +3774,7 @@ static void do_view3d_faceselmenu(void *arg, int event)
do_shared_vertexcol(me); do_shared_vertexcol(me);
} }
break; break;
case 3: /* clear vertex colors */ case 3: /* set vertex colors */
clear_vpaint_selectedfaces(); clear_vpaint_selectedfaces();
break; break;
case 8: /* uv calculation */ 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 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, "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, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");

View File

@@ -1467,7 +1467,10 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else { else {
if((G.qual==LR_SHIFTKEY)) { if((G.qual==LR_SHIFTKEY)) {
if(G.f & G_FACESELECT) 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) else if(G.f & G_VERTEXPAINT)
clear_vpaint(); clear_vpaint();
else else

View File

@@ -360,6 +360,94 @@ void clear_vpaint_selectedfaces()
allqueue(REDRAWVIEW3D, 0); 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() void vpaint_dogamma()
{ {
Mesh *me; Mesh *me;