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
