Revision: 41351
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41351
Author:   psy-fi
Date:     2011-10-28 20:36:40 +0000 (Fri, 28 Oct 2011)
Log Message:
-----------
smart stitching
===================
*Completely remove old evaluation function
*Add new shortcuts to area header.

Modified Paths:
--------------
    branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c 
2011-10-28 19:40:32 UTC (rev 41350)
+++ branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c 
2011-10-28 20:36:40 UTC (rev 41351)
@@ -1392,7 +1392,7 @@
 /* This function updates the header of the UV editor when the stitch tool 
updates its settings */
 static void stitch_update_header(StitchState *stitch_state, bContext *C)
 {
-       static char str[] = "Select(V {+Ctrl deselect}) Toggle(T) %c Vertex  %c 
Edge,  %c Preview(P),  %c Limit(L),  %c Snap(S),  %c  Midpoints(M), 
Ctrl+Wheel(limit adjust): %.2f";
+       static char str[] = "Select(V {+Ctrl deselect}) Toggle(T) %c Vertex %c 
Edge, %c Preview(P), %c Limit(L), %c Snap(S), %c  Midpoints(M), 
(Ctrl+Wheel/-+)Limit Adjust: %.2f, Switch Static Island(I) ";
        char msg[256];
        ScrArea *sa= CTX_wm_area(C);
        char mode = (stitch_state->mode == VERT_STITCH);
@@ -1532,581 +1532,8 @@
        island_stitch_data[element->island].medianPoint[1] += 
(mt->uv[(element->tfindex + 1)%nverts][1] + mt->uv[element->tfindex][1]) / 2.0;
 
 }
-#ifndef STITCHNEW
-/* This function prepares the data of the previewer for display */
-static int stitch_process_data(StitchState *state, int final, Scene *scene, 
int doIndexInit)
-{
-       StitchPreviewer *preview = uv_get_stitch_previewer();
-       UVVertAverage *uv_average;
-       UvElementMap *elementMap = state->elementMap;
-       UvElement *element;
-       int i;
-       int bufferIterator = 0;
-       EditFace *editFace, *efa;
-       //**faceArray;
-       EditVert *editVert;
-       IslandStitchData *island_stitch_data = NULL;
 
-       /* This holds uv's corresponding to the same vertex that must be 
updated if one of them is stitchable. */
-       UvElement **commonVertMaps;
 
-       MTFace *mt;
-       short preview_enabled = preview->enabled;
-
-       /* cleanup previous preview */
-       stitch_preview_delete();
-       preview = stitch_preview_init();
-       if(preview == NULL)
-               return OPERATOR_CANCELLED;
-       preview->enabled = preview_enabled;
-       preview->mode = state->mode;
-       /* UV average is stored for every UV since potentially every UV can be 
stitched with another. Highly unlikely, I know but possible
-        * nevertheless :p */
-       uv_average = (UVVertAverage 
*)MEM_callocN(state->elementMap->totalUVs*sizeof(UVVertAverage), 
"stitch_averages");
-
-       /* Store Indices to editVerts */
-       if(doIndexInit){
-               for(editVert = state->em->verts.first, i = 0; editVert; 
editVert = editVert->next, i++){
-                       editVert->tmp.l = i;
-               }
-       }
-
-       /* Make face array and initialize position in preview buffer */
-       for(editFace = state->em->faces.first; editFace; editFace = 
editFace->next){
-               editFace->tmp.l = -1;
-       }
-
-       /* The maximum number of faces that a UV can be part of is totfaces. We 
allocate this here to avoid allocating
-       * this too many times on the fly */
-       commonVertMaps = 
MEM_mallocN(state->em->totface*sizeof(*commonVertMaps), "commonVertMaps");
-
-       if(state->snapIslands){
-               island_stitch_data = 
MEM_callocN(sizeof(*island_stitch_data)*state->elementMap->totalIslands, 
"stitch_island_data");
-       }
-
-       /* Iterate over all faces and find selected uv's */
-       for(editFace = state->em->faces.first ; editFace; 
editFace=editFace->next){
-               int vertsPerFace;
-
-               mt = CustomData_em_get(&state->em->fdata, editFace->data, 
CD_MTFACE);
-               vertsPerFace = editFace->v4 ? 4 : 3;
-
-               for(i = 0; i < vertsPerFace; i++){
-                       /************ Vert stitching case 
**********************/
-                       if(state->mode == VERT_STITCH){
-                               if(uvedit_uv_selected(scene, editFace, mt, i))
-                               {
-                                       int averageIndex;
-                                       int iter = 0;
-                                       int iter2;
-                                       UvElement *el_iter;
-                                       EditVert *vt = *(&(editFace->v1)+i);
-                                       /* ...we'll iterate through all shared 
UV's of the corresponding vertex */
-                                       el_iter = elementMap->vert[vt->tmp.l];
-
-                                       /* First we need the UVMapVert that 
corresponds to our uv */
-                                       for(;el_iter; el_iter =  el_iter->next)
-                                       {
-                                               /* Here we assume face does not 
use the same vertex twice. */
-                                               if(el_iter->face == editFace)
-                                               {
-                                                       /* Assign first UV 
coincident */
-                                                       element = el_iter;
-                                                       averageIndex = element 
- elementMap->buf;
-                                               }
-                                       }
-
-                                       /* Add preview only if it hasn't been 
added already */
-                                       if(!(element->flag & (STITCH_STITCHABLE 
| STITCH_PROCESSED))){
-                                               preview->numOfStitchable++;
-                                       }
-
-                                       uv_average[averageIndex].count ++;
-                                       uv_average[averageIndex].uv[0] += 
mt->uv[i][0];
-                                       uv_average[averageIndex].uv[1] += 
mt->uv[i][1];
-
-                                       for(el_iter = 
elementMap->vert[vt->tmp.l], iter = 0; el_iter; el_iter = el_iter->next){
-                                               MTFace *tmptface;
-
-                                               if(el_iter == element){
-                                                       continue;
-                                               }
-
-                                               efa = el_iter->face;
-                                               tmptface = 
CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
-
-                                               if(fabs((mt->uv[i][0] - 
tmptface->uv[el_iter->tfindex][0]) < STD_UV_CONNECT_LIMIT) &&
-                                                               
(fabs(mt->uv[i][1] - tmptface->uv[el_iter->tfindex][1]) < STD_UV_CONNECT_LIMIT))
-                                               {
-                                                       /* if the uv being 
iterated is coincident with the original, just add it to be updated later if
-                                                        * original uv is 
stitchable */
-                                                       commonVertMaps[iter++] 
= el_iter;
-                                               }
-                                               else if((!state->use_limit) || 
( (fabs(mt->uv[i][0] - tmptface->uv[el_iter->tfindex][0]) < state->limitDist
-                                                               && 
fabs(mt->uv[i][1] - tmptface->uv[el_iter->tfindex][1]) < state->limitDist) ))
-                                               {
-                                                       commonVertMaps[iter++] 
= el_iter;
-                                                       element->flag |= 
STITCH_STITCHABLE;
-                                                       if(el_iter->separate){
-                                                               
uv_average[averageIndex].count++;
-                                                               
uv_average[averageIndex].uv[0] += tmptface->uv[el_iter->tfindex][0];
-                                                               
uv_average[averageIndex].uv[1] += tmptface->uv[el_iter->tfindex][1];
-                                                       }
-                                               }
-                                       }
-
-                                       element->flag |= STITCH_PROCESSED;
-                                       /* here we update coincident uvs */
-                                       if(element->flag & STITCH_STITCHABLE)
-                                       {
-                                               /* add original face to preview 
*/
-                                               if(state->snapIslands){
-                                                       
island_stitch_data[element->island].addedForPreview = 1;
-                                               }
-                                               else {
-                                                       
stitch_set_face_preview_buffer_position(editFace, preview);
-                                               }
-                                               for(iter2 = 0; iter2 < iter; 
iter2++)
-                                               {
-                                                       int averageIndex2;
-                                                       el_iter = 
commonVertMaps[iter2];
-                                                       efa = el_iter->face;
-                                                       averageIndex2 = el_iter 
- elementMap->buf;
-                                                       /* Add preview only if 
it hasn't been added already */
-                                                       if(!(el_iter->flag & 
(STITCH_STITCHABLE | STITCH_PROCESSED))){
-                                                               
preview->numOfStitchable++;
-                                                       }
-                                                       el_iter->flag |= 
STITCH_STITCHABLE;
-                                                       //el_iter->flag |= 
STITCH_PROCESSED;
-
-                                                       
uv_average[averageIndex2].count += uv_average[averageIndex].count;
-                                                       
uv_average[averageIndex2].uv[0] += uv_average[averageIndex].uv[0];
-                                                       
uv_average[averageIndex2].uv[1] += uv_average[averageIndex].uv[1];
-                                                       if(state->snapIslands){
-                                                               
island_stitch_data[el_iter->island].addedForPreview = 1;
-                                                       }
-                                                       else {
-                                                               
stitch_set_face_preview_buffer_position(efa, preview);
-                                                       }
-                                               }
-                                       }
-                               }
-                               /****************** Edge stitching case 
*************************/
-                       } else {
-                               /* Is this edge selected? */
-                               if(uvedit_uv_selected(scene, editFace, mt, i))
-                               {
-                                       EditVert *v1, *v2;
-                                       /* The sep hold the first UVElement 
coincident with our elements. If edge
-                                        * is stitchable we must update all 
these. */
-                                       UvElement *el_iter, *element2, 
*el_sep1, *el_sep2, *iter_sep1, *iter_sep2;
-                                       float uv1[2][2];
-                                       int nverts, stack_iter;
-                                       int stackSize1 = 0;
-                                       int stackSize2 = 0;
-                                       int index1, index2;
-                                       UVVertAverage uv_average_tmp[2];
-                                       /* need another one of these for each 
of the 2 verts*/
-                                       UvElement **commonVertMaps2 = 
MEM_mallocN(state->em->totface*sizeof(UvElement *), "commonVertMaps2");
-
-                                       memset(uv_average_tmp, 0, 
sizeof(uv_average_tmp));
-
-                                       v1 = *(&editFace->v1 + i);
-                                       v2 = *(&editFace->v1 + (i + 
1)%vertsPerFace);
-
-                                       /* Find the uv element that matches the 
current face */
-                                       for(el_iter = 
elementMap->vert[v1->tmp.l]; el_iter; el_iter = el_iter->next){
-                                               if(el_iter->separate)
-                                                       el_sep1 = el_iter;
-                                               efa = el_iter->face;
-                                               nverts = efa->v4 ? 4 : 3;
-                                               if(efa == editFace){
-                                                       UvElement *el_iter2;
-                                                       element = el_iter;
-                                                       /* Find the uv element 
for the other uv too */
-                                                       for(el_iter2 = 
elementMap->vert[v2->tmp.l]; el_iter2; el_iter2 = el_iter2->next){
-                                                               
if(el_iter2->separate)
-                                                                       el_sep2 
= el_iter2;
-                                                               
if(el_iter2->face == efa){
-                                                                       
element2 = el_iter2;
-                                                                       break;
-                                                               }
-                                                       }
-                                                       break;
-                                               }
-                                       }
-
-                                       index1 = element - elementMap->buf;
-                                       index2 = element2 - elementMap->buf;
-
-                                       element->flag |= STITCH_PROCESSED;
-                                       element->flag |= STITCH_EDGE_PREVIEW;
-                                       preview->numOfStitchable++;
-
-                                       uv_average_tmp[0].count++;
-                                       uv_average_tmp[1].count++;
-
-                                       uv_average_tmp[0].uv[0] = uv1[0][0] = 
mt->uv[element->tfindex][0];
-                                       uv_average_tmp[0].uv[1] = uv1[0][1] = 
mt->uv[element->tfindex][1];
-                                       uv_average_tmp[1].uv[0] = uv1[1][0] = 
mt->uv[(element2->tfindex)][0];
-                                       uv_average_tmp[1].uv[1] = uv1[1][1] = 
mt->uv[(element2->tfindex)][1];
-
-                                       /* Now iterate through all faces and 
find potential stitchable edges */
-                                       for(el_iter = 
elementMap->vert[v1->tmp.l]; el_iter; el_iter = el_iter->next){
-                                               char vertCheck = 0;
-                                               float uv2[2][2];
-                                               MTFace *tmptface;
-                                               efa = el_iter->face;
-                                               nverts = (efa->v4)? 4 : 3;
-                                               if(el_iter->separate)
-                                                       iter_sep1 = el_iter;
-                                               /* Check to see if both 
vertices exist on the edge of the new face */
-                                               if((vertCheck = (*(&efa->v1 + 
(el_iter->tfindex + 1)%nverts) == v2))
-                                                               || (*(&efa->v1 
+ (el_iter->tfindex + nverts - 1)%nverts) == v2)){
-
-                                                       tmptface = 
CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
-
-                                                       /* Take uv's of second 
face */
-                                                       uv2[0][0] = 
tmptface->uv[el_iter->tfindex][0];
-                                                       uv2[0][1] = 
tmptface->uv[el_iter->tfindex][1];
-                                                       uv2[1][0] = 
(vertCheck)? tmptface->uv[(el_iter->tfindex + 1)%nverts][0] : 
tmptface->uv[(el_iter->tfindex + nverts - 1)%nverts][0];
-                                                       uv2[1][1] = 
(vertCheck)? tmptface->uv[(el_iter->tfindex + 1)%nverts][1] : 
tmptface->uv[(el_iter->tfindex + nverts - 1)%nverts][1];
-
-                                                       /* Actual checks */
-                                                       if(fabs((uv1[0][0] - 
uv2[0][0]) < STD_UV_CONNECT_LIMIT) &&

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to