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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs