Revision: 40233
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40233
Author:   psy-fi
Date:     2011-09-15 14:52:48 +0000 (Thu, 15 Sep 2011)
Log Message:
-----------
Now corresponding faces belonging to other stitchable uvs are added for preview 
for vertex case. Also some comments and indentation corrections

Modified Paths:
--------------
    
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
    branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
===================================================================
--- 
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
    2011-09-15 14:48:50 UTC (rev 40232)
+++ 
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
    2011-09-15 14:52:48 UTC (rev 40233)
@@ -554,6 +554,8 @@
                                offset2 = uniqueUv[itmp2];
 
                                edges[counter].flag = 0;
+                               /* using an order policy, sort uvs according to 
address space. This avoids
+                                * Having two different UvEdges with the same 
uvs on different positions  */
                                if(offset1 < offset2){
                                        edges[counter].uv1 = offset1;
                                        edges[counter].uv2 = offset2;

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 14:48:50 UTC (rev 40232)
+++ branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_ops.c 
2011-09-15 14:52:48 UTC (rev 40233)
@@ -2175,7 +2175,7 @@
 
 
 /* Checks for remote uvs that may be stitched with a certain uv, flags them if 
stitchable. */
-int determine_uv_stitchability(UvElement *element, StitchState *state){
+static int determine_uv_stitchability(UvElement *element, StitchState *state){
        int vert_index;
        UvElement *element_iter;
        float limit= state->limitDist;
@@ -2215,6 +2215,7 @@
        IslandStitchData *island_stitch_data = NULL;
        short preview_enabled = preview->enabled;
        EditFace *efa;
+       EditVert *ev;
 
        /* cleanup previous preview */
        stitch_preview_delete();
@@ -2228,55 +2229,70 @@
                efa->tmp.l = -1;
        }
 
+       /* Store Indices to editVerts. This is not always needed according to 
current code so using a flag.
+        * This may be recipe for trouble later though, if something changes. */
+       if(doIndexInit){
+               for(ev = state->em->verts.first, i = 0; ev; ev = ev->next, i++){
+                       ev->tmp.l = i;
+               }
+       }
+
+       /* First determine stitchability of uvs */
        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;
+                               ((UvElement 
*)(state->selection_stack[i]))->flag |= STITCH_STITCHABLE;
+                       }
+               }
+               /* Now we need to register our stitchable and any remote uvs 
for preview */
+               for(i = 0; i < state->selection_size; i++){
+                       UvElement *element = (UvElement 
*)state->selection_stack[i];
+                       if(element->flag & STITCH_STITCHABLE){
+                               UvElement *element_iter = 
state->elementMap->vert[(*(&element->face->v1 + element->tfindex))->tmp.l];
+                               for(; element_iter; element_iter = 
element_iter->next){
                                        
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(!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");
+               }
 
-                                                       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));
-                                                       }
+               /* 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 = 
state->elementMap->vert[(*(&element->face->v1 + element->tfindex))->tmp.l];
+                               for(element_iter = element; element_iter; 
element_iter = element_iter->next){
+                                       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));
                                                }
                                        }
                                }
                        }
+                       else{
+
+                       }
                }
+       }
 
 
        return 1;
@@ -2357,20 +2373,23 @@
 
        /* Fill selection stack */
        for(efa = stitch_state->em->faces.first ; efa; efa = efa->next){
-                       int numOfVerts;
-                       MTFace *mt;
-                       mt = CustomData_em_get(&stitch_state->em->fdata, 
efa->data, CD_MTFACE);
-                       numOfVerts = efa->v4 ? 4 : 3;
+               int numOfVerts;
+               MTFace *mt;
+               mt = CustomData_em_get(&stitch_state->em->fdata, efa->data, 
CD_MTFACE);
+               numOfVerts = efa->v4 ? 4 : 3;
 
-                       for(i = 0; i < numOfVerts; i++){
-                               if(uvedit_uv_selected(scene, efa, mt, i)){
-                                       int uniqueIndex;
-                                       UvElement *element  = 
get_uv_element(stitch_state->elementMap, efa, i);
-                                       uniqueIndex = stitch_state->map[element 
- stitch_state->elementMap->buf];
-                                       stitch_state->uvs[uniqueIndex]->flag = 
STITCH_SELECTED;
+               for(i = 0; i < numOfVerts; i++){
+                       if(uvedit_uv_selected(scene, efa, mt, i)){
+                               int uniqueIndex;
+                               UvElement *element  = 
get_uv_element(stitch_state->elementMap, efa, i);
+                               uniqueIndex = stitch_state->map[element - 
stitch_state->elementMap->buf];
+                               /* count a uv only once, or duplicates will 
happen */
+                               if(stitch_state->uvs[uniqueIndex]->flag != 
STITCH_SELECTED){
                                        
stitch_state->selection_stack[stitch_state->selection_size++] = 
stitch_state->uvs[uniqueIndex];
                                }
+                               stitch_state->uvs[uniqueIndex]->flag = 
STITCH_SELECTED;
                        }
+               }
        }
 
        stitch_process_data(stitch_state, 0, scene, 1);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to