forked from bartvdbraak/blender
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:
parent
e48af6f10b
commit
534ee9e190
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user