[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12092] trunk/blender/source/blender: Local Image View for UV/Editmode

Campbell Barton cbarton at metavr.com
Wed Sep 19 12:54:49 CEST 2007


Revision: 12092
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12092
Author:   campbellbarton
Date:     2007-09-19 12:54:49 +0200 (Wed, 19 Sep 2007)

Log Message:
-----------
Local Image View for UV/Editmode

When mapping multiple images on 1 mesh, the UV coordinates often overlap and in many cases you only want to edit the uv coords for the faces applied to that image,
this is an option that only displays UV's for faces use the currently displayed image.

Modified Paths:
--------------
    trunk/blender/source/blender/include/BIF_drawimage.h
    trunk/blender/source/blender/include/BIF_editsima.h
    trunk/blender/source/blender/include/blendef.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/src/drawimage.c
    trunk/blender/source/blender/src/editsima.c
    trunk/blender/source/blender/src/header_image.c
    trunk/blender/source/blender/src/headerbuttons.c
    trunk/blender/source/blender/src/space.c
    trunk/blender/source/blender/src/transform_conversions.c

Modified: trunk/blender/source/blender/include/BIF_drawimage.h
===================================================================
--- trunk/blender/source/blender/include/BIF_drawimage.h	2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/include/BIF_drawimage.h	2007-09-19 10:54:49 UTC (rev 12092)
@@ -44,7 +44,8 @@
 void calc_image_view(struct SpaceImage *sima, char mode);
 void drawimagespace(struct ScrArea *sa, void *spacedata);
 void draw_tfaces(void);
-void image_changed(struct SpaceImage *sima, int dotile);
+void image_changed(struct SpaceImage *sima, struct Image *image);
+void image_set_tile(struct SpaceImage *sima, int dotile);
 void image_home(void);
 void image_viewmove(int mode);
 void image_viewzoom(unsigned short event, int invert);

Modified: trunk/blender/source/blender/include/BIF_editsima.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editsima.h	2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/include/BIF_editsima.h	2007-09-19 10:54:49 UTC (rev 12092)
@@ -37,9 +37,15 @@
 #define TF_PIN_MASK(id) (TF_PIN1 << id)
 #define TF_SEL_MASK(id) (TF_SEL1 << id)
 
+  
+/* this checks weather a face is drarn without the local image check */
+#define SIMA_FACEDRAW_CHECK_NOLOCAL(efa) \
+	((G.sima->flag & SI_SYNC_UVSEL) ? (efa->h==0) : (efa->h==0 && efa->f & SELECT))
 
-#define SIMA_FACEDRAW_CHECK(efa) \
-	((G.sima->flag & SI_SYNC_UVSEL) ? (efa->h==0) : (efa->h==0 && efa->f & SELECT))
+/* this check includes the local image check - (does the faces image match the space image?) */
+#define SIMA_FACEDRAW_CHECK(efa, tf) \
+	((G.sima->flag & SI_LOCAL_UV) ? ((tf->tpage==G.sima->image) ? SIMA_FACEDRAW_CHECK_NOLOCAL(efa):0) : (SIMA_FACEDRAW_CHECK_NOLOCAL(efa)))
+
 #define SIMA_FACESEL_CHECK(efa, tf) \
 	((G.sima->flag & SI_SYNC_UVSEL) ? (efa->f & SELECT) : (!(~tf->flag & (TF_SEL1|TF_SEL2|TF_SEL3)) &&(!efa->v4 || tf->flag & TF_SEL4)))
 #define SIMA_FACESEL_SET(efa, tf) \

Modified: trunk/blender/source/blender/include/blendef.h
===================================================================
--- trunk/blender/source/blender/include/blendef.h	2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/include/blendef.h	2007-09-19 10:54:49 UTC (rev 12092)
@@ -303,9 +303,9 @@
 #define B_SIMAGEHOME		351
 #define B_SIMABROWSE		352
 #define B_SIMAGELOAD		353
-#define B_SIMAGEDRAW		354
-#define B_BE_SQUARE			355
-#define B_SIMAGEDRAW1		356
+#define B_SIMAGETILE1		354
+#define B_SIMAGETILE2		355
+#define B_BE_SQUARE			356
 #define B_TWINANIM			357
 #define B_SIMAGEREPLACE		358
 #define B_CLIP_UV			359
@@ -337,7 +337,9 @@
 #define B_SIMA_PLAY			386
 #define B_SIMA_RECORD		387
 #define B_SIMAPIN			388
+#define B_SIMA3DVIEWDRAW	389
 
+
 /* BUTS: 400 */
 #define B_BUTSHOME			401
 #define B_BUTSPREVIEW		402

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2007-09-19 10:54:49 UTC (rev 12092)
@@ -480,6 +480,7 @@
 #define SI_PREVSPACE	1<<15
 #define SI_FULLWINDOW	1<<16
 #define SI_SYNC_UVSEL	1<<17
+#define SI_LOCAL_UV		1<<18
 
 /* SpaceText flags (moved from DNA_text_types.h) */
 

Modified: trunk/blender/source/blender/src/drawimage.c
===================================================================
--- trunk/blender/source/blender/src/drawimage.c	2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/src/drawimage.c	2007-09-19 10:54:49 UTC (rev 12092)
@@ -286,57 +286,78 @@
 
 extern int EM_texFaceCheck(void); /* from editmesh.c */
 /* called to assign images to UV faces */
-void image_changed(SpaceImage *sima, int dotile)
+void image_changed(SpaceImage *sima, Image *image)
 {
 	MTFace *tface;
 	EditMesh *em = G.editMesh;
 	EditFace *efa;
 
-	if(sima->image==NULL)
+	if(image==NULL)
 		sima->flag &= ~SI_DRAWTOOL;
 	
 	if(sima->mode!=SI_TEXTURE || !EM_texFaceCheck())
 		return;
 		
 	/* skip assigning these procedural images... */
-	if(sima->image) {
-		if(sima->image->type==IMA_TYPE_R_RESULT)
-			return;
-		if(sima->image->type==IMA_TYPE_COMPOSITE)
-			return;
+	if(image && (image->type==IMA_TYPE_R_RESULT || image->type==IMA_TYPE_COMPOSITE))
+		return;
+
+	for (efa= em->faces.first; efa; efa= efa->next) {
+		tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (efa->h==0 && efa->f & SELECT) {
+			if (image) {
+				tface->tpage= image;
+				tface->mode |= TF_TEX;
+				
+				if(image->tpageflag & IMA_TILES) tface->mode |= TF_TILES;
+				else tface->mode &= ~TF_TILES;
+				
+				if(image->id.us==0) id_us_plus(&image->id);
+				else id_lib_extern(&image->id);
+			} else {
+				tface->tpage= NULL;
+				tface->mode &= ~TF_TEX;
+			}
+		}
 	}
+	/* change the space image after because SIMA_FACEDRAW_CHECK uses the space image
+	 * to check if the face is displayed in UV-localview */
+	sima->image = image;
+	
+	object_uvs_changed(OBACT);
+	allqueue(REDRAWBUTSEDIT, 0);
+}
 
+void image_set_tile(SpaceImage *sima, int dotile)
+{
+	MTFace *tface;
+	EditMesh *em = G.editMesh;
+	EditFace *efa;
+	
+	if(sima->mode!=SI_TEXTURE || !EM_texFaceCheck())
+		return;
+	
+	/* skip assigning these procedural images... */
+	if(sima->image && (sima->image->type==IMA_TYPE_R_RESULT || sima->image->type==IMA_TYPE_COMPOSITE))
+		return;
+	
 	for (efa= em->faces.first; efa; efa= efa->next) {
-		/*if (efa->f & SELECT) {*/
-		if (SIMA_FACEDRAW_CHECK(efa)) {
-			tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-		
+		tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 			if(dotile==2) {
 				tface->mode &= ~TF_TILES;
-			} else {
-				if (sima->image) {
-					tface->tpage= sima->image;
-					tface->mode |= TF_TEX;
-					
-					if(sima->image->tpageflag & IMA_TILES) tface->mode |= TF_TILES;
-					else tface->mode &= ~TF_TILES;
-					
-					if(sima->image->id.us==0) id_us_plus(&sima->image->id);
-					else id_lib_extern(&sima->image->id);
-				} else {
-					tface->tpage= NULL;
-					tface->mode &= ~TF_TEX;
-				}
-			
-				if(dotile) tface->tile= sima->curtile;
+			} else if (dotile) {
+				tface->tile= sima->curtile;
 			}
 		}
 	}
+	
 	object_uvs_changed(OBACT);
 	allqueue(REDRAWBUTSEDIT, 0);
 }
 
 
+
 void uvco_to_areaco(float *vec, short *mval)
 {
 	float x, y;
@@ -448,10 +469,8 @@
 		if (G.obedit) {		
 			glColor3ub(112, 112, 112);
 			for (efa= em->faces.first; efa; efa= efa->next) {
-				/*if(!(mface->flag & ME_HIDE) && (mface->flag & ME_FACE_SEL)) {*/
-				/*if(!(efa->flag & ME_HIDE) && (efa->f & SELECT)) {*/
-				if (SIMA_FACEDRAW_CHECK(efa)) {
-					tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+				tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+				if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 					glBegin(GL_LINE_LOOP);
 					glVertex2fv(tface->uv[0]);
 					glVertex2fv(tface->uv[1]);
@@ -474,9 +493,8 @@
 		glEnable(GL_BLEND);
 		
 		for (efa= em->faces.first; efa; efa= efa->next) {
-			/*if(efa->f & SELECT) {*/
-			if (SIMA_FACEDRAW_CHECK(efa)) {
-				tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+			tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+			if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 				if( SIMA_FACESEL_CHECK(efa, tface) )
 					glColor4ubv((GLubyte *)col2);
 				else
@@ -494,10 +512,8 @@
 	}
 	
 	for (efa= em->faces.first; efa; efa= efa->next) {
-		/*if (efa->f & SELECT) {*/
-		if (SIMA_FACEDRAW_CHECK(efa)) {
-			tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-			
+		tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 			cpack(0x0);
 			glBegin(GL_LINE_LOOP);
 				glVertex2fv(tface->uv[0]);
@@ -529,14 +545,12 @@
 	}
 
 	/* draw active face edges */
-	/*if (activetface){*/
 		/* colors: R=u G=v */
 	activetface = get_active_mtface(&efa, NULL, 0);
 	if (activetface) {
 		setlinestyle(2);
-		tface=activetface; 
-		/*mface=activemface;*/ 
-
+		tface=activetface;
+		
 		cpack(0x0);
 		glBegin(GL_LINE_LOOP);
 		glVertex2fv(tface->uv[0]);
@@ -574,9 +588,8 @@
 
 	bglBegin(GL_POINTS);
 	for (efa= em->faces.first; efa; efa= efa->next) {
-		/*if (efa->f & SELECT) {*/
-		if (SIMA_FACEDRAW_CHECK(efa)) {
-			tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 			if(SIMA_UVSEL_CHECK(efa, tface, 0)); else bglVertex2fv(tface->uv[0]);
 			if(SIMA_UVSEL_CHECK(efa, tface, 1)); else bglVertex2fv(tface->uv[1]);
 			if(SIMA_UVSEL_CHECK(efa, tface, 2)); else bglVertex2fv(tface->uv[2]);
@@ -594,9 +607,8 @@
 
 	bglBegin(GL_POINTS);
 	for (efa= em->faces.first; efa; efa= efa->next) {
-		/*if (efa->f & SELECT) {*/
-		if (SIMA_FACEDRAW_CHECK(efa)) {
-			tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 			if(tface->unwrap & TF_PIN1) bglVertex2fv(tface->uv[0]);
 			if(tface->unwrap & TF_PIN2) bglVertex2fv(tface->uv[1]);
 			if(tface->unwrap & TF_PIN3) bglVertex2fv(tface->uv[2]);
@@ -613,9 +625,8 @@
 
 	bglBegin(GL_POINTS);
 	for (efa= em->faces.first; efa; efa= efa->next) {
-		/*if (efa->f & SELECT) {*/
-		if (SIMA_FACEDRAW_CHECK(efa)) {
-			tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (SIMA_FACEDRAW_CHECK(efa, tface)) {
 			if(!SIMA_UVSEL_CHECK(efa, tface, 0)); else bglVertex2fv(tface->uv[0]);
 			if(!SIMA_UVSEL_CHECK(efa, tface, 1)); else bglVertex2fv(tface->uv[1]);
 			if(!SIMA_UVSEL_CHECK(efa, tface, 2)); else bglVertex2fv(tface->uv[2]);
@@ -793,9 +804,8 @@
 	image_transform_but_attr(&imx, &imy, &step, &digits);
 	
 	for (efa= em->faces.first; efa; efa= efa->next) {
-		/*if ((efa->f & SELECT)) { */
-		if (SIMA_FACEDRAW_CHECK(efa)) {
-			tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+		if (SIMA_FACEDRAW_CHECK(efa, tf)) {
 			
 			if (SIMA_UVSEL_CHECK(efa, tf, 0)) {
 				cent[0]+= tf->uv[0][0];
@@ -858,10 +868,8 @@
 		}
 
 		for (efa= em->faces.first; efa; efa= efa->next) {
-			/*if (!(efa->f & SELECT)) continue;*/
-			if (SIMA_FACEDRAW_CHECK(efa)) {
-				tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-				

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list