added lasso selection for UV coords

This commit is contained in:
Campbell Barton 2007-09-23 13:00:35 +00:00
parent 3e40c994bb
commit 5f64888137

@ -76,6 +76,7 @@
#include "BKE_utildefines.h"
#include "BKE_customdata.h"
#include "BIF_drawimage.h"
#include "BIF_butspace.h"
#include "BIF_editaction.h"
#include "BIF_editarmature.h"
@ -468,6 +469,42 @@ static void do_lasso_select_mesh(short mcords[][2], short moves, short select)
EM_selectmode_flush();
}
/* this is an exception in that its the only lasso that dosnt use the 3d view (uses space image view) */
static void do_lasso_select_mesh_uv(short mcords[][2], short moves, short select)
{
EditMesh *em = G.editMesh;
EditFace *efa;
MTFace *tf;
int screenUV[2], nverts, i;
rcti rect;
lasso_select_boundbox(&rect, mcords, moves);
for (efa= em->faces.first; efa; efa= efa->next) {
tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
if (SIMA_FACEDRAW_CHECK(efa, tf)) {
nverts= efa->v4? 4: 3;
for(i=0; i<nverts; i++) {
if ((select) != (SIMA_UVSEL_CHECK(efa, tf, i))) {
uvco_to_areaco_noclip(tf->uv[i], screenUV);
if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && lasso_inside(mcords, moves, screenUV[0], screenUV[1])) {
if (select) {
SIMA_UVSEL_SET(efa, tf, i);
} else {
SIMA_UVSEL_UNSET(efa, tf, i);
}
}
}
}
}
}
if (G.sima->flag & SI_SYNC_UVSEL) {
if (select) EM_select_flush();
else EM_deselect_flush();
}
}
static void do_lasso_select_curve__doSelect(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y)
{
struct { short (*mcords)[2]; short moves; short select; } *data = userData;
@ -582,9 +619,13 @@ static void do_lasso_select(short mcords[][2], short moves, short select)
else
do_lasso_select_objects(mcords, moves, select);
}
else if(G.obedit->type==OB_MESH)
do_lasso_select_mesh(mcords, moves, select);
else if(G.obedit->type==OB_CURVE || G.obedit->type==OB_SURF)
else if(G.obedit->type==OB_MESH) {
if(curarea->spacetype==SPACE_VIEW3D) {
do_lasso_select_mesh(mcords, moves, select);
} else if (EM_texFaceCheck()){
do_lasso_select_mesh_uv(mcords, moves, select);
}
} else if(G.obedit->type==OB_CURVE || G.obedit->type==OB_SURF)
do_lasso_select_curve(mcords, moves, select);
else if(G.obedit->type==OB_LATTICE)
do_lasso_select_lattice(mcords, moves, select);
@ -752,6 +793,10 @@ int gesture(void)
if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT)) return 0;
}
lasso= 1;
} else if (curarea->spacetype==SPACE_IMAGE) {
if(G.obedit) {
lasso= 1;
}
}
}