Revision: 38255
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38255
Author:   psy-fi
Date:     2011-07-09 10:43:22 +0000 (Sat, 09 Jul 2011)
Log Message:
-----------
Smart UV stitch
=====================
*correct bug with incorrect colouring of preview UV's
*added update view to mode switch

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

Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c  
2011-07-09 09:44:57 UTC (rev 38254)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c  
2011-07-09 10:43:22 UTC (rev 38255)
@@ -1147,8 +1147,9 @@
 #define STITCH_PROCESSED 1
 #define STITCH_STITCHABLE 2
 #define STITCH_EDGE_PREVIEW 4
-#define STITCH_USE_FOR_STITCHING 8
-#define STITCH_DO_UPDATE 16
+#define STITCH_EDGE_STITCHABLE 8
+#define STITCH_USE_FOR_STITCHING 16
+#define STITCH_DO_UPDATE 32
 
 
 /* Previewer stuff (see uvedit_intern.h for more info) */
@@ -1488,6 +1489,7 @@
 
                                                                                
element->flag |= STITCH_STITCHABLE;
                                                                                
element2->flag |= STITCH_STITCHABLE;
+                                                                               
element->flag |= STITCH_EDGE_STITCHABLE;
 
                                                                                
uv_average_tmp[0].count++;
                                                                                
uv_average_tmp[1].count++;
@@ -1521,11 +1523,13 @@
                                                                                
        /* convention is to use the vertex at the beginning of the edge. This 
avoids ambiguity
                                                                                
         * in situations where two adjacent edges on the same face need to be 
stitched.  */
                                                                                
        el_iter->flag |= STITCH_EDGE_PREVIEW;
+                                                                               
        el_iter->flag |= STITCH_EDGE_STITCHABLE;
                                                                                
}
                                                                                
else {
                                                                                
        /* We need to flag the UvMapVert corresponding to the other vert, for 
the reason
                                                                                
         * outlined above. */
                                                                                
        el_iter2->flag |= STITCH_EDGE_PREVIEW;
+                                                                               
        el_iter2->flag |= STITCH_EDGE_STITCHABLE;
                                                                                
}
                                                                                
preview->numOfOrig++;
                                                                        }
@@ -1624,67 +1628,81 @@
                        }
                }
                for(element = vmap->buf, i = 0; i < state->vmap->numOfUVs; 
element++, i++){
-                       if(element->flag & STITCH_STITCHABLE){
-                               float uv[2];
+                       if(preview->mode == VERT_STITCH)
+                       {
+                               if(element->flag & STITCH_STITCHABLE){
+                                       float uv[2];
 
-                               efa = element->face;
-                               mt = CustomData_em_get(&state->em->fdata, 
efa->data, CD_MTFACE);
+                                       efa = element->face;
+                                       mt = 
CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
 
-                               uv[0] = uv_average[i].uv[0]/uv_average[i].count;
-                               uv[1] = uv_average[i].uv[1]/uv_average[i].count;
-                               if(preview->mode == VERT_STITCH)
-                               {
+                                       uv[0] = 
uv_average[i].uv[0]/uv_average[i].count;
+                                       uv[1] = 
uv_average[i].uv[1]/uv_average[i].count;
+
                                        preview->previewOrig[bufferIterator*2] 
= mt->uv[element->tfindex][0];
                                        preview->previewOrig[bufferIterator*2 + 
1] = mt->uv[element->tfindex][1];
                                        /* stitchable uv's will be green, 
non-stitchable red */
                                        
preview->previewOrigColors[bufferIterator] = 0x0000FF00;
                                        bufferIterator++;
-                               } else if(element->flag & STITCH_EDGE_PREVIEW){
-                                       int nverts = (efa->v4)? 4 : 3;
-                                       preview->previewOrig[bufferIterator*4] 
= mt->uv[element->tfindex][0];
-                                       preview->previewOrig[bufferIterator*4 + 
1] = mt->uv[element->tfindex][1];
-                                       preview->previewOrig[bufferIterator*4 + 
2] = mt->uv[(element->tfindex + 1)%nverts][0];
-                                       preview->previewOrig[bufferIterator*4 + 
3] = mt->uv[(element->tfindex + 1)%nverts][1];
 
-                                       
preview->previewOrigColors[bufferIterator*2] = 0x0000FF00;
-                                       
preview->previewOrigColors[bufferIterator*2 + 1] = 0x0000FF00;
-                                       bufferIterator++;
-                               }
-                               if(efa->v4){
-                                       preview->previewQuads[efa->tmp.l + 
2*element->tfindex] = uv[0];
-                                       preview->previewQuads[efa->tmp.l + 
2*element->tfindex + 1] = uv[1];
-                               }
-                               else {
-                                       preview->previewTris[efa->tmp.l + 
2*element->tfindex]  = uv[0];
-                                       preview->previewTris[efa->tmp.l + 
2*element->tfindex + 1] = uv[1];
-                               }
-                               /* reset flag, vertapMapbuffer is persistent 
and will be used on next run too! */
-                               element->flag = 0;
-                       }
-                       /* stitchable are always processed so this code 
actually tests non-stitchness */
-                       else if(element->flag & STITCH_PROCESSED)
-                       {
-                               efa = element->face;
-                               mt = CustomData_em_get(&state->em->fdata, 
efa->data, CD_MTFACE);
-                               if(preview->mode == VERT_STITCH)
-                               {
+                                       if(efa->v4){
+                                               
preview->previewQuads[efa->tmp.l + 2*element->tfindex] = uv[0];
+                                               
preview->previewQuads[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
+                                       }
+                                       else {
+                                               preview->previewTris[efa->tmp.l 
+ 2*element->tfindex]  = uv[0];
+                                               preview->previewTris[efa->tmp.l 
+ 2*element->tfindex + 1] = uv[1];
+                                       }
+                               } else if(element->flag & STITCH_PROCESSED) {
+                                       efa = element->face;
+                                       mt = 
CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
                                        preview->previewOrig[bufferIterator*2] 
= mt->uv[element->tfindex][0];
                                        preview->previewOrig[bufferIterator*2 + 
1] = mt->uv[element->tfindex][1];
                                        
preview->previewOrigColors[bufferIterator] = 0x000000FF;
                                        bufferIterator++;
-                               } else if(element->flag & STITCH_EDGE_PREVIEW){
-                                       int nverts = (efa->v4)? 4 : 3;
+                               }
+                       }else{
+                               if(element->flag & STITCH_STITCHABLE){
+                                       float uv[2];
+                                       int nverts;
+                                       efa = element->face;
+                                       nverts = (efa->v4)? 4 : 3;
+                                       mt = 
CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
+                                       uv[0] = 
uv_average[i].uv[0]/uv_average[i].count;
+                                       uv[1] = 
uv_average[i].uv[1]/uv_average[i].count;
+                                       if(efa->v4){
+                                               
preview->previewQuads[efa->tmp.l + 2*element->tfindex] = uv[0];
+                                               
preview->previewQuads[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
+                                       }
+                                       else {
+                                               preview->previewTris[efa->tmp.l 
+ 2*element->tfindex]  = uv[0];
+                                               preview->previewTris[efa->tmp.l 
+ 2*element->tfindex + 1] = uv[1];
+                                       }
+                               }
+                               if(element->flag & STITCH_EDGE_PREVIEW){
+                                       int nverts;
+                                       efa = element->face;
+                                       nverts = (efa->v4)? 4 : 3;
+                                       mt = 
CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
                                        preview->previewOrig[bufferIterator*4] 
= mt->uv[element->tfindex][0];
                                        preview->previewOrig[bufferIterator*4 + 
1] = mt->uv[element->tfindex][1];
                                        preview->previewOrig[bufferIterator*4 + 
2] = mt->uv[(element->tfindex + 1)%nverts][0];
                                        preview->previewOrig[bufferIterator*4 + 
3] = mt->uv[(element->tfindex + 1)%nverts][1];
-
-                                       
preview->previewOrigColors[bufferIterator*2] = 0x000000FF;
-                                       
preview->previewOrigColors[bufferIterator*2 + 1] = 0x000000FF;
+                                       if(element->flag & 
STITCH_EDGE_STITCHABLE){
+                                               
preview->previewOrigColors[bufferIterator*2] = 0x0000FF00;
+                                               
preview->previewOrigColors[bufferIterator*2 + 1] = 0x0000FF00;
+                                       }else
+                                       {
+                                               
preview->previewOrigColors[bufferIterator*2] = 0x000000FF;
+                                               
preview->previewOrigColors[bufferIterator*2 + 1] = 0x000000FF;
+                                       }
                                        bufferIterator++;
                                }
-                               element->flag = 0;
                        }
+                       element->flag = 0;
                }
        }
        if(final)
@@ -1862,6 +1880,8 @@
                                        stitch_state->mode = VERT_STITCH;
                                else
                                        stitch_state->mode = EDGE_STITCH;
+
+                               stitch_process_data(stitch_state, 0, scene, 1);
                                break;
                        }
                        return OPERATOR_RUNNING_MODAL;

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

Reply via email to