[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37974] branches/soc-2011-onion/source/ blender/editors/uvedit/uvedit_ops.c: smart stitch - at last edge stitch working and is now default.

Antony Riakiotakis kalast at gmail.com
Thu Jun 30 05:04:52 CEST 2011


Revision: 37974
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37974
Author:   psy-fi
Date:     2011-06-30 03:04:51 +0000 (Thu, 30 Jun 2011)
Log Message:
-----------
smart stitch - at last edge stitch working and is now default. Still getting some mysterious crashes, will investigate, but at least behavior is as expected for now

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-06-30 03:04:39 UTC (rev 37973)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c	2011-06-30 03:04:51 UTC (rev 37974)
@@ -1401,7 +1401,8 @@
 							UvElement *el_iter, *element2, *el_sep1, *el_sep2, *iter_sep1, *iter_sep2;
 							float uv1[2][2];
 							int nverts, stack_iter;
-							int stackSize = 0;
+							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*/
@@ -1489,7 +1490,8 @@
 									}
 									else {
 										/* Stitchable case, do the necessary stuff */
-										UvElement *el_iter2;
+										UvElement *el_iter2, *tmp_iter;
+
 										element->flag |= STITCH_STITCHABLE;
 										element2->flag |= STITCH_STITCHABLE;
 
@@ -1503,21 +1505,23 @@
 										/* We need the UvMapVert of the other uv too. */
 										for(el_iter2 = vmap->vert[v2->tmp.l]; el_iter2; el_iter2 = el_iter2->next){
 											if(el_iter2->separate)
-												iter_sep2 = el_iter;
+												iter_sep2 = el_iter2;
 											if(el_iter2->face == efa)
 												break;
 										}
 
 										/* push coincident uv's to the stack to be updated */
-										/*for(el_iter2 = vmap->vert[v2->tmp.l]; el_iter2; el_iter2 = el_iter2->next){
-											if(el_iter2->separate && el_iter2 != iter_sep)
+										for(tmp_iter = iter_sep1; tmp_iter; tmp_iter = tmp_iter->next){
+											if(tmp_iter->separate && tmp_iter != iter_sep1)
 												break;
+											commonVertMaps[stackSize1++] = tmp_iter;
+										}
+										for(tmp_iter = iter_sep2; tmp_iter; tmp_iter = tmp_iter->next){
+											if(tmp_iter->separate && tmp_iter != iter_sep2)
+												break;
+											commonVertMaps2[stackSize2++] = tmp_iter;
+										}
 
-										}*/
-										commonVertMaps[stackSize] = el_iter;
-										commonVertMaps2[stackSize] = el_iter2;
-
-										stackSize++;
 										if(vertCheck)
 										{
 											/* convention is to use the vertex at the beginning of the edge. This avoids ambiguity
@@ -1555,25 +1559,41 @@
 									}
 								}
 
-								for(stack_iter = 0; stack_iter < stackSize; stack_iter++)
-								{
-
-									index1 = commonVertMaps[stack_iter] - vmap->buf, index2 = commonVertMaps2[stack_iter] - vmap->buf;
+								for(stack_iter = 0; stack_iter < stackSize1; stack_iter++){
+									index1 = commonVertMaps[stack_iter] - vmap->buf,
 									efa = commonVertMaps[stack_iter]->face;
 
 									commonVertMaps[stack_iter]->flag |= STITCH_STITCHABLE;
-									commonVertMaps2[stack_iter]->flag |= STITCH_STITCHABLE;
 
 									uv_average[index1].count += uv_average_tmp[0].count;
 									uv_average[index1].uv[0] += uv_average_tmp[0].uv[0];
 									uv_average[index1].uv[1] += uv_average_tmp[0].uv[1];
 
+
+									preview->numOfOrig++;
+
+									if(efa->tmp.l == -1)
+									{
+										if(efa->v4)
+										{
+											efa->tmp.l = preview->numOfQuads*8;
+											preview->numOfQuads++;
+										} else {
+											efa->tmp.l = preview->numOfTris*6;
+											preview->numOfTris++;
+										}
+									}
+								}
+								for(stack_iter = 0; stack_iter < stackSize2; stack_iter++){
+									index2 = commonVertMaps2[stack_iter] - vmap->buf;
+									efa = commonVertMaps[stack_iter]->face;
+
+									commonVertMaps2[stack_iter]->flag |= STITCH_STITCHABLE;
+
 									uv_average[index2].count += uv_average_tmp[1].count;
 									uv_average[index2].uv[0] += uv_average_tmp[1].uv[0];
 									uv_average[index2].uv[1] += uv_average_tmp[1].uv[1];
 
-									preview->numOfOrig++;
-
 									if(efa->tmp.l == -1)
 									{
 										if(efa->v4)




More information about the Bf-blender-cvs mailing list