Revision: 38708
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38708
Author:   psy-fi
Date:     2011-07-25 19:36:47 +0000 (Mon, 25 Jul 2011)
Log Message:
-----------
smart stitch
============================
- smart stitch: Better selection for edges: now deselecting an edge with common 
uv's with another does not deselect the other. This is a step towards a better 
system, not based on selection, but most probably on a dynamic RNA property 
array. This will allow for operator redo on uv's selected during modal 
operation of the operator.

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-25 18:15:05 UTC (rev 38707)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c  
2011-07-25 19:36:47 UTC (rev 38708)
@@ -1540,7 +1540,7 @@
                                /****************** Edge stitching case 
*************************/
                                } else {
                                        /* Is this edge selected? */
-                                       if(mt->flag & TF_SEL_MASK(i) && 
mt->flag & TF_SEL_MASK((i+1)%vertsPerFace))
+                                       if(mt->flag & TF_SEL_MASK(i))
                                        {
                                                EditVert *v1, *v2;
                                                /* The sep hold the first 
UVElement coincident with our elements. If edge
@@ -2183,46 +2183,51 @@
                                        {
                                                /* same as above but for two 
verts. Maybe make a function for this after implementation is concrete */
                                                UvElement *element = 
stitch_state->vmap->vert[hit.vert];
-                                               UvElement *element2 = 
stitch_state->vmap->vert[hit.vert2];
+                                               //UvElement *element2 = 
stitch_state->vmap->vert[hit.vert2];
 
-                                               UvElement *firstCoincident;
+                                               //UvElement *firstCoincident;
                                                for(; element; element = 
element->next)
                                                {
-                                                       if(element->separate)
-                                                               firstCoincident 
= element;
-                                                       if(element->face == 
hit.efa){
-                                                               for(element = 
firstCoincident; element; element = element->next){
-                                                                       MTFace 
*tface;
-                                                                       
if(element->separate && element != firstCoincident)
-                                                                               
break;
-                                                                       tface = 
 CustomData_em_get(&stitch_state->em->fdata, element->face->data, CD_MTFACE);
-                                                                       
if(event->ctrl)
+                                                       int nverts = 
element->face->v4 ? 4 : 3;
+                                                       int nextflag = 0;
+                                                       if((nextflag = 
(*(&element->face->v1 + (1 + element->tfindex)%nverts))->tmp.l == hit.vert2) ||
+                                                               
(*(&element->face->v1 + (element->tfindex - 1 + nverts)%nverts))->tmp.l == 
hit.vert2)
+                                                       {
+                                                               MTFace *tface = 
 CustomData_em_get(&stitch_state->em->fdata, element->face->data, CD_MTFACE);
+                                                               
if(element->face == hit.efa)
+                                                               {
+                                                                       
if(nextflag)
+                                                                       {
+                                                                               
if(event->ctrl){
+                                                                               
        uvedit_uv_deselect(scene, element->face, tface, element->tfindex);
+                                                                               
        //uvedit_uv_deselect(scene, element->face, tface, (element->tfindex + 
1)%nverts);
+                                                                               
}
+                                                                               
else{
+                                                                               
        uvedit_uv_select(scene, element->face, tface, element->tfindex);
+                                                                               
        //uvedit_uv_select(scene, element->face, tface, (element->tfindex + 
1)%nverts);
+                                                                               
}
+                                                                       }else{
+                                                                               
if(event->ctrl){
+                                                                               
        //uvedit_uv_deselect(scene, element->face, tface, element->tfindex);
+                                                                               
        uvedit_uv_deselect(scene, element->face, tface, (element->tfindex - 1 + 
nverts)%nverts);
+                                                                               
}
+                                                                               
else{
+                                                                               
        //uvedit_uv_select(scene, element->face, tface, element->tfindex);
+                                                                               
        uvedit_uv_select(scene, element->face, tface, (element->tfindex - 1 + 
nverts)%nverts);
+                                                                               
}
+                                                                       }
+                                                               }else{
+                                                                       
if(nextflag)
+                                                                       {
                                                                                
uvedit_uv_deselect(scene, element->face, tface, element->tfindex);
-                                                                       else
-                                                                               
uvedit_uv_select(scene, element->face, tface, element->tfindex);
+                                                                               
//uvedit_uv_deselect(scene, element->face, tface, (element->tfindex + 
1)%nverts);
+                                                                       }else{
+                                                                               
//uvedit_uv_deselect(scene, element->face, tface, element->tfindex);
+                                                                               
uvedit_uv_deselect(scene, element->face, tface, (element->tfindex - 1 + 
nverts)%nverts);
+                                                                       }
                                                                }
-                                                               break;
                                                        }
                                                }
-
-                                               for(; element2; element2 = 
element2->next)
-                                               {
-                                                       if(element2->separate)
-                                                               firstCoincident 
= element2;
-                                                       if(element2->face == 
hit.efa){
-                                                               for(element2 = 
firstCoincident; element2; element2 = element2->next){
-                                                                       MTFace 
*tface;
-                                                                       
if(element2->separate && element2 != firstCoincident)
-                                                                               
break;
-                                                                       tface = 
 CustomData_em_get(&stitch_state->em->fdata, element2->face->data, CD_MTFACE);
-                                                                       
if(event->ctrl)
-                                                                               
uvedit_uv_deselect(scene, element2->face, tface, element2->tfindex);
-                                                                       else
-                                                                               
uvedit_uv_select(scene, element2->face, tface, element2->tfindex);
-                                                               }
-                                                               break;
-                                                       }
-                                               }
                                        }
                                }
                                stitch_process_data(stitch_state, 0, scene, 0);

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

Reply via email to