[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38708] branches/soc-2011-onion/source/ blender/editors/uvedit/uvedit_ops.c: smart stitch

Antony Riakiotakis kalast at gmail.com
Mon Jul 25 21:36:47 CEST 2011


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);




More information about the Bf-blender-cvs mailing list