[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37968] branches/soc-2011-onion/source/ blender/editors/uvedit: smart stitch - my bug spray got two of them, more to come
Antony Riakiotakis
kalast at gmail.com
Thu Jun 30 03:30:38 CEST 2011
Revision: 37968
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37968
Author: psy-fi
Date: 2011-06-30 01:30:35 +0000 (Thu, 30 Jun 2011)
Log Message:
-----------
smart stitch - my bug spray got two of them, more to come
Modified Paths:
--------------
branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_draw.c
branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_draw.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_draw.c 2011-06-30 01:13:15 UTC (rev 37967)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_draw.c 2011-06-30 01:30:35 UTC (rev 37968)
@@ -877,7 +877,7 @@
else
{
/* draw edge preview */
- glDrawArrays(GL_LINES, 0, stitch_preview->numOfOrig);
+ glDrawArrays(GL_LINES, 0, 2*stitch_preview->numOfOrig);
}
glPopClientAttrib();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
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 01:13:15 UTC (rev 37967)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c 2011-06-30 01:30:35 UTC (rev 37968)
@@ -1393,23 +1393,20 @@
/****************** Edge stitching case *************************/
} else
{
- char edgeSelFlag = TF_SEL_MASK(i) | TF_SEL_MASK((i+1)%vertsPerFace);
-
- /* need another one of these for each of the 2 verts*/
- UvElement **commonVertMaps2 = MEM_mallocN(state->em->totface*sizeof(UvElement *), "commonVertMaps2");
-
/* Is this edge selected? */
- if(mt->flag & edgeSelFlag)
+ if(mt->flag & TF_SEL_MASK(i) && mt->flag & TF_SEL_MASK((i+1)%vertsPerFace))
{
EditVert *v1, *v2;
UvElement *el_iter, *element2;
float uv1[2][2];
- int nverts;
+ int nverts, stack_iter;
int stackSize = 0;
int index1, index2;
UVVertAverage uv_average_tmp[2];
+ /* need another one of these for each of the 2 verts*/
+ UvElement **commonVertMaps2 = MEM_mallocN(state->em->totface*sizeof(UvElement *), "commonVertMaps2");
- memset(uv_average_tmp, sizeof(uv_average_tmp), 0);
+ memset(uv_average_tmp, 0, sizeof(uv_average_tmp));
v1 = *(&editFace->v1 + i);
v2 = *(&editFace->v1 + (i + 1)%vertsPerFace);
@@ -1543,14 +1540,14 @@
}
}
- for(; stackSize > -1; stackSize--)
+ for(stack_iter = 0; stack_iter < stackSize; stack_iter++)
{
- index1 = commonVertMaps[stackSize] - vmap->buf, index2 = commonVertMaps2[stackSize] - vmap->buf;
- efa = commonVertMaps[stackSize]->face;
+ index1 = commonVertMaps[stack_iter] - vmap->buf, index2 = commonVertMaps2[stack_iter] - vmap->buf;
+ efa = commonVertMaps[stack_iter]->face;
- commonVertMaps[stackSize]->flag |= STITCH_STITCHABLE;
- commonVertMaps2[stackSize]->flag |= STITCH_STITCHABLE;
+ 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];
@@ -1560,6 +1557,8 @@
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)
@@ -1573,8 +1572,8 @@
}
}
}
+ MEM_freeN(commonVertMaps2);
}
- MEM_freeN(commonVertMaps2);
}
}
}
@@ -1627,13 +1626,13 @@
bufferIterator++;
} else if(element->flag & STITCH_EDGE_PREVIEW){
int nverts = (efa->v4)? 4 : 3;
- preview->previewOrig[bufferIterator*2] = mt->uv[element->tfindex][0];
- preview->previewOrig[bufferIterator*2 + 1] = mt->uv[element->tfindex][1];
- preview->previewOrig[bufferIterator*2 + 2] = mt->uv[(element->tfindex + 1)%nverts][0];
- preview->previewOrig[bufferIterator*2 + 3] = mt->uv[(element->tfindex + 1)%nverts][1];
+ 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] = 0x0000FF00;
- preview->previewOrigColors[bufferIterator + 1] = 0x0000FF00;
+ preview->previewOrigColors[bufferIterator*2] = 0x0000FF00;
+ preview->previewOrigColors[bufferIterator*2 + 1] = 0x0000FF00;
bufferIterator++;
}
if(efa->v4){
@@ -1660,13 +1659,13 @@
bufferIterator++;
} else if(element->flag & STITCH_EDGE_PREVIEW){
int nverts = (efa->v4)? 4 : 3;
- preview->previewOrig[bufferIterator*2] = mt->uv[element->tfindex][0];
- preview->previewOrig[bufferIterator*2 + 1] = mt->uv[element->tfindex][1];
- preview->previewOrig[bufferIterator*2 + 2] = mt->uv[(element->tfindex + 1)%nverts][0];
- preview->previewOrig[bufferIterator*2 + 3] = mt->uv[(element->tfindex + 1)%nverts][1];
+ 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] = 0x0000FF00;
- preview->previewOrigColors[bufferIterator + 1] = 0x0000FF00;
+ preview->previewOrigColors[bufferIterator*2] = 0x000000FF;
+ preview->previewOrigColors[bufferIterator*2 + 1] = 0x000000FF;
bufferIterator++;
}
element->flag = 0;
@@ -1718,7 +1717,7 @@
stitch_state->use_limit = RNA_boolean_get(op->ptr, "use_limit");
stitch_state->limitDist = RNA_float_get(op->ptr, "limit");
stitch_state->em = em = BKE_mesh_get_editmesh((Mesh*)obedit->data);
- stitch_state->mode = VERT_STITCH;
+ stitch_state->mode = EDGE_STITCH;
stitch_state->vmap = EM_make_uv_vert_map2(stitch_state->em, 1, limit);
More information about the Bf-blender-cvs
mailing list