[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