[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40225] branches/soc-2011-onion-uv-tools/ source/blender/editors/uvedit/uvedit_ops.c: Register faces for uv vertex stitching preview.
Antony Riakiotakis
kalast at gmail.com
Thu Sep 15 14:58:22 CEST 2011
Revision: 40225
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40225
Author: psy-fi
Date: 2011-09-15 12:58:22 +0000 (Thu, 15 Sep 2011)
Log Message:
-----------
Register faces for uv vertex stitching preview. This indeed feels easier to code now. I hope the trend continues.
Modified Paths:
--------------
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c
Modified: branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c 2011-09-15 12:26:48 UTC (rev 40224)
+++ branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c 2011-09-15 12:58:22 UTC (rev 40225)
@@ -1404,7 +1404,7 @@
}
/* Set preview buffer position of UV face in editface->tmp.l */
-static void stitch_update_face_preview_index(EditFace *efa, StitchPreviewer *preview)
+static void stitch_set_face_preview_buffer_position(EditFace *efa, StitchPreviewer *preview)
{
if(efa->tmp.l == -1)
{
@@ -1669,7 +1669,7 @@
island_stitch_data[element->island].addedForPreview = 1;
}
else {
- stitch_update_face_preview_index(editFace, preview);
+ stitch_set_face_preview_buffer_position(editFace, preview);
}
for(iter2 = 0; iter2 < iter; iter2++)
{
@@ -1691,7 +1691,7 @@
island_stitch_data[el_iter->island].addedForPreview = 1;
}
else {
- stitch_update_face_preview_index(efa, preview);
+ stitch_set_face_preview_buffer_position(efa, preview);
}
}
}
@@ -1886,7 +1886,7 @@
island_stitch_data[el_iter->island].addedForPreview = 1;
}
else {
- stitch_update_face_preview_index(efa, preview);
+ stitch_set_face_preview_buffer_position(efa, preview);
}
}
}
@@ -1903,7 +1903,7 @@
island_stitch_data[el_iter->island].addedForPreview = 1;
}
else {
- stitch_update_face_preview_index(efa, preview);
+ stitch_set_face_preview_buffer_position(efa, preview);
}
}
}
@@ -1928,7 +1928,7 @@
element = &state->elementMap->buf[state->elementMap->islandIndices[i]];
for(j = 0; j < previewIslandUVs; j++, element++){
- stitch_update_face_preview_index(element->face, preview);
+ stitch_set_face_preview_buffer_position(element->face, preview);
}
}
}
@@ -2205,9 +2205,78 @@
}
-
+/* Main processing function. It calculates preview and final positions. */
static int stitch_process_data(StitchState *state, int final, Scene *scene, int doIndexInit)
{
+ int i;
+ StitchPreviewer *preview = uv_get_stitch_previewer();
+ IslandStitchData *island_stitch_data = NULL;
+ short preview_enabled = preview->enabled;
+ EditFace *efa;
+
+ /* cleanup previous preview */
+ stitch_preview_delete();
+ preview = stitch_preview_init();
+ if(preview == NULL)
+ return OPERATOR_CANCELLED;
+ preview->enabled = preview_enabled;
+ preview->mode = VERT_STITCH;
+ /* each face holds its position in the preview buffer in tmp. -1 is uninitialized */
+ for(efa = state->em->faces.first; efa; efa = efa->next){
+ efa->tmp.l = -1;
+ }
+
+ if(state->mode == VERT_STITCH){
+ for(i = 0; i < state->selection_size; i++){
+ if(determine_uv_stitchability(state->selection_stack[i], state)){
+ UvElement *element_iter, *element = (UvElement *)state->selection_stack[i];
+ element->flag = STITCH_STITCHABLE;
+ for(element_iter = element; element_iter; element_iter = element_iter->next){
+ if(element_iter->separate && element_iter != element)
+ break;
+ stitch_set_face_preview_buffer_position(element_iter->face, preview);
+ }
+ }
+ }
+ }
+
+ if(!final){
+ /* Initialize the preview buffers */
+ preview->previewQuads = (float *)MEM_mallocN(preview->numOfQuads*sizeof(float)*8, "quad_uv_stitch_prev");
+ preview->previewTris = (float *)MEM_mallocN(preview->numOfTris*sizeof(float)*6, "tri_uv_stitch_prev");
+ if(state->mode == VERT_STITCH){
+ preview->previewOrig = (float *)MEM_mallocN(preview->numOfOrig*sizeof(float)*2, "stitch_preview_orig_data");
+ preview->previewOrigColors = (unsigned int *)MEM_mallocN(preview->numOfOrig*sizeof(unsigned int), "stitch_preview_colors");
+ } else {
+ preview->previewOrig = (float *)MEM_mallocN(preview->numOfOrig*sizeof(float)*4, "stitch_preview_orig_data");
+ preview->previewOrigColors = (unsigned int *)MEM_mallocN(preview->numOfOrig*sizeof(unsigned int)*2, "stitch_preview_colors");
+ }
+
+ /* Fill the preview buffers with stitchable only faces */
+ for(i = 0; i < state->selection_size; i++){
+ UvElement *element = (UvElement *)state->selection_stack[i];
+ if(element->flag == STITCH_STITCHABLE){
+ UvElement *element_iter = element;
+ for(element_iter = element; element_iter; element_iter = element_iter->next){
+ if(element_iter->separate && element_iter != element)
+ break;
+ efa = element_iter->face;
+ if(efa->tmp.l != -1)
+ {
+ MTFace *mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
+
+ if(efa->v4) {
+ memcpy(preview->previewQuads+efa->tmp.l, &mt->uv[0][0], 8*sizeof(float));
+ } else {
+ memcpy(preview->previewTris+efa->tmp.l, &mt->uv[0][0], 6*sizeof(float));
+ }
+ }
+ }
+ }
+ }
+ }
+
+
return 1;
}
@@ -2610,7 +2679,7 @@
/* properties */
RNA_def_boolean(ot->srna, "use_limit", 0, "Use Limit", "Stitch UVs within a specified limit distance.");
RNA_def_boolean(ot->srna, "snap_islands", 0, "Snap Islands", "Snap islands together. On edge stitch mode, rotates the islands too");
- RNA_def_enum(ot->srna, "mode", mode, EDGE_STITCH, "Mode", "Vertex or edge stitching mode. In Edge stitching, both uv's must be stitchable to stitch");
+ RNA_def_enum(ot->srna, "mode", mode, VERT_STITCH, "Mode", "Vertex or edge stitching mode. In Edge stitching, both uv's must be stitchable to stitch");
RNA_def_float(ot->srna, "limit", 0.01f, 0.0f, FLT_MAX, "Limit", "Limit distance in normalized coordinates.", -FLT_MAX, FLT_MAX);
}
More information about the Bf-blender-cvs
mailing list