Revision: 49633
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49633
Author:   campbellbarton
Date:     2012-08-06 19:28:22 +0000 (Mon, 06 Aug 2012)
Log Message:
-----------
Switching images in the image space would modify UV coordinates.


This is an intended feature but works too unreliably.

- This setting was stored in each face and only editable by re-running the 
unwrap, this is too hidden (only discovered this by reading code).
- This worked with blender internal but not with cycles, such basic options as 
changing an image shouldn't behave different depending on the render engine 
selected.

I've ifdef'd out the aspect correction for now, it could be added back as a per 
scene option and be made to run on both cycles or blender internal but for now 
I prefer to keep this disabled.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c
    trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.h
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    trunk/blender/source/blender/makesdna/DNA_meshdata_types.h

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c    2012-08-06 
19:19:51 UTC (rev 49632)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c    2012-08-06 
19:28:22 UTC (rev 49633)
@@ -165,6 +165,8 @@
 
 /************************* assign image ************************/
 
+//#define USE_SWITCH_ASPECT
+
 void ED_uvedit_assign_image(Main *bmain, Scene *scene, Object *obedit, Image 
*ima, Image *previma)
 {
        BMEditMesh *em;
@@ -196,6 +198,7 @@
        }
        else {
                /* old shading system, assign image to selected faces */
+#ifdef USE_SWITCH_ASPECT
                float prev_aspect[2], fprev_aspect;
                float aspect[2], faspect;
 
@@ -204,6 +207,7 @@
 
                fprev_aspect = prev_aspect[0]/prev_aspect[1];
                faspect = aspect[0]/aspect[1];
+#endif
 
                /* ensure we have a uv map */
                if (!CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) {
@@ -223,8 +227,12 @@
                                        if (ima->id.us == 0) 
id_us_plus(&ima->id);
                                        else id_lib_extern(&ima->id);
 
+#ifdef USE_SWITCH_ASPECT
                                        /* we also need to correct the aspect 
of uvs */
-                                       if (tf->unwrap & TF_CORRECT_ASPECT) {
+                                       if (scene->toolsettings->uvcalc_flag & 
UVCALC_NO_ASPECT_CORRECT) {
+                                               /* do nothing */
+                                       }
+                                       else {
                                                BMIter liter;
                                                BMLoop *l;
 
@@ -235,6 +243,7 @@
                                                        luv->uv[0] /= faspect;
                                                }
                                        }
+#endif
                                }
                                else {
                                        tf->tpage = NULL;

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c   
2012-08-06 19:19:51 UTC (rev 49632)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c   
2012-08-06 19:28:22 UTC (rev 49633)
@@ -145,8 +145,6 @@
 
        struct PEdge *edge;
        unsigned char flag;
-       short *unwrap_flag;
-
 } PFace;
 
 enum PVertFlag {
@@ -236,9 +234,6 @@
        char do_aspect;
 } PHandle;
 
-/* duplicate, to avoid including DNA_mesh_types.h */
-#define TF_CORRECT_ASPECT  256
-
 /* PHash
  * - special purpose hash that keeps all its elements in a single linked list.
  * - after construction, this hash is thrown away, and the list remains.
@@ -650,7 +645,6 @@
 static void p_flush_uvs(PHandle *handle, PChart *chart)
 {
        PEdge *e;
-       PFace *f;
 
        for (e = chart->edges; e; e = e->nextlink) {
                if (e->orig_uv) {
@@ -658,17 +652,6 @@
                        e->orig_uv[1] = e->vert->uv[1] / handle->aspy;
                }
        }
-
-       for (f = chart->faces; f; f = f->nextlink) {
-               if (f->unwrap_flag) {
-                       if (handle->do_aspect) {
-                               *f->unwrap_flag |= TF_CORRECT_ASPECT;
-                       }
-                       else {
-                               *f->unwrap_flag &= ~TF_CORRECT_ASPECT;
-                       }
-               }
-       }
 }
 
 static void p_flush_uvs_blend(PHandle *handle, PChart *chart, float blend)
@@ -1058,7 +1041,6 @@
        /* allocate */
        f = (PFace *)BLI_memarena_alloc(handle->arena, sizeof *f);
        f->flag = 0; // init !
-       f->unwrap_flag = NULL;
 
        e1 = (PEdge *)BLI_memarena_alloc(handle->arena, sizeof *e1);
        e2 = (PEdge *)BLI_memarena_alloc(handle->arena, sizeof *e2);
@@ -1085,7 +1067,7 @@
 
 static PFace *p_face_add_construct(PHandle *handle, ParamKey key, ParamKey 
*vkeys,
                                    float *co[3], float *uv[3], int i1, int i2, 
int i3,
-                                   ParamBool *pin, ParamBool *select, short 
*unwrap_flag)
+                                   ParamBool *pin, ParamBool *select)
 {
        PFace *f = p_face_add(handle);
        PEdge *e1 = f->edge, *e2 = e1->next, *e3 = e2->next;
@@ -1112,7 +1094,6 @@
 
        /* insert into hash */
        f->u.key = key;
-       f->unwrap_flag = unwrap_flag;
        phash_insert(handle->hash_faces, (PHashLink *)f);
 
        e1->u.key = PHASH_edge(vkeys[i1], vkeys[i2]);
@@ -4151,7 +4132,7 @@
 
 void param_face_add(ParamHandle *handle, ParamKey key, int nverts,
                     ParamKey *vkeys, float **co, float **uv,
-                    ParamBool *pin, ParamBool *select, short *unwrap_flag)
+                    ParamBool *pin, ParamBool *select)
 {
        PHandle *phandle = (PHandle *)handle;
 
@@ -4161,16 +4142,16 @@
 
        if (nverts == 4) {
                if (p_quad_split_direction(phandle, co, vkeys)) {
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 
2, pin, select, unwrap_flag);
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 2, 
3, pin, select, unwrap_flag);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 
2, pin, select);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 2, 
3, pin, select);
                }
                else {
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 
3, pin, select, unwrap_flag);
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 1, 2, 
3, pin, select, unwrap_flag);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 
3, pin, select);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, 1, 2, 
3, pin, select);
                }
        }
        else if (!p_face_exists(phandle, vkeys, 0, 1, 2)) {
-               p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 2, pin, 
select, unwrap_flag);
+               p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 2, pin, 
select);
        }
 }
 

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.h
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.h   
2012-08-06 19:19:51 UTC (rev 49632)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.h   
2012-08-06 19:28:22 UTC (rev 49633)
@@ -56,16 +56,16 @@
 void param_aspect_ratio(ParamHandle *handle, float aspx, float aspy);
 
 void param_face_add(ParamHandle *handle,
-                                       ParamKey key,
-                                       int nverts,     
-                                       ParamKey *vkeys,
-                                       float **co,
-                                       float **uv,
-                                       ParamBool *pin,
-                                       ParamBool *select, short *unwrap_flag);
+                    ParamKey key,
+                    int nverts,
+                    ParamKey *vkeys,
+                    float **co,
+                    float **uv,
+                    ParamBool *pin,
+                    ParamBool *select);
 
 void param_edge_set_seam(ParamHandle *handle,
-                                                ParamKey *vkeys);
+                         ParamKey *vkeys);
 
 void param_construct_end(ParamHandle *handle, ParamBool fill, ParamBool impl);
 void param_delete(ParamHandle *chart);

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c     
2012-08-06 19:19:51 UTC (rev 49632)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c     
2012-08-06 19:28:22 UTC (rev 49633)
@@ -213,7 +213,6 @@
        BLI_srand(0);
        
        BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
-               MTexPoly *tf;
                ScanFillVert *sf_vert, *sf_vert_last, *sf_vert_first;
                ScanFillFace *sf_tri;
                ParamKey key, vkeys[4];
@@ -257,7 +256,7 @@
                                i++;
                        }
 
-                       param_face_add(handle, key, i, vkeys, co, uv, pin, 
select, &tf->unwrap);
+                       param_face_add(handle, key, i, vkeys, co, uv, pin, 
select);
                }
                else {
                        /* ngon - scanfill time! */
@@ -302,7 +301,7 @@
                                        select[i] = uvedit_uv_select_test(em, 
scene, ls[i]) != 0;
                                }
 
-                               param_face_add(handle, key, 3, vkeys, co, uv, 
pin, select, &tf->unwrap);
+                               param_face_add(handle, key, 3, vkeys, co, uv, 
pin, select);
                        }
 
                        BLI_scanfill_end(&sf_ctx);
@@ -446,7 +445,6 @@
                float *co[4];
                float *uv[4];
                BMFace *origFace = faceMap[i];
-               MTexPoly *tf;
 
                face = subsurfedFaces + i;
 
@@ -459,8 +457,6 @@
                                continue;
                }
 
-               tf = CustomData_bmesh_get(&em->bm->pdata, origFace->head.data, 
CD_MTEXPOLY);
-
                /* We will not check for v4 here. Subsurfed mfaces always have 
4 vertices. */
                key = (ParamKey)face;
                vkeys[0] = (ParamKey)face->v1;
@@ -480,7 +476,7 @@
                texface_from_original_index(origFace, 
origVertIndices[face->v3], &uv[2], &pin[2], &select[2], scene, em);
                texface_from_original_index(origFace, 
origVertIndices[face->v4], &uv[3], &pin[3], &select[3], scene, em);
 
-               param_face_add(handle, key, 4, vkeys, co, uv, pin, select, 
&tf->unwrap);
+               param_face_add(handle, key, 4, vkeys, co, uv, pin, select);
        }
 
        /* these are calculated from original mesh too */

Modified: trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_meshdata_types.h  2012-08-06 
19:19:51 UTC (rev 49632)
+++ trunk/blender/source/blender/makesdna/DNA_meshdata_types.h  2012-08-06 
19:28:22 UTC (rev 49633)
@@ -95,7 +95,7 @@
 typedef struct MTexPoly {
        struct Image *tpage;
        char flag, transp;
-       short mode, tile, unwrap;
+       short mode, tile, pad;
 } MTexPoly;
 
 /* can copy from/to MTexPoly/MTFace */
@@ -106,8 +106,7 @@
        (dst)->transp = (src)->transp;  \
        (dst)->mode   = (src)->mode;    \
        (dst)->tile   = (src)->tile;    \
-       (dst)->unwrap = (src)->unwrap;  \
-}
+} (void)0
 
 typedef struct MLoopUV {
        float uv[2];
@@ -368,6 +367,5 @@
 #define TF_PIN2                   32
 #define TF_PIN3                       64
 #define TF_PIN4                   128
-#define TF_CORRECT_ASPECT  256
 
 #endif

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to