uv editor: don't draw active face stipple when the face isn't visible (error from bmesh merge), also replace 'em->bm' with 'bm' var while drawing.

This commit is contained in:
Campbell Barton 2012-04-10 00:22:26 +00:00
parent 95654de53d
commit cb6ab1df5e

@ -126,21 +126,20 @@ static int draw_uvs_face_check(Scene *scene)
static void draw_uvs_shadow(Object *obedit)
{
BMEditMesh *em;
BMEditMesh *em = BMEdit_FromObject(obedit);
BMesh *bm = em->bm;
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
MLoopUV *luv;
em = BMEdit_FromObject(obedit);
/* draws the grey mesh when painting */
glColor3ub(112, 112, 112);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv= CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv= CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
@ -163,6 +162,7 @@ static int draw_uvs_dm_shadow(DerivedMesh *dm)
static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTexPoly *activetf)
{
BMesh *bm = em->bm;
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
@ -181,8 +181,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
{
float totarea=0.0f, totuvarea=0.0f, areadiff, uvarea, area;
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
BLI_array_empty(tf_uv);
BLI_array_empty(tf_uvorig);
@ -190,8 +190,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
BLI_array_growitems(tf_uvorig, efa->len);
i = 0;
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv= CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv= CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
copy_v2_v2(tf_uvorig[i], luv->uv);
@ -200,7 +200,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, efa->len);
totarea += BM_face_area_calc(em->bm, efa);
totarea += BM_face_area_calc(bm, efa);
//totuvarea += tf_area(tf, efa->v4!=0);
totuvarea += poly_uv_area(tf_uv, efa->len);
@ -218,11 +218,11 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
col[0] = 1.0;
col[1] = col[2] = 0.0;
glColor3fv(col);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (BM_elem_flag_test(efa, BM_ELEM_TAG)) {
glBegin(GL_POLYGON);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -230,9 +230,9 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
}
}
else {
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (BM_elem_flag_test(efa, BM_ELEM_TAG)) {
area = BM_face_area_calc(em->bm, efa) / totarea;
area = BM_face_area_calc(bm, efa) / totarea;
BLI_array_empty(tf_uv);
BLI_array_empty(tf_uvorig);
@ -240,8 +240,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
BLI_array_growitems(tf_uvorig, efa->len);
i = 0;
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv= CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv= CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
copy_v2_v2(tf_uvorig[i], luv->uv);
@ -264,8 +264,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
glColor3fv(col);
glBegin(GL_POLYGON);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -291,8 +291,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
glShadeModel(GL_SMOOTH);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
if (uvedit_face_visible(scene, ima, efa, tf)) {
nverts = efa->len;
@ -310,15 +310,15 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
BLI_array_growitems(av, nverts);
BLI_array_growitems(auv, nverts);
BM_ITER_INDEX(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa, i) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER_INDEX(l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
copy_v2_v2(tf_uvorig[i], luv->uv);
}
poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, nverts);
j = nverts - 1;
BM_ITER_INDEX(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa, i) {
BM_ITER_INDEX(l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) {
sub_v2_v2v2(auv[i], tf_uv[j], tf_uv[i]); normalize_v2(auv[i]);
sub_v3_v3v3(av[i], l->prev->v->co, l->v->co); normalize_v3(av[i]);
j = i;
@ -336,8 +336,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
}
glBegin(GL_POLYGON);
BM_ITER_INDEX(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa, i) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER_INDEX(l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
a = fabsf(uvang[i]-ang[i])/(float)M_PI;
weight_to_rgb(col, 1.0f-powf((1.0f-a), 2.0f));
glColor3fv(col);
@ -439,8 +439,9 @@ static void draw_uvs_texpaint(SpaceImage *sima, Scene *scene, Object *ob)
static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
{
ToolSettings *ts;
Mesh *me= obedit->data;
BMEditMesh *em;
Mesh *me = obedit->data;
BMEditMesh *em = me->edit_btmesh;
BMesh *bm = em->bm;
BMFace *efa, *efa_act, *activef;
BMLoop *l;
BMIter iter, liter;
@ -454,9 +455,8 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
StitchPreviewer *stitch_preview = uv_get_stitch_previewer();
em= me->edit_btmesh;
activetf= EDBM_mtexpoly_active_get(em, &efa_act, FALSE); /* will be set to NULL if hidden */
activef = BM_active_face_get(em->bm, FALSE);
activef = BM_active_face_get(bm, FALSE);
ts= scene->toolsettings;
drawfaces= draw_uvs_face_check(scene);
@ -503,8 +503,8 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
if (uvedit_face_visible(scene, ima, efa, tf)) {
BM_elem_flag_enable(efa, BM_ELEM_TAG);
@ -516,8 +516,8 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
glColor4ubv((GLubyte *)col1);
glBegin(GL_POLYGON);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -533,8 +533,8 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
else {
/* would be nice to do this within a draw loop but most below are optional, so it would involve too many checks */
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
tf= CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
if (uvedit_face_visible(scene, ima, efa, tf)) {
BM_elem_flag_enable(efa, BM_ELEM_TAG);
@ -551,22 +551,25 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
/* 3. draw active face stippled */
if (activef) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
UI_ThemeColor4(TH_EDITMESH_ACTIVE);
tf = CustomData_bmesh_get(&bm->pdata, activef->head.data, CD_MTEXPOLY);
if (uvedit_face_visible(scene, ima, activef, tf)) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
UI_ThemeColor4(TH_EDITMESH_ACTIVE);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(stipple_quarttone);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(stipple_quarttone);
glBegin(GL_POLYGON);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, activef) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
glBegin(GL_POLYGON);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, activef) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
glDisable(GL_POLYGON_STIPPLE);
glDisable(GL_BLEND);
}
glEnd();
glDisable(GL_POLYGON_STIPPLE);
glDisable(GL_BLEND);
}
/* 4. draw edges */
@ -579,17 +582,17 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
switch(sima->dt_uv) {
case SI_UVDT_DASH:
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
if (tf) {
cpack(0x111111);
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -598,17 +601,17 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
cpack(0x909090);
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
#if 0
glBegin(GL_LINE_STRIP);
luv = CustomData_bmesh_get(&em->bm->ldata, efa->lbase->head.data, CD_MLOOPUV);
luv = CustomData_bmesh_get(&bm->ldata, efa->lbase->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
luv = CustomData_bmesh_get(&em->bm->ldata, efa->lbase->next->head.data, CD_MLOOPUV);
luv = CustomData_bmesh_get(&bm->ldata, efa->lbase->next->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
glEnd();
#endif
@ -622,13 +625,13 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
if (sima->dt_uv==SI_UVDT_WHITE) glColor3f(1.0f, 1.0f, 1.0f);
else glColor3f(0.0f, 0.0f, 0.0f);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -638,13 +641,13 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
glLineWidth(3);
cpack(0x0);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -661,16 +664,16 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
if (interpedges) {
glShadeModel(GL_SMOOTH);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
sel = (uvedit_uv_selected(em, scene, l)? 1 : 0);
glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2);
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -679,20 +682,20 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
glShadeModel(GL_FLAT);
}
else {
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
glBegin(GL_LINES);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
sel = (uvedit_edge_selected(em, scene, l)? 1 : 0);
if (sel != lastsel) {
glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2);
lastsel = sel;
}
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
luv = CustomData_bmesh_get(&em->bm->ldata, l->next->head.data, CD_MLOOPUV);
luv = CustomData_bmesh_get(&bm->ldata, l->next->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -701,13 +704,13 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
}
else {
/* no nice edges */
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
glBegin(GL_LINE_LOOP);
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
glVertex2fv(luv->uv);
}
glEnd();
@ -734,7 +737,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
UI_ThemeColor(TH_WIRE);
bglBegin(GL_POINTS);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
@ -749,7 +752,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
UI_ThemeColor(TH_FACE_DOT);
bglBegin(GL_POINTS);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
@ -770,12 +773,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
glPointSize(pointsize);
bglBegin(GL_POINTS);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
if (!uvedit_uv_selected(em, scene, l))
bglVertex2fv(luv->uv);
}
@ -788,12 +791,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
cpack(0xFF);
bglBegin(GL_POINTS);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
if (luv->flag & MLOOPUV_PINNED)
bglVertex2fv(luv->uv);
@ -806,12 +809,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
glPointSize(pointsize);
bglBegin(GL_POINTS);
BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV);
if (uvedit_uv_selected(em, scene, l))
bglVertex2fv(luv->uv);