[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38255] branches/soc-2011-onion/source/ blender/editors/uvedit/uvedit_ops.c: Smart UV stitch
Antony Riakiotakis
kalast at gmail.com
Sat Jul 9 12:43:23 CEST 2011
Revision: 38255
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38255
Author: psy-fi
Date: 2011-07-09 10:43:22 +0000 (Sat, 09 Jul 2011)
Log Message:
-----------
Smart UV stitch
=====================
*correct bug with incorrect colouring of preview UV's
*added update view to mode switch
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-09 09:44:57 UTC (rev 38254)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c 2011-07-09 10:43:22 UTC (rev 38255)
@@ -1147,8 +1147,9 @@
#define STITCH_PROCESSED 1
#define STITCH_STITCHABLE 2
#define STITCH_EDGE_PREVIEW 4
-#define STITCH_USE_FOR_STITCHING 8
-#define STITCH_DO_UPDATE 16
+#define STITCH_EDGE_STITCHABLE 8
+#define STITCH_USE_FOR_STITCHING 16
+#define STITCH_DO_UPDATE 32
/* Previewer stuff (see uvedit_intern.h for more info) */
@@ -1488,6 +1489,7 @@
element->flag |= STITCH_STITCHABLE;
element2->flag |= STITCH_STITCHABLE;
+ element->flag |= STITCH_EDGE_STITCHABLE;
uv_average_tmp[0].count++;
uv_average_tmp[1].count++;
@@ -1521,11 +1523,13 @@
/* convention is to use the vertex at the beginning of the edge. This avoids ambiguity
* in situations where two adjacent edges on the same face need to be stitched. */
el_iter->flag |= STITCH_EDGE_PREVIEW;
+ el_iter->flag |= STITCH_EDGE_STITCHABLE;
}
else {
/* We need to flag the UvMapVert corresponding to the other vert, for the reason
* outlined above. */
el_iter2->flag |= STITCH_EDGE_PREVIEW;
+ el_iter2->flag |= STITCH_EDGE_STITCHABLE;
}
preview->numOfOrig++;
}
@@ -1624,67 +1628,81 @@
}
}
for(element = vmap->buf, i = 0; i < state->vmap->numOfUVs; element++, i++){
- if(element->flag & STITCH_STITCHABLE){
- float uv[2];
+ if(preview->mode == VERT_STITCH)
+ {
+ if(element->flag & STITCH_STITCHABLE){
+ float uv[2];
- efa = element->face;
- mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+ efa = element->face;
+ mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
- uv[0] = uv_average[i].uv[0]/uv_average[i].count;
- uv[1] = uv_average[i].uv[1]/uv_average[i].count;
- if(preview->mode == VERT_STITCH)
- {
+ uv[0] = uv_average[i].uv[0]/uv_average[i].count;
+ uv[1] = uv_average[i].uv[1]/uv_average[i].count;
+
preview->previewOrig[bufferIterator*2] = mt->uv[element->tfindex][0];
preview->previewOrig[bufferIterator*2 + 1] = mt->uv[element->tfindex][1];
/* stitchable uv's will be green, non-stitchable red */
preview->previewOrigColors[bufferIterator] = 0x0000FF00;
bufferIterator++;
- } else if(element->flag & STITCH_EDGE_PREVIEW){
- int nverts = (efa->v4)? 4 : 3;
- 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*2] = 0x0000FF00;
- preview->previewOrigColors[bufferIterator*2 + 1] = 0x0000FF00;
- bufferIterator++;
- }
- if(efa->v4){
- preview->previewQuads[efa->tmp.l + 2*element->tfindex] = uv[0];
- preview->previewQuads[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
- }
- else {
- preview->previewTris[efa->tmp.l + 2*element->tfindex] = uv[0];
- preview->previewTris[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
- }
- /* reset flag, vertapMapbuffer is persistent and will be used on next run too! */
- element->flag = 0;
- }
- /* stitchable are always processed so this code actually tests non-stitchness */
- else if(element->flag & STITCH_PROCESSED)
- {
- efa = element->face;
- mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
- if(preview->mode == VERT_STITCH)
- {
+ if(efa->v4){
+ preview->previewQuads[efa->tmp.l + 2*element->tfindex] = uv[0];
+ preview->previewQuads[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
+ }
+ else {
+ preview->previewTris[efa->tmp.l + 2*element->tfindex] = uv[0];
+ preview->previewTris[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
+ }
+ } else if(element->flag & STITCH_PROCESSED) {
+ efa = element->face;
+ mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
preview->previewOrig[bufferIterator*2] = mt->uv[element->tfindex][0];
preview->previewOrig[bufferIterator*2 + 1] = mt->uv[element->tfindex][1];
preview->previewOrigColors[bufferIterator] = 0x000000FF;
bufferIterator++;
- } else if(element->flag & STITCH_EDGE_PREVIEW){
- int nverts = (efa->v4)? 4 : 3;
+ }
+ }else{
+ if(element->flag & STITCH_STITCHABLE){
+ float uv[2];
+ int nverts;
+ efa = element->face;
+ nverts = (efa->v4)? 4 : 3;
+ mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
+ uv[0] = uv_average[i].uv[0]/uv_average[i].count;
+ uv[1] = uv_average[i].uv[1]/uv_average[i].count;
+ if(efa->v4){
+ preview->previewQuads[efa->tmp.l + 2*element->tfindex] = uv[0];
+ preview->previewQuads[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
+ }
+ else {
+ preview->previewTris[efa->tmp.l + 2*element->tfindex] = uv[0];
+ preview->previewTris[efa->tmp.l + 2*element->tfindex + 1] = uv[1];
+ }
+ }
+ if(element->flag & STITCH_EDGE_PREVIEW){
+ int nverts;
+ efa = element->face;
+ nverts = (efa->v4)? 4 : 3;
+ mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
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*2] = 0x000000FF;
- preview->previewOrigColors[bufferIterator*2 + 1] = 0x000000FF;
+ if(element->flag & STITCH_EDGE_STITCHABLE){
+ preview->previewOrigColors[bufferIterator*2] = 0x0000FF00;
+ preview->previewOrigColors[bufferIterator*2 + 1] = 0x0000FF00;
+ }else
+ {
+ preview->previewOrigColors[bufferIterator*2] = 0x000000FF;
+ preview->previewOrigColors[bufferIterator*2 + 1] = 0x000000FF;
+ }
bufferIterator++;
}
- element->flag = 0;
}
+ element->flag = 0;
}
}
if(final)
@@ -1862,6 +1880,8 @@
stitch_state->mode = VERT_STITCH;
else
stitch_state->mode = EDGE_STITCH;
+
+ stitch_process_data(stitch_state, 0, scene, 1);
break;
}
return OPERATOR_RUNNING_MODAL;
More information about the Bf-blender-cvs
mailing list