[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45494] trunk/blender/source/blender/ editors/uvedit/uvedit_draw.c: 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.
Campbell Barton
ideasman42 at gmail.com
Tue Apr 10 02:22:28 CEST 2012
Revision: 45494
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45494
Author: campbellbarton
Date: 2012-04-10 00:22:26 +0000 (Tue, 10 Apr 2012)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/editors/uvedit/uvedit_draw.c
Modified: trunk/blender/source/blender/editors/uvedit/uvedit_draw.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_draw.c 2012-04-10 00:09:54 UTC (rev 45493)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_draw.c 2012-04-10 00:22:26 UTC (rev 45494)
@@ -126,21 +126,20 @@
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 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 @@
{
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 @@
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 @@
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 @@
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 @@
}
}
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 @@
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 @@
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 @@
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 @@
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 @@
}
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(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 @@
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 @@
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 @@
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 @@
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 @@
/* 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 @@
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 @@
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);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list