Revision: 15156
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15156
Author:   campbellbarton
Date:     2008-06-08 04:38:38 +0200 (Sun, 08 Jun 2008)

Log Message:
-----------
edge loop side/del uv only worked with a maximum of 4 faces connected to a vert.
now make a list that can have any number of face/uvs.

Modified Paths:
--------------
    branches/apricot/source/blender/src/editmesh_tools.c

Modified: branches/apricot/source/blender/src/editmesh_tools.c
===================================================================
--- branches/apricot/source/blender/src/editmesh_tools.c        2008-06-08 
01:00:09 UTC (rev 15155)
+++ branches/apricot/source/blender/src/editmesh_tools.c        2008-06-08 
02:38:38 UTC (rev 15156)
@@ -4649,7 +4649,8 @@
 typedef struct SlideUv {
        float origuv[2];
        float *uv_up, *uv_down;
-       float *fuv[4];
+       //float *fuv[4];
+       LinkNode *fuv_list;
 } SlideUv;
 
 typedef struct SlideVert {
@@ -4698,6 +4699,8 @@
        int  uvlay_tot= CustomData_number_of_layers(&G.editMesh->fdata, 
CD_MTFACE);
        int uvlay_idx;
        SlideUv *slideuvs, *suv, *suv_last;     
+       float uv_tmp[2];
+       LinkNode *fuv_link;
        
        short event, draw=1;
        short mval[2], mvalo[2];
@@ -5042,9 +5045,10 @@
                                                        EditVert *ev_up, 
*ev_down;
                                
                                                        if (ev->tmp.l) {
-                                                               if 
(fabs(suv->fuv[0][0]-uv_new[0]) > 0.0001 || fabs(suv->fuv[0][1]-uv_new[1])) {
+                                                               if 
(fabs(suv->origuv[0]-uv_new[0]) > 0.0001 || fabs(suv->origuv[1]-uv_new[1])) {
                                                                        
ev->tmp.l = -1; /* Tag as invalid */
-                                                                       
suv->fuv[0] = suv->fuv[1] = suv->fuv[2] = suv->fuv[3] = NULL;
+                                                                       
BLI_linklist_free(suv->fuv_list,NULL);
+                                                                       
suv->fuv_list = NULL;
                                                                        
BLI_ghash_remove(uvarray[uvlay_idx],ev, NULL, NULL);
                                                                        suv = 
NULL;
                                                                        break;
@@ -5053,9 +5057,12 @@
                                                                ev->tmp.l = 1;
                                                                suv = suv_last;
 
-                                                               suv->fuv[0] = 
suv->fuv[1] = suv->fuv[2] = suv->fuv[3] = NULL;
+                                                               suv->fuv_list = 
NULL;
                                                                suv->uv_up = 
suv->uv_down = NULL;
+                                                               suv->origuv[0] 
= uv_new[0];
+                                                               suv->origuv[1] 
= uv_new[1];
                                                                
+                                                               
BLI_linklist_prepend(&suv->fuv_list, uv_new);
                                                                
BLI_ghash_insert(uvarray[uvlay_idx],ev,suv);
                                                                
                                                                suv_last++; /* 
advance to next slide UV */
@@ -5080,27 +5087,11 @@
                                                                }
                                        
                                                                /* Copy the 
pointers to the face UV's */
-                                                               for (k=0; k<4; 
k++) {
-                                                                       if 
(!suv->fuv[k]) {
-                                                                               
suv->fuv[k] = uv_new;
-                                                                               
break;
-                                                                       }
-                                                               }
-                                       
-                                                               if (k==3) { /* 
Dont look any further since 4 faces gace been found */
-                                                                       break;
-                                                               }
+                                                               
BLI_linklist_prepend(&suv->fuv_list, uv_new);
                                                        }
-                                       
                                                }
                                        }
                                }
-               
-                               /* UV SUPPORT */
-                               if (suv && suv->fuv[0]) {
-                                       suv->origuv[0] = suv->fuv[0][0];
-                                       suv->origuv[1] = suv->fuv[0][1];
-                               }
                                look = look->next;
                        }
                } /* end uv layer loop */
@@ -5149,11 +5140,13 @@
                                        if (G.scene->toolsettings->uvcalc_flag 
& UVCALC_TRANSFORM_CORRECT) {
                                                for (uvlay_idx=0; 
uvlay_idx<uvlay_tot; uvlay_idx++) {
                                                        suv = BLI_ghash_lookup( 
uvarray[uvlay_idx], ev );
-                                                       if (suv && suv->fuv[0] 
&& suv->uv_up && suv->uv_down) {
-                                                               
VecLerpf2D(suv->fuv[0], suv->origuv,  (perc>=0)?suv->uv_up:suv->uv_down, 
fabs(perc));
-                                                               if 
(suv->fuv[1]) VECCOPY2D(suv->fuv[1], suv->fuv[0]);
-                                                               if 
(suv->fuv[2]) VECCOPY2D(suv->fuv[2], suv->fuv[0]);
-                                                               if 
(suv->fuv[3]) VECCOPY2D(suv->fuv[3], suv->fuv[0]);
+                                                       if (suv && 
suv->fuv_list && suv->uv_up && suv->uv_down) {
+                                                               
VecLerpf2D(uv_tmp, suv->origuv,  (perc>=0)?suv->uv_up:suv->uv_down, fabs(perc));
+                                                               fuv_link = 
suv->fuv_list;
+                                                               while 
(fuv_link) {
+                                                                       
VECCOPY2D(((float *)fuv_link->link), uv_tmp);
+                                                                       
fuv_link = fuv_link->next;
+                                                               }
                                                        }
                                                }
                                        }
@@ -5177,11 +5170,13 @@
                                                        /* dont do anything if 
no UVs */
                                                        for (uvlay_idx=0; 
uvlay_idx<uvlay_tot; uvlay_idx++) {
                                                                suv = 
BLI_ghash_lookup( uvarray[uvlay_idx], ev );
-                                                               if (suv && 
suv->fuv[0] && suv->uv_up && suv->uv_down) {
-                                                                       
VecLerpf2D(suv->fuv[0], suv->uv_down, suv->uv_up, fabs(newlen));
-                                                                       if 
(suv->fuv[1]) VECCOPY2D(suv->fuv[1], suv->fuv[0]);
-                                                                       if 
(suv->fuv[2]) VECCOPY2D(suv->fuv[2], suv->fuv[0]);
-                                                                       if 
(suv->fuv[3]) VECCOPY2D(suv->fuv[3], suv->fuv[0]);
+                                                               if (suv && 
suv->fuv_list && suv->uv_up && suv->uv_down) {
+                                                                       
VecLerpf2D(uv_tmp, suv->uv_down, suv->uv_up, fabs(newlen));
+                                                                       
fuv_link = suv->fuv_list;
+                                                                       while 
(fuv_link) {
+                                                                               
VECCOPY2D(((float *)fuv_link->link), uv_tmp);
+                                                                               
fuv_link = fuv_link->next;
+                                                                       }
                                                                }
                                                        }
                                                }
@@ -5192,11 +5187,13 @@
                                                        /* dont do anything if 
no UVs */
                                                        for (uvlay_idx=0; 
uvlay_idx<uvlay_tot; uvlay_idx++) {
                                                                suv = 
BLI_ghash_lookup( uvarray[uvlay_idx], ev );
-                                                               if (suv && 
suv->fuv[0] && suv->uv_up && suv->uv_down) {
-                                                                       
VecLerpf2D(suv->fuv[0], suv->uv_up, suv->uv_down, fabs(newlen));
-                                                                       if 
(suv->fuv[1]) VECCOPY2D(suv->fuv[1], suv->fuv[0]);
-                                                                       if 
(suv->fuv[2]) VECCOPY2D(suv->fuv[2], suv->fuv[0]);
-                                                                       if 
(suv->fuv[3]) VECCOPY2D(suv->fuv[3], suv->fuv[0]);
+                                                               if (suv && 
suv->fuv_list && suv->uv_up && suv->uv_down) {
+                                                                       
VecLerpf2D(uv_tmp, suv->uv_up, suv->uv_down, fabs(newlen));
+                                                                       
fuv_link = suv->fuv_list;
+                                                                       while 
(fuv_link) {
+                                                                               
VECCOPY2D(((float *)fuv_link->link), uv_tmp);
+                                                                               
fuv_link = fuv_link->next;
+                                                                       }
                                                                }
                                                        }
                                                }
@@ -5389,6 +5386,14 @@
                MEM_freeN(uvarray);
                MEM_freeN(slideuvs);
                
+               suv = suv_last-1;
+               while (suv >= slideuvs) {
+                       if (suv->fuv_list) {
+                               BLI_linklist_free(suv->fuv_list,NULL);
+                       }
+                       suv--;
+               }
+               
                allqueue(REDRAWIMAGE, 0);
        }
 


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

Reply via email to