[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