Revision: 37683
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37683
Author:   psy-fi
Date:     2011-06-21 02:02:16 +0000 (Tue, 21 Jun 2011)
Log Message:
-----------
smart welding - add vertices with v(subject to change). There are issues with 
vertices not registered right will correct ASAP

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-21 01:41:39 UTC (rev 37682)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c  
2011-06-21 02:02:16 UTC (rev 37683)
@@ -1221,7 +1221,7 @@
        StitchPreviewer *preview = uv_get_stitch_previewer();
        UVVertAverage *uv_average;
        GHash *vertices = state->vertices;
-       GHash *faces = state->faces;
+       GHash *faces = BLI_ghash_new(BLI_ghashutil_ptrhash, 
BLI_ghashutil_ptrcmp, "stitch_operator_faces");
        UvVertMap *vmap = state->vmap;
        int numOfPoints = 0;
        GHashIterator *ghiter;
@@ -1229,30 +1229,19 @@
        int averageBufferIterator = 0;
        EditFace *efa;
        MTFace *mt;
+       short preview_enabled = preview->enabled;
 
        /* cleanup previous preview(if any) */
-       if(preview->previewQuads){
-               MEM_freeN(preview->previewQuads);
-               preview->previewQuads = NULL;
-       }
-       if(preview->previewTris){
-               MEM_freeN(preview->previewTris);
-               preview->previewTris = NULL;
-       }
-       if(preview->previewPoints){
-               MEM_freeN(preview->previewPoints);
-               preview->previewPoints = NULL;
-       }
-       if(preview->previewPointColors){
-               MEM_freeN(preview->previewPointColors);
-               preview->previewPointColors = NULL;
-       }
-       ghiter = BLI_ghashIterator_new(faces);
+       stitch_preview_delete();
+       preview = stitch_preview_init();
+       preview->enabled = preview_enabled;
 
-       uv_average = 
MEM_callocN(sizeof(UVVertAverage)*BLI_ghash_size(vertices), "stitch_averages");
+       EM_init_index_arrays(state->em, 0, 0, 1);
 
-       BLI_ghashIterator_init(ghiter, vertices);
+       ghiter = BLI_ghashIterator_new(vertices);
 
+       uv_average = 
MEM_callocN(sizeof(UVVertAverage)*BLI_ghash_size(vertices), "stitch_averages");
+
        /* Count number of points/faces so that we allocate appropriate buffer 
*/
        for( ; !BLI_ghashIterator_isDone(ghiter); 
BLI_ghashIterator_step(ghiter), averageBufferIterator++){
                EditVert *editVert =  BLI_ghashIterator_getKey(ghiter);
@@ -1262,18 +1251,15 @@
                        efa = EM_get_face_for_index(mapVert->f);
                        mt = CustomData_em_get(&state->em->fdata, efa->data, 
CD_MTFACE);
 
-                       efa = EM_get_face_for_index(mapVert->f);
-                       mt = CustomData_em_get(&state->em->fdata, efa->data, 
CD_MTFACE);
-
                        uv_average[averageBufferIterator].count++;
                        uv_average[averageBufferIterator].uv[0] += 
mt->uv[mapVert->tfindex][0];
                        uv_average[averageBufferIterator].uv[1] += 
mt->uv[mapVert->tfindex][1];
 
                        mapVert = mapVert->next;
                        numOfPoints++;
-                       if(!BLI_ghash_haskey(faces, efa))
-                       {
+                       if(!BLI_ghash_haskey(faces, efa)){
                                BLI_ghash_insert(faces, efa, NULL);
+
                                /* store position in the preview buffer */
                                if(efa->v4)
                                {
@@ -1291,8 +1277,8 @@
                /* 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");
-       preview->previewPoints = MEM_mallocN(numOfPoints*sizeof(float)*2, 
"stitch_preview_points");
-       preview->previewPointColors = MEM_mallocN(numOfPoints*sizeof(unsigned 
int)*2, "stitch_preview_point_colors");
+       preview->previewPoints = (float 
*)MEM_mallocN(numOfPoints*sizeof(float)*2, "stitch_preview_points");
+       preview->previewPointColors = (float 
*)MEM_mallocN(numOfPoints*sizeof(unsigned int), "stitch_preview_point_colors");
 
        BLI_ghashIterator_init(ghiter, faces);
 
@@ -1310,6 +1296,8 @@
                }
        }
 
+       BLI_ghash_free(faces, NULL, NULL);
+
        BLI_ghashIterator_init(ghiter, vertices);
        for(averageBufferIterator = 0; !BLI_ghashIterator_isDone(ghiter); 
BLI_ghashIterator_step(ghiter), averageBufferIterator++){
                        short stitchable;
@@ -1342,6 +1330,8 @@
 
        MEM_freeN(uv_average);
 
+       EM_free_index_arrays();
+
        BLI_ghashIterator_free(ghiter);
 }
 
@@ -1365,7 +1355,6 @@
        stitch_state->use_limit = RNA_boolean_get(op->ptr, "use_limit");
        stitch_state->limitDist = RNA_float_get(op->ptr, "limit");
        stitch_state->vertices = BLI_ghash_new(BLI_ghashutil_ptrhash, 
BLI_ghashutil_ptrcmp, "stitch_operator_vertices");
-       stitch_state->faces = BLI_ghash_new(BLI_ghashutil_ptrhash, 
BLI_ghashutil_ptrcmp, "stitch_operator_faces");
        stitch_state->em = em = BKE_mesh_get_editmesh((Mesh*)obedit->data);
 
        EM_init_index_arrays(stitch_state->em, 0, 0, 1);
@@ -1397,15 +1386,15 @@
        for(; !BLI_ghashIterator_isDone(ghiter); 
BLI_ghashIterator_step(ghiter)){
                EditVert *vert = BLI_ghashIterator_getKey(ghiter);
                if(!BLI_ghash_haskey(stitch_state->vertices, vert));
-               BLI_ghash_insert(stitch_state->vertices, vert, NULL);
+                       BLI_ghash_insert(stitch_state->vertices, vert, NULL);
        }
        BLI_ghashIterator_free(ghiter);
 
        BLI_ghash_free(tempHash, NULL, NULL);
+       EM_free_index_arrays();
 
        stitch_prepare_preview_data(stitch_state);
 
-       EM_free_index_arrays();
        stitch_update_header(stitch_state, C);
        return 1;
 }
@@ -1691,7 +1680,6 @@
        EM_free_uv_vert_map(stitch_state->vmap);
 
        BLI_ghash_free(stitch_state->vertices, NULL, NULL);
-       BLI_ghash_free(stitch_state->faces, NULL, NULL);
        BKE_mesh_end_editmesh(obedit->data, stitch_state->em);
 
        if(sa)
@@ -1774,7 +1762,6 @@
                        if(event->val == KM_PRESS){
                                /* add uv under mouse to processed uv's */
                                float co[2];
-                               //EditVert *vert;
                                NearestHit hit;
                                ARegion *ar= CTX_wm_region(C);
                                Image *ima= CTX_data_edit_image(C);
@@ -1784,13 +1771,15 @@
                                find_nearest_uv_vert(scene, ima, 
stitch_state->em, co, NULL, &hit);
                                if(hit.efa)
                                {
-                                       /*todo add display update for selected 
verts */
-                                       /*todo add to preview faces too*/
-                                       
BLI_ghash_insert(stitch_state->vertices, &((hit.efa->v1+hit.vert)->tmp.l), 
NULL);
-                                       BLI_ghash_insert(stitch_state->faces, 
hit.efa, NULL);
+                                       EditVert *vert = hit.efa->v1+hit.uv;
+                                       /* This looks like recipe for 
trouble...sigh! */
+                                       vert->tmp.l = hit.vert;
+                                       
if(!BLI_ghash_haskey(stitch_state->vertices, vert))
+                                               
BLI_ghash_insert(stitch_state->vertices, vert, NULL);
                                }
+                               stitch_prepare_preview_data(stitch_state);
                        }
-                       return OPERATOR_RUNNING_MODAL;
+                       break;
 
                /* turn preview on/off */
                case PKEY:

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

Reply via email to