Changes to "Face Select" mode

* Does not indicate that UV's exist, nor does it add UV's when used.
* Only accessible for texturepaint, vertexpaint and weightpaint from a button in the header (Paint Selection Mask)
* Not accessible from the mode menu, this is only an option that applies to paint modes.

This dosnt effect DNA, face select (G_FACESELECT) can be enabled at any time but is only used when paint modes are enabled.

Other changes
* UKey is uv unwrap in editmode, Ukey for undo was editmode only anyway.
* UVCalc in editmode adds a UV Layer if there is not one alredy.
* texture draw in editmode does not draw the face dots (they are get in the way of texturing)
* some missing updates were added.
* removed manipulator from when paint modes are enabled since the manipulator is not drawn in the 3d view.
This commit is contained in:
Campbell Barton 2007-09-10 19:32:44 +00:00
parent 1f0b07c37b
commit 0bd32f3ac6
29 changed files with 152 additions and 182 deletions

@ -176,6 +176,7 @@ typedef struct Global {
#define G_DRAWSEAMS (1 << 20) #define G_DRAWSEAMS (1 << 20)
#define G_HIDDENEDGES (1 << 21) #define G_HIDDENEDGES (1 << 21)
/* Measurement info Drawing */ /* Measurement info Drawing */
#define G_DRAW_EDGELEN (1 << 22) #define G_DRAW_EDGELEN (1 << 22)
#define G_DRAW_FACEAREA (1 << 23) #define G_DRAW_FACEAREA (1 << 23)
@ -193,6 +194,11 @@ typedef struct Global {
#define G_AUTOMATKEYS (1 << 30) #define G_AUTOMATKEYS (1 << 30)
/* macro for testing face select mode
* Texture paint could be removed since selected faces are not used
* however hiding faces is useful */
#define FACESEL_PAINT_TEST ((G.f&G_FACESELECT) && (G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT)))
/* G.fileflags */ /* G.fileflags */
#define G_AUTOPACK (1 << 0) #define G_AUTOPACK (1 << 0)

@ -1782,7 +1782,7 @@ CustomDataMask get_viewedit_datamask()
ScrArea *sa; ScrArea *sa;
/* check if we need tfaces & mcols due to face select or texture paint */ /* check if we need tfaces & mcols due to face select or texture paint */
if(G.f & G_FACESELECT || G.f & G_TEXTUREPAINT) { if(FACESEL_PAINT_TEST || G.f & G_TEXTUREPAINT) {
mask |= CD_MASK_MTFACE | CD_MASK_MCOL; mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
} else { } else {
/* check if we need tfaces & mcols due to view mode */ /* check if we need tfaces & mcols due to view mode */
@ -2325,7 +2325,7 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
if(ob!=G.obedit) { if(ob!=G.obedit) {
Object *obact = G.scene->basact?G.scene->basact->object:NULL; Object *obact = G.scene->basact?G.scene->basact->object:NULL;
int editing = (G.f & (G_FACESELECT|G_WEIGHTPAINT|G_VERTEXPAINT|G_TEXTUREPAINT)); int editing = (FACESEL_PAINT_TEST);
int needMapping = editing && (ob==obact); int needMapping = editing && (ob==obact);
if( (G.f & G_WEIGHTPAINT) && ob==obact ) { if( (G.f & G_WEIGHTPAINT) && ob==obact ) {

@ -53,7 +53,6 @@ int minmax_tface(float *min, float *max);
void face_select(void); void face_select(void);
void face_borderselect(void); void face_borderselect(void);
void uv_autocalc_tface(void); void uv_autocalc_tface(void);
void set_faceselect(void);
void set_texturepaint(void); void set_texturepaint(void);
void get_same_uv(void); void get_same_uv(void);
void seam_mark_clear_tface(short mode); void seam_mark_clear_tface(short mode);

@ -6925,7 +6925,7 @@ static PyObject *Mesh_removeLayer_internal( BPy_Mesh * self, PyObject * value, i
if(type == CD_MCOL && (G.f & G_VERTEXPAINT)) if(type == CD_MCOL && (G.f & G_VERTEXPAINT))
G.f &= ~G_VERTEXPAINT; /* get out of vertexpaint mode */ G.f &= ~G_VERTEXPAINT; /* get out of vertexpaint mode */
if(type == CD_MTFACE && (G.f & G_FACESELECT)) if(type == CD_MTFACE && (G.f & G_FACESELECT))
set_faceselect(); /* get out of faceselect mode */ G.f |= ~G_FACESELECT; /* get out of faceselect mode */
} }
} }

@ -536,7 +536,7 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
if(G.obedit->type == OB_MESH) reveal_mesh(); if(G.obedit->type == OB_MESH) reveal_mesh();
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) revealNurb(); else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) revealNurb();
} }
else if(G.f & G_FACESELECT) reveal_tface(); else if(FACESEL_PAINT_TEST) reveal_tface();
break; break;
case B_SELSWAP: case B_SELSWAP:
@ -719,8 +719,6 @@ static void delete_customdata_layer(void *data1, void *data2)
if(!CustomData_has_layer(data, type)) { if(!CustomData_has_layer(data, type)) {
if(type == CD_MCOL && (G.f & G_VERTEXPAINT)) if(type == CD_MCOL && (G.f & G_VERTEXPAINT))
G.f &= ~G_VERTEXPAINT; /* get out of vertexpaint mode */ G.f &= ~G_VERTEXPAINT; /* get out of vertexpaint mode */
/*if(type == CD_MTFACE && (G.f & G_FACESELECT))
set_faceselect();*/ /* get out of faceselect mode */
} }
/*reconstruct active layer*/ /*reconstruct active layer*/
@ -4875,7 +4873,7 @@ void do_fpaintbuts(unsigned short event)
} }
break; break;
case B_SET_VCOL: case B_SET_VCOL:
if(G.f & G_FACESELECT) if(FACESEL_PAINT_TEST)
clear_vpaint_selectedfaces(); clear_vpaint_selectedfaces();
else else
clear_vpaint(); clear_vpaint();
@ -5473,7 +5471,7 @@ void editing_panels()
uiNewPanelTabbed("Multires", "Editing"); uiNewPanelTabbed("Multires", "Editing");
editing_panel_sculpting_textures(); editing_panel_sculpting_textures();
} else { } else {
if(G.f & G_FACESELECT) { if(FACESEL_PAINT_TEST) {
editing_panel_mesh_texface(); editing_panel_mesh_texface();
editing_panel_mesh_uvautocalculation(); /* draw hidden edge option from this needs to be elsewhere */ editing_panel_mesh_uvautocalculation(); /* draw hidden edge option from this needs to be elsewhere */
} }

@ -1161,7 +1161,7 @@ void uiblock_image_panel(uiBlock *block, Image **ima_pp, ImageUser *iuser,
} }
/* exception, let's do because we only use this panel 3 times in blender... but not real good code! */ /* exception, let's do because we only use this panel 3 times in blender... but not real good code! */
if( (G.f & G_FACESELECT) && G.sima && &G.sima->iuser==iuser) if( (FACESEL_PAINT_TEST) && G.sima && &G.sima->iuser==iuser)
return; return;
/* left side default per-image options, right half the additional options */ /* left side default per-image options, right half the additional options */

@ -1205,7 +1205,7 @@ void draw_mesh_textured(Object *ob, DerivedMesh *dm, int faceselect)
if(ob==G.obedit) if(ob==G.obedit)
editing= 1; editing= 1;
else if(ob==OBACT) else if(ob==OBACT)
if(G.f & (G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT+G_WEIGHTPAINT)) if(FACESEL_PAINT_TEST)
editing= 1; editing= 1;
if(!editing) if(!editing)

@ -1632,7 +1632,7 @@ static void draw_em_fancy_verts(EditMesh *em, DerivedMesh *cageDM)
draw_dm_verts(cageDM, sel); draw_dm_verts(cageDM, sel);
} }
if(G.scene->selectmode & SCE_SELECT_FACE) { if(G.scene->selectmode & SCE_SELECT_FACE && G.vd->drawtype!=OB_TEXTURE) {
glPointSize(fsize); glPointSize(fsize);
glColor4ubv((GLubyte *)fcol); glColor4ubv((GLubyte *)fcol);
draw_dm_face_centers(cageDM, sel); draw_dm_face_centers(cageDM, sel);
@ -1974,7 +1974,7 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *cageDM, Derived
} }
} }
if((G.f & (G_FACESELECT+G_DRAWFACES))) { /* transp faces */ if((G.f & (G_DRAWFACES)) || FACESEL_PAINT_TEST) { /* transp faces */
unsigned char col1[4], col2[4]; unsigned char col1[4], col2[4];
BIF_GetThemeColor4ubv(TH_FACE, (char *)col1); BIF_GetThemeColor4ubv(TH_FACE, (char *)col1);
@ -2120,7 +2120,7 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW); glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
// Unwanted combination. // Unwanted combination.
if (ob==OBACT && (G.f&G_FACESELECT)) draw_wire = 0; if (ob==OBACT && FACESEL_PAINT_TEST) draw_wire = 0;
if(dt==OB_BOUNDBOX) { if(dt==OB_BOUNDBOX) {
draw_bounding_volume(ob); draw_bounding_volume(ob);
@ -2133,10 +2133,10 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
else if(dt==OB_WIRE || totface==0) { else if(dt==OB_WIRE || totface==0) {
draw_wire = 1; draw_wire = 1;
} }
else if( (ob==OBACT && (G.f & (G_FACESELECT|G_TEXTUREPAINT))) || (G.vd->drawtype==OB_TEXTURE && dt>OB_SOLID)) { else if( (ob==OBACT && (G.f & G_TEXTUREPAINT || FACESEL_PAINT_TEST)) || (G.vd->drawtype==OB_TEXTURE && dt>OB_SOLID)) {
int faceselect= (ob==OBACT && (G.f & G_FACESELECT)); int faceselect= (ob==OBACT && FACESEL_PAINT_TEST);
if ((G.vd->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !(G.f&(G_FACESELECT|G_PICKSEL)) && !draw_wire) { if ((G.vd->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !(G.f&G_PICKSEL || FACESEL_PAINT_TEST) && !draw_wire) {
draw_mesh_object_outline(ob, dm); draw_mesh_object_outline(ob, dm);
} }
@ -3881,7 +3881,7 @@ void draw_object(Base *base, int flag)
dtx= 0; dtx= 0;
/* faceselect exception: also draw solid when dt==wire, except in editmode */ /* faceselect exception: also draw solid when dt==wire, except in editmode */
if(ob==OBACT && (G.f & (G_FACESELECT+G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT))) { if(ob==OBACT && (G.f & (G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT))) {
if(ob->type==OB_MESH) { if(ob->type==OB_MESH) {
if(ob==G.obedit); if(ob==G.obedit);
@ -4142,7 +4142,7 @@ void draw_object(Base *base, int flag)
if(G.f & G_SIMULATION) return; if(G.f & G_SIMULATION) return;
/* object centers, need to be drawn in viewmat space for speed, but OK for picking select */ /* object centers, need to be drawn in viewmat space for speed, but OK for picking select */
if(ob!=OBACT || (G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT))==0) { if(ob!=OBACT || (G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT))==0) {
int do_draw_center= -1; /* defines below are zero or positive... */ int do_draw_center= -1; /* defines below are zero or positive... */
if((G.scene->basact)==base) if((G.scene->basact)==base)
@ -4327,7 +4327,7 @@ static int bbs_mesh_solid_EM(DerivedMesh *dm, int facecol)
if (facecol) { if (facecol) {
dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(long) 1, 0); dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(long) 1, 0);
if(G.scene->selectmode & SCE_SELECT_FACE) { if(G.scene->selectmode & SCE_SELECT_FACE && G.vd->drawtype!=OB_TEXTURE) {
glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE)); glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE));
bglBegin(GL_POINTS); bglBegin(GL_POINTS);
@ -4367,6 +4367,7 @@ static int bbs_mesh_wire__setDrawOpts(void *userData, int index)
return 0; return 0;
} }
/* TODO remove this - since face select mode now only works with painting */
static void bbs_mesh_solid(Object *ob) static void bbs_mesh_solid(Object *ob)
{ {
DerivedMesh *dm = mesh_get_derived_final(ob, get_viewedit_datamask()); DerivedMesh *dm = mesh_get_derived_final(ob, get_viewedit_datamask());

@ -74,8 +74,6 @@ void set_scene(Scene *sce) /* also see scene.c: set_scene_bg() */
if( G.obedit) if( G.obedit)
exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
if(G.f & G_FACESELECT)
set_faceselect();
if(G.f & G_VERTEXPAINT) if(G.f & G_VERTEXPAINT)
set_vpaint(); set_vpaint();
if(G.f & G_TEXTUREPAINT) if(G.f & G_TEXTUREPAINT)

@ -1077,7 +1077,7 @@ void backdrawview3d(int test)
int m; int m;
#endif #endif
if(G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT)); if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT || G.f & G_TEXTUREPAINT);
else if(G.obedit && G.vd->drawtype>OB_WIRE && (G.vd->flag & V3D_ZBUF_SELECT)); else if(G.obedit && G.vd->drawtype>OB_WIRE && (G.vd->flag & V3D_ZBUF_SELECT));
else { else {
G.vd->flag &= ~V3D_NEEDBACKBUFDRAW; G.vd->flag &= ~V3D_NEEDBACKBUFDRAW;
@ -2238,7 +2238,7 @@ static void view3d_panel_object(short cntrl) // VIEW3D_HANDLER_OBJECT
uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE); uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
if(G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT)) { if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT)) {
uiBlockSetFlag(block, UI_BLOCK_FRONTBUFFER); // force old style frontbuffer draw uiBlockSetFlag(block, UI_BLOCK_FRONTBUFFER); // force old style frontbuffer draw
} }
else { else {
@ -2383,7 +2383,7 @@ static void view3d_panel_background(short cntrl) // VIEW3D_HANDLER_BACKGROUND
uiSetPanelHandler(VIEW3D_HANDLER_BACKGROUND); // for close and esc uiSetPanelHandler(VIEW3D_HANDLER_BACKGROUND); // for close and esc
if(uiNewPanel(curarea, block, "Background Image", "View3d", 340, 10, 318, 204)==0) return; if(uiNewPanel(curarea, block, "Background Image", "View3d", 340, 10, 318, 204)==0) return;
if(G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT)) { if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT || G.f & G_TEXTUREPAINT) {
uiBlockSetFlag(block, UI_BLOCK_FRONTBUFFER); // force old style frontbuffer draw uiBlockSetFlag(block, UI_BLOCK_FRONTBUFFER); // force old style frontbuffer draw
} }
@ -3018,7 +3018,7 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
sa->win_swap= WIN_BACK_OK; sa->win_swap= WIN_BACK_OK;
if(G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT)) { if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT || G.f & G_TEXTUREPAINT) {
v3d->flag |= V3D_NEEDBACKBUFDRAW; v3d->flag |= V3D_NEEDBACKBUFDRAW;
addafterqueue(sa->win, BACKBUFDRAW, 1); addafterqueue(sa->win, BACKBUFDRAW, 1);
} }

@ -422,7 +422,7 @@ int get_border(rcti *rect, short flag)
circle_selectCB(&obedit_selectionCB); circle_selectCB(&obedit_selectionCB);
} }
} }
else if (G.f&G_FACESELECT) { else if (FACESEL_PAINT_TEST) {
circle_selectCB(&obedit_selectionCB); circle_selectCB(&obedit_selectionCB);
} }
return 0; return 0;
@ -769,7 +769,7 @@ void countall()
allqueue(REDRAWINFO, 1); /* 1, because header->win==0! */ allqueue(REDRAWINFO, 1); /* 1, because header->win==0! */
return; return;
} }
else if(G.f & (G_FACESELECT + G_VERTEXPAINT + G_TEXTUREPAINT +G_WEIGHTPAINT)) { else if(FACESEL_PAINT_TEST) {
me= get_mesh((G.scene->basact) ? (G.scene->basact->object) : 0); me= get_mesh((G.scene->basact) ? (G.scene->basact->object) : 0);
if(me) { if(me) {
G.totface= me->totface; G.totface= me->totface;

@ -1480,7 +1480,7 @@ void add_primitiveArmature(int type)
if ELEM(curarea->spacetype, SPACE_VIEW3D, SPACE_INFO); else return; if ELEM(curarea->spacetype, SPACE_VIEW3D, SPACE_INFO); else return;
if(G.vd==NULL) return; if(G.vd==NULL) return;
G.f &= ~(G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT+G_WEIGHTPAINT); G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT);
setcursor_space(SPACE_VIEW3D, CURSOR_STD); setcursor_space(SPACE_VIEW3D, CURSOR_STD);
check_editmode(OB_ARMATURE); check_editmode(OB_ARMATURE);

@ -66,6 +66,7 @@
#include "BKE_object.h" #include "BKE_object.h"
#include "BKE_texture.h" #include "BKE_texture.h"
#include "BKE_utildefines.h" #include "BKE_utildefines.h"
#include "BKE_customdata.h"
#include "BSE_view.h" #include "BSE_view.h"
#include "BSE_edit.h" #include "BSE_edit.h"
@ -340,7 +341,6 @@ static void uv_calc_shift_project(float *target, float *shift, float rotmat[][4]
void calculate_uv_map(unsigned short mapmode) void calculate_uv_map(unsigned short mapmode)
{ {
MTFace *tface; MTFace *tface;
/*MFace *mface;*/
Object *ob; Object *ob;
float dx, dy, rotatematrix[4][4], radius= 1.0, min[3], cent[3], max[3]; float dx, dy, rotatematrix[4][4], radius= 1.0, min[3], cent[3], max[3];
float fac= 1.0, upangledeg= 0.0, sideangledeg= 90.0; float fac= 1.0, upangledeg= 0.0, sideangledeg= 90.0;
@ -358,8 +358,16 @@ void calculate_uv_map(unsigned short mapmode)
else sideangledeg= 90.0; else sideangledeg= 90.0;
} }
/* add uvs if there not here */
if (!EM_texFaceCheck()) {
if (em && em->faces.first)
EM_add_data_layer(&em->fdata, CD_MTFACE);
if (!EM_texFaceCheck())
return;
}
ob=OBACT; ob=OBACT;
if (!EM_texFaceCheck()) return;
switch(mapmode) { switch(mapmode) {
case B_UVAUTO_BOUNDS: case B_UVAUTO_BOUNDS:
@ -1415,51 +1423,6 @@ void uv_autocalc_tface()
} }
} }
void set_faceselect() /* toggle */
{
Object *ob = OBACT;
Mesh *me = 0;
if(ob==NULL) return;
if(object_data_is_libdata(ob)) {
error_libdata();
return;
}
me= get_mesh(ob);
scrarea_queue_headredraw(curarea);
if(me) /* make sure modifiers are updated for mapping requirements */
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
if(G.f & G_FACESELECT) {
G.f &= ~G_FACESELECT;
if((G.f & (G_WEIGHTPAINT|G_VERTEXPAINT|G_TEXTUREPAINT))==0) {
if(me)
reveal_tface();
setcursor_space(SPACE_VIEW3D, CURSOR_STD);
BIF_undo_push("End UV Faceselect");
}
}
else if (me && (ob->lay & G.vd->lay)) {
G.f |= G_FACESELECT;
/*
if(me->mtface==NULL)
make_tfaces(me);
*/
setcursor_space(SPACE_VIEW3D, CURSOR_FACESEL);
BIF_undo_push("Set UV Faceselect");
}
countall();
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
/*allqueue(REDRAWIMAGE, 0);*/
}
/* Texture Paint */ /* Texture Paint */
void set_texturepaint() /* toggle */ void set_texturepaint() /* toggle */

@ -838,7 +838,7 @@ void make_editMesh()
evlist[a]= eve; evlist[a]= eve;
// face select sets selection in next loop // face select sets selection in next loop
if( (G.f & G_FACESELECT)==0 ) if( (FACESEL_PAINT_TEST)==0 )
eve->f |= (mvert->flag & 1); eve->f |= (mvert->flag & 1);
if (mvert->flag & ME_HIDE) eve->h= 1; if (mvert->flag & ME_HIDE) eve->h= 1;
@ -904,7 +904,7 @@ void make_editMesh()
} }
if(mface->flag & ME_HIDE) efa->h= 1; if(mface->flag & ME_HIDE) efa->h= 1;
if((G.f & G_FACESELECT) && (efa->f & SELECT)) if((FACESEL_PAINT_TEST) && (efa->f & SELECT))
EM_select_face(efa, 1); /* flush down */ EM_select_face(efa, 1); /* flush down */
} }
} }

@ -1188,8 +1188,8 @@ void add_primitiveMesh(int type)
/* if editmode exists for other type, it exits */ /* if editmode exists for other type, it exits */
check_editmode(OB_MESH); check_editmode(OB_MESH);
if(G.f & (G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT)) { if(G.f & (G_VERTEXPAINT+G_TEXTUREPAINT)) {
G.f &= ~(G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT); G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT);
setcursor_space(SPACE_VIEW3D, CURSOR_EDIT); setcursor_space(SPACE_VIEW3D, CURSOR_EDIT);
} }

@ -240,7 +240,7 @@ int EM_mask_init_backbuf_border(short mcords[][2], short tot, short xmin, short
/* method in use for face selecting too */ /* method in use for face selecting too */
if(G.obedit==NULL) { if(G.obedit==NULL) {
if(G.f & G_FACESELECT); if(FACESEL_PAINT_TEST);
else return 0; else return 0;
} }
else if(G.vd->drawtype<OB_SOLID || (G.vd->flag & V3D_ZBUF_SELECT)==0) return 0; else if(G.vd->drawtype<OB_SOLID || (G.vd->flag & V3D_ZBUF_SELECT)==0) return 0;
@ -302,7 +302,7 @@ int EM_init_backbuf_circle(short xs, short ys, short rads)
/* method in use for face selecting too */ /* method in use for face selecting too */
if(G.obedit==NULL) { if(G.obedit==NULL) {
if(G.f & G_FACESELECT); if(FACESEL_PAINT_TEST);
else return 0; else return 0;
} }
else if(G.vd->drawtype<OB_SOLID || (G.vd->flag & V3D_ZBUF_SELECT)==0) return 0; else if(G.vd->drawtype<OB_SOLID || (G.vd->flag & V3D_ZBUF_SELECT)==0) return 0;
@ -697,7 +697,7 @@ static void unified_select_draw(EditVert *eve, EditEdge *eed, EditFace *efa)
} }
} }
if(G.scene->selectmode & SCE_SELECT_FACE) { if(G.scene->selectmode & SCE_SELECT_FACE && (G.vd->drawtype!=OB_TEXTURE)) {
if(efa->fgonf==0) { if(efa->fgonf==0) {
glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE)); glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE));
BIF_ThemeColor((efa->f & SELECT)?TH_FACE_DOT:TH_WIRE); BIF_ThemeColor((efa->f & SELECT)?TH_FACE_DOT:TH_WIRE);
@ -1311,6 +1311,8 @@ void select_mesh_group_menu()
EM_select_flush(); /* so that selected verts, go onto select faces */ EM_select_flush(); /* so that selected verts, go onto select faces */
G.totvertsel += selcount; G.totvertsel += selcount;
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
BIF_undo_push("Select Similar Vertices"); BIF_undo_push("Select Similar Vertices");
} }
return; return;
@ -1323,6 +1325,8 @@ void select_mesh_group_menu()
/*EM_select_flush();*/ /* dont use because it can end up selecting more edges and is not usefull*/ /*EM_select_flush();*/ /* dont use because it can end up selecting more edges and is not usefull*/
G.totedgesel+=selcount; G.totedgesel+=selcount;
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
BIF_undo_push("Select Similar Edges"); BIF_undo_push("Select Similar Edges");
} }
return; return;
@ -1658,8 +1662,9 @@ static void mouse_mesh_loop(void)
EM_selectmode_flush(); EM_selectmode_flush();
countall(); countall();
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
} }
} }
@ -1767,6 +1772,8 @@ static void selectconnectedAll(void)
countall(); countall();
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
BIF_undo_push("Select Connected (All)"); BIF_undo_push("Select Connected (All)");
} }
@ -1989,6 +1996,8 @@ void reveal_mesh(void)
countall(); countall();
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
BIF_undo_push("Reveal"); BIF_undo_push("Reveal");
} }
@ -2716,6 +2725,8 @@ void EM_selectmode_menu(void)
} }
allqueue(REDRAWVIEW3D, 1); allqueue(REDRAWVIEW3D, 1);
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
} }
} }

@ -186,7 +186,7 @@ void add_object_draw(int type) /* for toolbox or menus, only non-editmode stuff
{ {
Object *ob; Object *ob;
G.f &= ~(G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE); G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE);
setcursor_space(SPACE_VIEW3D, CURSOR_STD); setcursor_space(SPACE_VIEW3D, CURSOR_STD);
if ELEM3(curarea->spacetype, SPACE_VIEW3D, SPACE_BUTS, SPACE_INFO) { if ELEM3(curarea->spacetype, SPACE_VIEW3D, SPACE_BUTS, SPACE_INFO) {
@ -306,7 +306,7 @@ void delete_obj(int ok)
} }
countall(); countall();
G.f &= ~(G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT+G_WEIGHTPAINT); G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT);
setcursor_space(SPACE_VIEW3D, CURSOR_STD); setcursor_space(SPACE_VIEW3D, CURSOR_STD);
if(islamp) reshadeall_displist(); /* only frees displist */ if(islamp) reshadeall_displist(); /* only frees displist */
@ -2201,7 +2201,7 @@ void special_editmenu(void)
if(ob->flag & OB_POSEMODE) { if(ob->flag & OB_POSEMODE) {
pose_special_editmenu(); pose_special_editmenu();
} }
else if(G.f & G_FACESELECT) { else if(FACESEL_PAINT_TEST) {
Mesh *me= get_mesh(ob); Mesh *me= get_mesh(ob);
MTFace *tface; MTFace *tface;
MFace *mface; MFace *mface;
@ -3411,7 +3411,7 @@ void copy_attr_menu()
if ((G.obedit)) return; /* no editmode copy yet */ if ((G.obedit)) return; /* no editmode copy yet */
if(G.f & G_FACESELECT) { if(FACESEL_PAINT_TEST) {
event= pupmenu("Copy Active Texface%t|Image%x1|UV Coords%x2|Color%x3|Mode%x4|Transp%x5"); event= pupmenu("Copy Active Texface%t|Image%x1|UV Coords%x2|Color%x3|Mode%x4|Transp%x5");
copy_attr_tface(event); copy_attr_tface(event);

@ -176,7 +176,7 @@ static int choose_cursor(ScrArea *sa)
if(G.obedit) return CURSOR_EDIT; if(G.obedit) return CURSOR_EDIT;
else if(G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT)) else if(G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT))
return CURSOR_VPAINT; return CURSOR_VPAINT;
else if(G.f & G_FACESELECT) return CURSOR_FACESEL; else if(FACESEL_PAINT_TEST) return CURSOR_FACESEL;
else if(G.f & G_SCULPTMODE) return CURSOR_EDIT; else if(G.f & G_SCULPTMODE) return CURSOR_EDIT;
else return CURSOR_STD; else return CURSOR_STD;
} }

@ -140,7 +140,7 @@ int is_uv_tface_editing_allowed_silent(void)
int is_uv_tface_editing_allowed(void) int is_uv_tface_editing_allowed(void)
{ {
if(!G.obedit) error("Unable to perform action in Edit Mode"); if(!G.obedit) error("Enter Edit Mode to perform this action");
return is_uv_tface_editing_allowed_silent(); return is_uv_tface_editing_allowed_silent();
} }

@ -575,7 +575,7 @@ static void do_lasso_select_facemode(short mcords[][2], short moves, short selec
static void do_lasso_select(short mcords[][2], short moves, short select) static void do_lasso_select(short mcords[][2], short moves, short select)
{ {
if(G.obedit==NULL) { if(G.obedit==NULL) {
if(G.f & G_FACESELECT) if(FACESEL_PAINT_TEST)
do_lasso_select_facemode(mcords, moves, select); do_lasso_select_facemode(mcords, moves, select);
else if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT)) else if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT))
; ;
@ -1102,10 +1102,6 @@ void set_active_base(Base *base)
if(G.f & G_TEXTUREPAINT) if(G.f & G_TEXTUREPAINT)
set_texturepaint(); /* Switch off tex paint */ set_texturepaint(); /* Switch off tex paint */
} }
/* always end this */
if(G.f & G_FACESELECT) {
set_faceselect(); /* toggle */
}
} }
/* sets scene->basact */ /* sets scene->basact */
@ -1670,7 +1666,7 @@ void borderselect(void)
int a, index; int a, index;
short hits, val; short hits, val;
if(G.obedit==NULL && (G.f & G_FACESELECT)) { if(G.obedit==NULL && (FACESEL_PAINT_TEST)) {
face_borderselect(); face_borderselect();
return; return;
} }
@ -1683,8 +1679,11 @@ void borderselect(void)
val= get_border(&rect, 3); val= get_border(&rect, 3);
if (!a) setlinestyle(0); if (!a) setlinestyle(0);
if(val==0) if(val==0) {
if (EM_texFaceCheck())
allqueue(REDRAWIMAGE, 0);
return; return;
}
if(G.obedit) { if(G.obedit) {
if(G.obedit->type==OB_MESH) { if(G.obedit->type==OB_MESH) {
@ -1919,7 +1918,7 @@ static void mesh_selectionCB(int selecting, Object *editobj, short *mval, float
EditMesh *em = G.editMesh; EditMesh *em = G.editMesh;
int bbsel; int bbsel;
if(!G.obedit && (G.f&G_FACESELECT)) { if(!G.obedit && (FACESEL_PAINT_TEST)) {
Mesh *me = get_mesh(OBACT); Mesh *me = get_mesh(OBACT);
if (me) { if (me) {

@ -489,7 +489,6 @@ void do_info_buttons(unsigned short event)
if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */ if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */
if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */ if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */
if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */ if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */
if(G.f & G_FACESELECT) set_faceselect(); /* Switch off face select */
/* check all sets */ /* check all sets */
sce1= G.main->scene.first; sce1= G.main->scene.first;

@ -145,7 +145,7 @@
#define V3D_OBJECTMODE_SEL ICON_OBJECT #define V3D_OBJECTMODE_SEL ICON_OBJECT
#define V3D_EDITMODE_SEL ICON_EDITMODE_HLT #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
#define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
#define V3D_FACESELECTMODE_SEL ICON_FACESEL_HLT #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
#define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
#define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
#define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
@ -385,7 +385,7 @@ static void do_view3d_view_alignviewmenu(void *arg, int event)
case 2: case 2:
if ((G.obedit) && (G.obedit->type == OB_MESH)) { if ((G.obedit) && (G.obedit->type == OB_MESH)) {
editmesh_align_view_to_selected(v3d, event); editmesh_align_view_to_selected(v3d, event);
} else if (G.f & G_FACESELECT) { } else if (FACESEL_PAINT_TEST) {
Object *obact= OBACT; Object *obact= OBACT;
if (obact && obact->type==OB_MESH) { if (obact && obact->type==OB_MESH) {
Mesh *me= obact->data; Mesh *me= obact->data;
@ -437,7 +437,7 @@ static uiBlock *view3d_view_alignviewmenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor and View All|Shift C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor and View All|Shift C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align Active Camera to View|Ctrl Alt NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align Active Camera to View|Ctrl Alt NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
if (((G.obedit) && (G.obedit->type == OB_MESH)) || (G.f & G_FACESELECT)) { if (((G.obedit) && (G.obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Top)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Top)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Front)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Front)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Side)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Side)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
@ -4081,7 +4081,7 @@ static void do_view3d_vpaintmenu(void *arg, int event)
BIF_undo(); BIF_undo();
break; break;
case 1: /* set vertex colors/weight */ case 1: /* set vertex colors/weight */
if(G.f & G_FACESELECT) if(FACESEL_PAINT_TEST)
clear_vpaint_selectedfaces(); clear_vpaint_selectedfaces();
else /* we know were in vertex paint mode */ else /* we know were in vertex paint mode */
clear_vpaint(); clear_vpaint();
@ -4203,7 +4203,7 @@ static uiBlock *view3d_wpaintmenu(void *arg_unused)
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, "");
if (G.f & G_FACESELECT) { if (FACESEL_PAINT_TEST) {
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Weight|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Weight|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
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, "");
menunr++; menunr++;
@ -4671,7 +4671,7 @@ static char *view3d_modeselect_pup(void)
if (ob->type == OB_MESH) { if (ob->type == OB_MESH) {
str += sprintf(str, formatstr, "Sculpt Mode", V3D_SCULPTMODE_SEL, ICON_SCULPTMODE_HLT); str += sprintf(str, formatstr, "Sculpt Mode", V3D_SCULPTMODE_SEL, ICON_SCULPTMODE_HLT);
str += sprintf(str, formatstr, "Face Select", V3D_FACESELECTMODE_SEL, ICON_FACESEL_HLT); /*str += sprintf(str, formatstr, "Face Select", V3D_FACESELECTMODE_SEL, ICON_FACESEL_HLT);*/
str += sprintf(str, formatstr, "Vertex Paint", V3D_VERTEXPAINTMODE_SEL, ICON_VPAINT_HLT); str += sprintf(str, formatstr, "Vertex Paint", V3D_VERTEXPAINTMODE_SEL, ICON_VPAINT_HLT);
str += sprintf(str, formatstr, "Texture Paint", V3D_TEXTUREPAINTMODE_SEL, ICON_TPAINT_HLT); str += sprintf(str, formatstr, "Texture Paint", V3D_TEXTUREPAINTMODE_SEL, ICON_TPAINT_HLT);
str += sprintf(str, formatstr, "Weight Paint", V3D_WEIGHTPAINTMODE_SEL, ICON_WPAINT_HLT); str += sprintf(str, formatstr, "Weight Paint", V3D_WEIGHTPAINTMODE_SEL, ICON_WPAINT_HLT);
@ -4807,7 +4807,6 @@ void do_view3d_buttons(short event)
if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */ if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */
if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */ if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */
if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */ if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */
if(G.f & G_FACESELECT) set_faceselect(); /* Switch off face select */
if(ob) exit_posemode(); /* exit posemode for active object */ if(ob) exit_posemode(); /* exit posemode for active object */
if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */ if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
} }
@ -4826,7 +4825,6 @@ void do_view3d_buttons(short event)
else if (G.vd->modeselect == V3D_SCULPTMODE_SEL) { else if (G.vd->modeselect == V3D_SCULPTMODE_SEL) {
if (!(G.f & G_SCULPTMODE)) { if (!(G.f & G_SCULPTMODE)) {
G.vd->flag &= ~V3D_MODE; G.vd->flag &= ~V3D_MODE;
if(G.f & G_FACESELECT) set_faceselect(); /* Switch off face select */
if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */ if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */
if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */ if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */
if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */ if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */
@ -4835,24 +4833,6 @@ void do_view3d_buttons(short event)
set_sculptmode(); set_sculptmode();
} }
} }
else if (G.vd->modeselect == V3D_FACESELECTMODE_SEL) {
if ((G.obedit) && (G.f & G_FACESELECT)) {
exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
} else if ((G.f & G_FACESELECT) && (G.f & G_VERTEXPAINT)) {
if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */
} else if ((G.f & G_FACESELECT) && (G.f & G_TEXTUREPAINT)) {
if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */
} else {
G.vd->flag &= ~V3D_MODE;
if(G.f & G_SCULPTMODE) set_sculptmode(); /* Switch off sculptmode */
if(G.f & G_VERTEXPAINT) set_vpaint(); /* Switch off vertex paint */
if(G.f & G_TEXTUREPAINT) set_texturepaint(); /* Switch off tex paint */
if(G.f & G_WEIGHTPAINT) set_wpaint(); /* Switch off weight paint */
if (G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
set_faceselect();
}
}
else if (G.vd->modeselect == V3D_VERTEXPAINTMODE_SEL) { else if (G.vd->modeselect == V3D_VERTEXPAINTMODE_SEL) {
if (!(G.f & G_VERTEXPAINT)) { if (!(G.f & G_VERTEXPAINT)) {
G.vd->flag &= ~V3D_MODE; G.vd->flag &= ~V3D_MODE;
@ -5034,7 +5014,7 @@ static void view3d_header_pulldowns(uiBlock *block, short *xcoord)
} else if (ob && ob->type == OB_ARMATURE) { } else if (ob && ob->type == OB_ARMATURE) {
uiDefPulldownBut(block, view3d_select_armaturemenu, NULL, "Select", xco,-2, xmax-3, 24, ""); uiDefPulldownBut(block, view3d_select_armaturemenu, NULL, "Select", xco,-2, xmax-3, 24, "");
} }
} else if (G.f & G_FACESELECT) { } else if (FACESEL_PAINT_TEST) {
if (ob && ob->type == OB_MESH) { if (ob && ob->type == OB_MESH) {
uiDefPulldownBut(block, view3d_select_faceselmenu, NULL, "Select", xco,-2, xmax-3, 24, ""); uiDefPulldownBut(block, view3d_select_faceselmenu, NULL, "Select", xco,-2, xmax-3, 24, "");
} }
@ -5100,7 +5080,7 @@ static void view3d_header_pulldowns(uiBlock *block, short *xcoord)
uiDefPulldownBut(block, view3d_sculptmenu, NULL, "Sculpt", xco, -2, xmax-3, 24, ""); uiDefPulldownBut(block, view3d_sculptmenu, NULL, "Sculpt", xco, -2, xmax-3, 24, "");
xco+= xmax; xco+= xmax;
} }
else if (G.f & G_FACESELECT) { else if (FACESEL_PAINT_TEST) {
if (ob && ob->type == OB_MESH) { if (ob && ob->type == OB_MESH) {
xmax= GetButStringLength("Face"); xmax= GetButStringLength("Face");
uiDefPulldownBut(block, view3d_faceselmenu, NULL, "Face", xco,-2, xmax-3, 24, ""); uiDefPulldownBut(block, view3d_faceselmenu, NULL, "Face", xco,-2, xmax-3, 24, "");
@ -5168,7 +5148,7 @@ void view3d_buttons(void)
else if (G.f & G_WEIGHTPAINT) G.vd->modeselect = V3D_WEIGHTPAINTMODE_SEL; else if (G.f & G_WEIGHTPAINT) G.vd->modeselect = V3D_WEIGHTPAINTMODE_SEL;
else if (G.f & G_VERTEXPAINT) G.vd->modeselect = V3D_VERTEXPAINTMODE_SEL; else if (G.f & G_VERTEXPAINT) G.vd->modeselect = V3D_VERTEXPAINTMODE_SEL;
else if (G.f & G_TEXTUREPAINT) G.vd->modeselect = V3D_TEXTUREPAINTMODE_SEL; else if (G.f & G_TEXTUREPAINT) G.vd->modeselect = V3D_TEXTUREPAINTMODE_SEL;
else if(G.f & G_FACESELECT) G.vd->modeselect = V3D_FACESELECTMODE_SEL; /*else if(G.f & G_FACESELECT) G.vd->modeselect = V3D_FACESELECTMODE_SEL;*/
G.vd->flag &= ~V3D_MODE; G.vd->flag &= ~V3D_MODE;
@ -5178,7 +5158,7 @@ void view3d_buttons(void)
if(G.f & G_VERTEXPAINT) G.vd->flag |= V3D_VERTEXPAINT; if(G.f & G_VERTEXPAINT) G.vd->flag |= V3D_VERTEXPAINT;
if(G.f & G_WEIGHTPAINT) G.vd->flag |= V3D_WEIGHTPAINT; if(G.f & G_WEIGHTPAINT) G.vd->flag |= V3D_WEIGHTPAINT;
if (G.f & G_TEXTUREPAINT) G.vd->flag |= V3D_TEXTUREPAINT; if (G.f & G_TEXTUREPAINT) G.vd->flag |= V3D_TEXTUREPAINT;
if(G.f & G_FACESELECT) G.vd->flag |= V3D_FACESELECT; if(FACESEL_PAINT_TEST) G.vd->flag |= V3D_FACESELECT;
uiDefIconTextButS(block, MENU, B_MODESELECT, (G.vd->modeselect),view3d_modeselect_pup() , uiDefIconTextButS(block, MENU, B_MODESELECT, (G.vd->modeselect),view3d_modeselect_pup() ,
xco,0,126,20, &(G.vd->modeselect), 0, 0, 0, 0, "Mode (Hotkeys: Tab, F, V, Ctrl Tab)"); xco,0,126,20, &(G.vd->modeselect), 0, 0, 0, 0, "Mode (Hotkeys: Tab, F, V, Ctrl Tab)");
@ -5223,34 +5203,40 @@ void view3d_buttons(void)
uiBlockEndAlign(block); uiBlockEndAlign(block);
} }
} else { } else {
uiDefIconTextButS(block, ICONTEXTROW,B_AROUND, ICON_ROTATE, around_pup(), xco,0,XIC+10,YIC, &(G.vd->around), 0, 3.0, 0, 0, "Rotation/Scaling Pivot (Hotkeys: Comma, Shift Comma, Period) "); if (G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT)) {
uiDefIconButBitI(block, TOG, G_FACESELECT, B_REDR, ICON_FACESEL_HLT,xco,0,XIC,YIC, &G.f, 0, 0, 0, 0, "Painting Mask (FKey)");
xco+= XIC+10;
} else {
/* Manipulators arnt used in weight paint mode */
uiDefIconTextButS(block, ICONTEXTROW,B_AROUND, ICON_ROTATE, around_pup(), xco,0,XIC+10,YIC, &(G.vd->around), 0, 3.0, 0, 0, "Rotation/Scaling Pivot (Hotkeys: Comma, Shift Comma, Period) ");
xco+= XIC+10; xco+= XIC+10;
uiDefIconButBitS(block, TOG, V3D_ALIGN, B_AROUND, ICON_ALIGN, uiDefIconButBitS(block, TOG, V3D_ALIGN, B_AROUND, ICON_ALIGN,
xco,0,XIC,YIC, xco,0,XIC,YIC,
&G.vd->flag, 0, 0, 0, 0, "Move object centers only"); &G.vd->flag, 0, 0, 0, 0, "Move object centers only");
uiBlockEndAlign(block); uiBlockEndAlign(block);
xco+= XIC+8; xco+= XIC+8;
/* Transform widget / manipulators */ /* Transform widget / manipulators */
uiBlockBeginAlign(block); uiBlockBeginAlign(block);
uiDefIconButBitS(block, TOG, V3D_USE_MANIPULATOR, B_REDR, ICON_MANIPUL,xco,0,XIC,YIC, &G.vd->twflag, 0, 0, 0, 0, "Use 3d transform manipulator (Ctrl Space)"); uiDefIconButBitS(block, TOG, V3D_USE_MANIPULATOR, B_REDR, ICON_MANIPUL,xco,0,XIC,YIC, &G.vd->twflag, 0, 0, 0, 0, "Use 3d transform manipulator (Ctrl Space)");
xco+= XIC;
if(G.vd->twflag & V3D_USE_MANIPULATOR) {
uiDefIconButBitS(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode (Ctrl Alt G)");
xco+= XIC; xco+= XIC;
uiDefIconButBitS(block, TOG, V3D_MANIP_ROTATE, B_MAN_ROT, ICON_MAN_ROT, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Rotate manipulator mode (Ctrl Alt R)");
xco+= XIC; if(G.vd->twflag & V3D_USE_MANIPULATOR) {
uiDefIconButBitS(block, TOG, V3D_MANIP_SCALE, B_MAN_SCALE, ICON_MAN_SCALE, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Scale manipulator mode (Ctrl Alt S)"); uiDefIconButBitS(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode (Ctrl Alt G)");
xco+= XIC; xco+= XIC;
} uiDefIconButBitS(block, TOG, V3D_MANIP_ROTATE, B_MAN_ROT, ICON_MAN_ROT, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Rotate manipulator mode (Ctrl Alt R)");
uiDefButS(block, MENU, B_NOP, "Orientation%t|Global%x0|Local%x1|Normal%x2|View%x3",xco,0,70,YIC, &G.vd->twmode, 0, 0, 0, 0, "Transform Orientation (Alt Space)"); xco+= XIC;
xco+= 70; uiDefIconButBitS(block, TOG, V3D_MANIP_SCALE, B_MAN_SCALE, ICON_MAN_SCALE, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Scale manipulator mode (Ctrl Alt S)");
uiBlockEndAlign(block); xco+= XIC;
xco+= 8; }
uiDefButS(block, MENU, B_NOP, "Orientation%t|Global%x0|Local%x1|Normal%x2|View%x3",xco,0,70,YIC, &G.vd->twmode, 0, 0, 0, 0, "Transform Orientation (Alt Space)");
xco+= 70;
uiBlockEndAlign(block);
xco+= 8;
}
/* LAYERS */ /* LAYERS */
if(G.obedit==NULL && G.vd->localview==0) { if(G.obedit==NULL && G.vd->localview==0) {

@ -2533,7 +2533,7 @@ static void object_delete_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem
if(G.obedit==base->object) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); if(G.obedit==base->object) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
if(base==BASACT) { if(base==BASACT) {
G.f &= ~(G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT+G_WEIGHTPAINT); G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT);
setcursor_space(SPACE_VIEW3D, CURSOR_STD); setcursor_space(SPACE_VIEW3D, CURSOR_STD);
} }

@ -113,7 +113,7 @@ void enter_posemode(void)
} }
if (G.obedit) exit_editmode(EM_FREEDATA|EM_WAITCURSOR); if (G.obedit) exit_editmode(EM_FREEDATA|EM_WAITCURSOR);
G.f &= ~(G_VERTEXPAINT | G_FACESELECT | G_TEXTUREPAINT | G_WEIGHTPAINT); G.f &= ~(G_VERTEXPAINT | G_TEXTUREPAINT | G_WEIGHTPAINT);
} }
void set_pose_keys (Object *ob) void set_pose_keys (Object *ob)

@ -648,7 +648,7 @@ static void align_view_to_selected(View3D *v3d)
if ((G.obedit) && (G.obedit->type == OB_MESH)) { if ((G.obedit) && (G.obedit->type == OB_MESH)) {
editmesh_align_view_to_selected(v3d, axis); editmesh_align_view_to_selected(v3d, axis);
addqueue(v3d->area->win, REDRAW, 1); addqueue(v3d->area->win, REDRAW, 1);
} else if (G.f & G_FACESELECT) { } else if (FACESEL_PAINT_TEST) {
Object *obact= OBACT; Object *obact= OBACT;
if (obact && obact->type==OB_MESH) { if (obact && obact->type==OB_MESH) {
Mesh *me= obact->data; Mesh *me= obact->data;
@ -1568,7 +1568,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
mouse_mesh(); /* loop select for 1 mousebutton dudes */ mouse_mesh(); /* loop select for 1 mousebutton dudes */
else if(G.qual==LR_CTRLKEY) else if(G.qual==LR_CTRLKEY)
mouse_select(); /* also allow in editmode, for vertex parenting */ mouse_select(); /* also allow in editmode, for vertex parenting */
else if(G.f & G_FACESELECT) else if(FACESEL_PAINT_TEST)
face_select(); face_select();
else if( G.f & (G_VERTEXPAINT|G_TEXTUREPAINT)) else if( G.f & (G_VERTEXPAINT|G_TEXTUREPAINT))
sample_vpaint(); sample_vpaint();
@ -1689,7 +1689,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
deselectall_posearmature(ob, 1, 1); deselectall_posearmature(ob, 1, 1);
} }
else { else {
if(G.f & G_FACESELECT) deselectall_tface(); if(FACESEL_PAINT_TEST) deselectall_tface();
else { else {
/* by design, the center of the active object /* by design, the center of the active object
* (which need not necessarily by selected) will * (which need not necessarily by selected) will
@ -1804,7 +1804,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if (G.qual==LR_CTRLKEY) { else if (G.qual==LR_CTRLKEY) {
if(G.obedit && G.obedit->type==OB_MESH) if(G.obedit && G.obedit->type==OB_MESH)
Edge_Menu(); Edge_Menu();
else if (G.f & G_FACESELECT) else if (FACESEL_PAINT_TEST)
seam_mark_clear_tface(0); seam_mark_clear_tface(0);
} }
else if (G.qual==LR_SHIFTKEY) { else if (G.qual==LR_SHIFTKEY) {
@ -1848,7 +1848,10 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
fly(); fly();
} }
else { else {
set_faceselect(); if (G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT)){
G.f ^= G_FACESELECT;
allqueue(REDRAWVIEW3D, 1);
}
} }
break; break;
@ -1953,7 +1956,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
show_all_armature_bones(); show_all_armature_bones();
} }
} }
else if(G.f & G_FACESELECT) else if(FACESEL_PAINT_TEST)
hide_tface(); hide_tface();
else if(ob && (ob->flag & OB_POSEMODE)) { else if(ob && (ob->flag & OB_POSEMODE)) {
if (G.qual==0) if (G.qual==0)
@ -2017,7 +2020,7 @@ 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(FACESEL_PAINT_TEST)
if (G.f & G_WEIGHTPAINT) if (G.f & G_WEIGHTPAINT)
clear_wpaint_selectedfaces(); clear_wpaint_selectedfaces();
else else
@ -2045,7 +2048,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
selectconnected_posearmature(); selectconnected_posearmature();
} }
else { else {
if(G.f & G_FACESELECT) { if(FACESEL_PAINT_TEST) {
if((G.qual==0)) if((G.qual==0))
select_linked_tfaces(0); select_linked_tfaces(0);
else if((G.qual==LR_SHIFTKEY)) else if((G.qual==LR_SHIFTKEY))
@ -2064,7 +2067,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
} }
break; break;
case MKEY: case MKEY:
if((G.obedit==0) && (G.f & G_FACESELECT) && (G.qual==0)) if((G.obedit==0) && (FACESEL_PAINT_TEST) && (G.qual==0))
mirror_uv_tface(); mirror_uv_tface();
else if(G.obedit){ else if(G.obedit){
if(G.qual==LR_ALTKEY) { if(G.qual==LR_ALTKEY) {
@ -2198,7 +2201,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
} }
break; break;
case RKEY: case RKEY:
if((G.obedit==0) && (G.f & G_FACESELECT) && (G.qual==0) && !(G.f & G_WEIGHTPAINT)) if((G.obedit==0) && (FACESEL_PAINT_TEST) && (G.qual==0) && !(G.f & G_WEIGHTPAINT))
rotate_uv_tface(); rotate_uv_tface();
else if((G.obedit==0) && G.qual==LR_ALTKEY) { else if((G.obedit==0) && G.qual==LR_ALTKEY) {
if(okee("Clear rotation")) { if(okee("Clear rotation")) {
@ -2342,6 +2345,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break; break;
case UKEY: case UKEY:
/*// Use Ctrl Z like everybody else
if(G.obedit) { if(G.obedit) {
if(G.obedit->type==OB_MESH) { if(G.obedit->type==OB_MESH) {
if(G.qual==0) BIF_undo(); else BIF_redo(); if(G.qual==0) BIF_undo(); else BIF_redo();
@ -2349,6 +2353,11 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if ELEM5(G.obedit->type, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE) { else if ELEM5(G.obedit->type, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE) {
if(G.qual==0) BIF_undo(); else BIF_redo(); if(G.qual==0) BIF_undo(); else BIF_redo();
} }
}*/
if(G.obedit) {
if(G.qual==0) {
uv_autocalc_tface();
}
} }
else if((G.qual==0)) { else if((G.qual==0)) {
if(G.f & G_WEIGHTPAINT) if(G.f & G_WEIGHTPAINT)
@ -2357,8 +2366,6 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
BIF_undo(); BIF_undo();
else if(G.f & G_TEXTUREPAINT) else if(G.f & G_TEXTUREPAINT)
imagepaint_undo(); imagepaint_undo();
/*else if (G.f & G_FACESELECT)
uv_autocalc_tface();*/
else { else {
single_user(); single_user();
} }
@ -2370,7 +2377,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if ((G.obedit) && G.obedit->type==OB_MESH) { if ((G.obedit) && G.obedit->type==OB_MESH) {
align_view_to_selected(v3d); align_view_to_selected(v3d);
} }
else if (G.f & G_FACESELECT) { else if (FACESEL_PAINT_TEST) {
align_view_to_selected(v3d); align_view_to_selected(v3d);
} }
} }
@ -2397,11 +2404,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
initTransform(TFM_WARP, CTX_NONE); initTransform(TFM_WARP, CTX_NONE);
Transform(); Transform();
} }
else if(G.qual==LR_ALTKEY) { /*else if(G.qual==LR_ALTKEY) {}*/
if(G.obedit) {
uv_autocalc_tface();
}
}
else if(G.qual==LR_CTRLKEY) { else if(G.qual==LR_CTRLKEY) {
if(G.obedit) { if(G.obedit) {
if ELEM(G.obedit->type, OB_CURVE, OB_SURF) { if ELEM(G.obedit->type, OB_CURVE, OB_SURF) {
@ -2479,7 +2482,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if ((G.obedit) && (G.obedit->type == OB_MESH)) { if ((G.obedit) && (G.obedit->type == OB_MESH)) {
editmesh_align_view_to_selected(G.vd, 3); editmesh_align_view_to_selected(G.vd, 3);
} }
else if (G.f & G_FACESELECT) { else if (FACESEL_PAINT_TEST) {
if(ob->type==OB_MESH) { if(ob->type==OB_MESH) {
Mesh *me= ob->data; Mesh *me= ob->data;
faceselect_align_view_to_selected(G.vd, me, 3); faceselect_align_view_to_selected(G.vd, me, 3);

@ -2095,7 +2095,7 @@ void toolbox_n(void)
} }
} }
} }
else if (G.f & G_FACESELECT) { else if (FACESEL_PAINT_TEST) {
menu3 = tb_face_select; menu3 = tb_face_select;
} }
} }

@ -427,7 +427,7 @@ int calc_manipulator_stats(ScrArea *sa)
/* restore, mode can be TFM_INIT */ /* restore, mode can be TFM_INIT */
Trans.mode= mode; Trans.mode= mode;
} }
else if(G.f & (G_FACESELECT + G_VERTEXPAINT + G_TEXTUREPAINT +G_WEIGHTPAINT)) { else if(G.f & (G_VERTEXPAINT + G_TEXTUREPAINT +G_WEIGHTPAINT)) {
; ;
} }
else { else {

@ -290,7 +290,14 @@ void unwrap_lscm(short seamcut)
short abf = G.scene->toolsettings->unwrapper == 1; short abf = G.scene->toolsettings->unwrapper == 1;
short fillholes = G.scene->toolsettings->uvcalc_flag & 1; short fillholes = G.scene->toolsettings->uvcalc_flag & 1;
if(!EM_texFaceCheck()) return; /* add uvs if there not here */
if (!EM_texFaceCheck()) {
if (em && em->faces.first)
EM_add_data_layer(&em->fdata, CD_MTFACE);
if (!EM_texFaceCheck())
return;
}
handle = construct_param_handle(em, 0, fillholes, seamcut == 0); handle = construct_param_handle(em, 0, fillholes, seamcut == 0);

@ -1398,7 +1398,7 @@ void centerview() /* like a localview without local! */
} }
} }
} }
else if (G.f & G_FACESELECT) { else if (FACESEL_PAINT_TEST) {
ok= minmax_tface(min, max); ok= minmax_tface(min, max);
} }
else { else {