[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14243] trunk/blender/source/blender: UV Unwrap (lscm, project from view, cube etc) now default to correcting for the active images aspect ratio.

Campbell Barton ideasman42 at gmail.com
Wed Mar 26 15:51:01 CET 2008


Revision: 14243
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14243
Author:   campbellbarton
Date:     2008-03-26 15:50:29 +0100 (Wed, 26 Mar 2008)

Log Message:
-----------
UV Unwrap (lscm, project from view, cube etc) now default to correcting for the active images aspect ratio.
This is now default but can be disabled in the UV Calculation panel. At the moment its called "Image Aspect" but another name could be better.

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/include/BIF_drawimage.h
    trunk/blender/source/blender/include/BIF_editsima.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/drawimage.c
    trunk/blender/source/blender/src/editface.c
    trunk/blender/source/blender/src/editsima.c
    trunk/blender/source/blender/src/parametrizer.c
    trunk/blender/source/blender/src/parametrizer.h
    trunk/blender/source/blender/src/unwrapper.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2008-03-26 14:50:29 UTC (rev 14243)
@@ -6438,7 +6438,7 @@
 				sce->toolsettings->uvcalc_cubesize = 1.0f;
 				sce->toolsettings->uvcalc_mapdir = 1;
 				sce->toolsettings->uvcalc_mapalign = 1;
-				sce->toolsettings->uvcalc_flag = 1;
+				sce->toolsettings->uvcalc_flag = UVCALC_FILLHOLES;
 				sce->toolsettings->unwrapper = 1;
 			}
 

Modified: trunk/blender/source/blender/include/BIF_drawimage.h
===================================================================
--- trunk/blender/source/blender/include/BIF_drawimage.h	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/include/BIF_drawimage.h	2008-03-26 14:50:29 UTC (rev 14243)
@@ -44,7 +44,6 @@
 void do_imagebuts(unsigned short event);
 void calc_image_view(struct SpaceImage *sima, char mode);
 void drawimagespace(struct ScrArea *sa, void *spacedata);
-void image_changed(struct SpaceImage *sima, struct Image *image);
 int draw_uvs_face_check(void);
 void uv_center(float uv[][2], float cent[2], void * isquad);
 void draw_uvs_sima(void);

Modified: trunk/blender/source/blender/include/BIF_editsima.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editsima.h	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/include/BIF_editsima.h	2008-03-26 14:50:29 UTC (rev 14243)
@@ -42,6 +42,8 @@
 
 struct Object;
 
+void image_changed(struct SpaceImage *sima, struct Image *image);
+
 void object_uvs_changed(struct Object *ob);
 void object_tface_flags_changed(struct Object *ob, int updateButtons);
 

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2008-03-26 14:50:29 UTC (rev 14243)
@@ -776,6 +776,10 @@
 #define IMAGEPAINT_DRAW_TOOL			2
 #define IMAGEPAINT_DRAW_TOOL_DRAWING	4
 
+/* toolsettings->uvcalc_flag */
+#define UVCALC_FILLHOLES			1
+#define UVCALC_NO_ASPECT_CORRECT	2	/* would call this UVCALC_ASPECT_CORRECT, except it should be default with old file */
+
 /* toolsettings->particle flag */
 #define PE_KEEP_LENGTHS			1
 #define PE_LOCK_FIRST			2

Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/src/buttons_editing.c	2008-03-26 14:50:29 UTC (rev 14243)
@@ -6232,12 +6232,14 @@
 
 	uiBlockBeginAlign(block);
 	uiDefButS(block, MENU, REDRAWBUTSEDIT, "Unwrapper%t|Conformal%x0|Angle Based%x1",100,row,200,butH, &G.scene->toolsettings->unwrapper, 0, 0, 0, 0, "Unwrap method");
-	uiDefButBitS(block, TOG, 1, B_NOP, "Fill Holes",100,row-butHB,200,butH,&G.scene->toolsettings->uvcalc_flag, 0, 0, 0, 0,  "Fill holes to prevent internal overlaps");
+	uiDefButBitS(block, TOG, UVCALC_FILLHOLES, B_NOP, "Fill Holes",100,row-butHB,200,butH,&G.scene->toolsettings->uvcalc_flag, 0, 0, 0, 0,  "Fill holes to prevent internal overlaps");
 	uiBlockEndAlign(block);
 	row-= 2*butHB+butS;
 
 	row= 180;
 
+	uiDefButBitS(block, TOGN, UVCALC_NO_ASPECT_CORRECT, B_NOP, "Image Aspect",100,row,200,butH,&G.scene->toolsettings->uvcalc_flag, 0, 0, 0, 0,  "Scale the UV Unwrapping to correct for the current images aspect ratio");
+	
 	uiBlockBeginAlign(block);
 	uiDefButF(block, NUM,B_UVAUTO_CUBESIZE ,"Cube Size:",315,row,200,butH, &G.scene->toolsettings->uvcalc_cubesize, 0.0001, 100.0, 10, 3, "Defines the cubemap size for cube mapping");
 	uiBlockEndAlign(block);

Modified: trunk/blender/source/blender/src/drawimage.c
===================================================================
--- trunk/blender/source/blender/src/drawimage.c	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/src/drawimage.c	2008-03-26 14:50:29 UTC (rev 14243)
@@ -290,80 +290,6 @@
 	return NULL;
 }
 
-extern int EM_texFaceCheck(void); /* from editmesh.c */
-/* called to assign images to UV faces */
-void image_changed(SpaceImage *sima, Image *image)
-{
-	MTFace *tface;
-	EditMesh *em = G.editMesh;
-	EditFace *efa;
-	ImBuf *ibuf = NULL;
-	short change = 0;
-	
-	if(image==NULL) {
-		sima->flag &= ~SI_DRAWTOOL;
-	} else {
-		ibuf = BKE_image_get_ibuf(image, NULL);
-	}
-	
-	if(sima->mode!=SI_TEXTURE)
-		return;
-	
-	/* skip assigning these procedural images... */
-	if(image && (image->type==IMA_TYPE_R_RESULT || image->type==IMA_TYPE_COMPOSITE)) {
-		return;
-	} else if ((G.obedit) &&
-			(G.obedit->type == OB_MESH) &&
-			(G.editMesh) &&
-			(G.editMesh->faces.first)
-		) {
-		
-		/* Add a UV layer if there is none, editmode only */
-		if ( !CustomData_has_layer(&G.editMesh->fdata, CD_MTFACE) ) {
-			EM_add_data_layer(&em->fdata, CD_MTFACE);
-			CustomData_set_layer_active(&em->fdata, CD_MTFACE, 0); /* always zero because we have no other UV layers */
-			change = 1; /* so we update the object, incase no faces are selected */
-			
-			/* BIF_undo_push("New UV Texture"); - undo should be done by whatever changes the image */
-			allqueue(REDRAWVIEW3D, 0);
-			allqueue(REDRAWBUTSEDIT, 0);
-		}
-		
-		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);
-					
-					if (tface->transp==TF_ADD) {} /* they obviously know what they are doing! - leave as is */
-					else if (ibuf && ibuf->depth == 32)	tface->transp = TF_ALPHA;
-					else								tface->transp = TF_SOLID;
-					
-				} else {
-					tface->tpage= NULL;
-					tface->mode &= ~TF_TEX;
-					tface->transp = TF_SOLID;
-				}
-				change = 1;
-			}
-		}
-	}
-	/* change the space image after because simaFaceDraw_Check uses the space image
-	 * to check if the face is displayed in UV-localview */
-	sima->image = image;
-	
-	if (change)
-		object_uvs_changed(OBACT);
-	
-	allqueue(REDRAWBUTSEDIT, 0);
-}
 /*
  * dotile -	1, set the tile flag (from the space image)
  * 			2, set the tile index for the faces. 

Modified: trunk/blender/source/blender/src/editface.c
===================================================================
--- trunk/blender/source/blender/src/editface.c	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/src/editface.c	2008-03-26 14:50:29 UTC (rev 14243)
@@ -83,6 +83,7 @@
 #include "BIF_gl.h"
 #include "BIF_graphics.h"
 #include "BIF_space.h"	/* for allqueue */
+#include "BIF_drawimage.h"	/* for allqueue */
 
 #include "BDR_drawmesh.h"
 #include "BDR_editface.h"
@@ -338,6 +339,48 @@
 	}
 }
 
+void correct_uv_aspect( void )
+{
+	float aspx, aspy;
+	
+	transform_aspect_ratio_tface_uv(&aspx, &aspy);
+	
+	if (aspx != aspy) {
+		MTFace *tface;
+		EditMesh *em = G.editMesh;
+		EditFace *efa;
+		float scale;
+		
+		if (aspx > aspy) {
+			scale = aspy/aspx;
+			for (efa= em->faces.first; efa; efa= efa->next) {
+				if (efa->f & SELECT) {
+					tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+					tface->uv[0][0] = ((tface->uv[0][0]-0.5)*scale)+0.5;
+					tface->uv[1][0] = ((tface->uv[1][0]-0.5)*scale)+0.5;
+					tface->uv[2][0] = ((tface->uv[2][0]-0.5)*scale)+0.5;
+					if(efa->v4) {
+						tface->uv[3][0] = ((tface->uv[3][0]-0.5)*scale)+0.5;
+					}
+				}
+			}
+		} else {
+			scale = aspx/aspy;
+			for (efa= em->faces.first; efa; efa= efa->next) {
+				if (efa->f & SELECT) {
+					tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+					tface->uv[0][1] = ((tface->uv[0][1]-0.5)*scale)+0.5;
+					tface->uv[1][1] = ((tface->uv[1][1]-0.5)*scale)+0.5;
+					tface->uv[2][1] = ((tface->uv[2][1]-0.5)*scale)+0.5;
+					if(efa->v4) {
+						tface->uv[3][1] = ((tface->uv[3][1]-0.5)*scale)+0.5;
+					}
+				}
+			}
+		}
+	}
+}
+
 void calculate_uv_map(unsigned short mapmode)
 {
 	MTFace *tface;
@@ -555,6 +598,13 @@
 		}
 	}
 
+	if (	(mapmode!=B_UVAUTO_BOUNDS) &&
+			(mapmode!=B_UVAUTO_RESET) &&
+			(G.scene->toolsettings->uvcalc_flag & UVCALC_NO_ASPECT_CORRECT)==0
+		) {
+		correct_uv_aspect();
+	}
+	
 	BIF_undo_push("UV calculation");
 
 	object_uvs_changed(OBACT);

Modified: trunk/blender/source/blender/src/editsima.c
===================================================================
--- trunk/blender/source/blender/src/editsima.c	2008-03-26 11:56:41 UTC (rev 14242)
+++ trunk/blender/source/blender/src/editsima.c	2008-03-26 14:50:29 UTC (rev 14243)
@@ -2632,6 +2632,81 @@
 	}
 }
 
+extern int EM_texFaceCheck(void); /* from editmesh.c */
+/* called to assign images to UV faces */
+void image_changed(SpaceImage *sima, Image *image)
+{
+	MTFace *tface;
+	EditMesh *em = G.editMesh;
+	EditFace *efa;
+	ImBuf *ibuf = NULL;
+	short change = 0;
+	
+	if(image==NULL) {
+		sima->flag &= ~SI_DRAWTOOL;
+	} else {
+		ibuf = BKE_image_get_ibuf(image, NULL);
+	}
+	
+	if(sima->mode!=SI_TEXTURE)
+		return;
+	
+	/* skip assigning these procedural images... */
+	if(image && (image->type==IMA_TYPE_R_RESULT || image->type==IMA_TYPE_COMPOSITE)) {
+		return;
+	} else if ((G.obedit) &&
+			(G.obedit->type == OB_MESH) &&
+			(G.editMesh) &&
+			(G.editMesh->faces.first)
+		) {
+		
+		/* Add a UV layer if there is none, editmode only */
+		if ( !CustomData_has_layer(&G.editMesh->fdata, CD_MTFACE) ) {
+			EM_add_data_layer(&em->fdata, CD_MTFACE);
+			CustomData_set_layer_active(&em->fdata, CD_MTFACE, 0); /* always zero because we have no other UV layers */
+			change = 1; /* so we update the object, incase no faces are selected */
+			
+			/* BIF_undo_push("New UV Texture"); - undo should be done by whatever changes the image */
+			allqueue(REDRAWVIEW3D, 0);
+			allqueue(REDRAWBUTSEDIT, 0);
+		}
+		
+		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;
+					

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list