Revision: 21759
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21759
Author:   joeedh
Date:     2009-07-21 13:48:58 +0200 (Tue, 21 Jul 2009)

Log Message:
-----------
finished first pass at bmeshafying uvedit_ops.c.  not everything works yet, 
loop select for example crashes.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
    branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_ops.c

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c  
2009-07-21 11:34:55 UTC (rev 21758)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c  
2009-07-21 11:48:58 UTC (rev 21759)
@@ -298,6 +298,7 @@
        return tot;
 }
 
+/*note: by design, this will not touch the editselection history stuff*/
 void BM_Select(struct BMesh *bm, void *element, int select)
 {
        BMHeader *head = element;

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c     
2009-07-21 11:34:55 UTC (rev 21758)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c     
2009-07-21 11:48:58 UTC (rev 21759)
@@ -214,11 +214,13 @@
        }
        
        /*Zero out vertex normals*/
-       for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v = 
BMIter_Step(&verts)) v->no[0] = v->no[1] = v->no[2] = 0.0;
+       for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v = 
BMIter_Step(&verts))
+               v->no[0] = v->no[1] = v->no[2] = 0.0;
 
        /*add face normals to vertices*/
        for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = 
BMIter_Step(&faces)){
-               for(l = BMIter_New(&loops, bm, BM_LOOPS_OF_FACE, f ); l; l = 
BMIter_Step(&loops)) VecAddf(l->v->no, l->v->no, f->no);
+               for(l = BMIter_New(&loops, bm, BM_LOOPS_OF_FACE, f ); l; l = 
BMIter_Step(&loops)) 
+                       VecAddf(l->v->no, l->v->no, f->no);
        }
        
        /*average the vertex normals*/

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c  
2009-07-21 11:34:55 UTC (rev 21758)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c  
2009-07-21 11:48:58 UTC (rev 21759)
@@ -445,7 +445,7 @@
                        i += 1;
                }while(l!=f->loopbase);
 
-               compute_poly_plane(projectverts, f->len);
+               //compute_poly_plane(projectverts, f->len);
                compute_poly_normal(f->no, projectverts, f->len);       
        }
        else if(f->len == 3){

Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h     
2009-07-21 11:34:55 UTC (rev 21758)
+++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h     
2009-07-21 11:48:58 UTC (rev 21759)
@@ -103,6 +103,9 @@
 void EDBM_selectmode_set(struct BMEditMesh *em);
 void EDBM_convertsel(struct BMEditMesh *em, short oldmode, short selectmode);
 
+void EDBM_hide_mesh(struct BMEditMesh *em, int swap);
+void EDBM_reveal_mesh(struct BMEditMesh *em);
+
 int                    EDBM_check_backbuf(unsigned int index);
 int                    EDBM_mask_init_backbuf_border(struct ViewContext *vc, 
short mcords[][2], short tot, short xmin, short ymin, short xmax, short ymax);
 void           EDBM_free_backbuf(void);

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c     
2009-07-21 11:34:55 UTC (rev 21758)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c     
2009-07-21 11:48:58 UTC (rev 21759)
@@ -697,4 +697,15 @@
 {
        /* some of these checks could be a touch overkill */
        return em && em->bm->totface && CustomData_has_layer(&em->bm->pdata, 
CD_MTEXPOLY);
+}
+
+void EDBM_hide_mesh(BMEditMesh *em, int swap)
+{
+       //BMESH_TODO
+}
+
+
+void EDBM_reveal_mesh(BMEditMesh *em)
+{
+       //BMESH_TODO
 }
\ No newline at end of file

Modified: branches/bmesh/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/uvedit/uvedit_ops.c   
2009-07-21 11:34:55 UTC (rev 21758)
+++ branches/bmesh/blender/source/blender/editors/uvedit/uvedit_ops.c   
2009-07-21 11:48:58 UTC (rev 21759)
@@ -622,7 +622,11 @@
 
        mindist= 1e10f;
        memset(hit, 0, sizeof(*hit));
-       
+
+       /*this will fill in hit.vert1 and hit.vert2*/
+       find_nearest_uv_edge(scene, ima, em, co, hit);
+       hit->l = hit->nextl = hit->luv = hit->nextluv = NULL;
+
        BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
                tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, 
CD_MTEXPOLY);
                if(!uvedit_face_visible(scene, ima, efa, tf))
@@ -706,6 +710,10 @@
        float mindist, dist;
        int i, nverts;
 
+       /*this will fill in hit.vert1 and hit.vert2*/
+       find_nearest_uv_edge(scene, ima, em, co, hit);
+       hit->l = hit->nextl = hit->luv = hit->nextluv = NULL;
+
        mindist= 1e10f;
        memset(hit, 0, sizeof(*hit));
        
@@ -911,8 +919,8 @@
 
        /* set flags for first face and verts */
        nverts= hit->efa->len;
-       iterv1= uv_vertex_map_get(vmap, hit->efa, hit->vert1);
-       iterv2= uv_vertex_map_get(vmap, hit->efa, (hit->vert1+1)%nverts);
+       iterv1= uv_vertex_map_get(vmap, hit->efa, hit->lindex);
+       iterv2= uv_vertex_map_get(vmap, hit->efa, (hit->lindex+1)%nverts);
        uv_vertex_loop_flag(iterv1);
        uv_vertex_loop_flag(iterv2);
 
@@ -938,6 +946,9 @@
                                        /* check face not hidden and not tagged 
*/
                                        iterv1= uv_vertex_map_get(vmap, efa, a);
                                        iterv2= uv_vertex_map_get(vmap, efa, 
(a+1)%nverts);
+                                       
+                                       if (!iterv1 || !iterv2)
+                                               continue;
 
                                        /* check if vertex is tagged and has 
right valence */
                                        if(iterv1->flag || iterv2->flag) {
@@ -956,9 +967,9 @@
        }
 
        /* do the actual select/deselect */
-       nverts= efa->len;
-       iterv1= uv_vertex_map_get(vmap, hit->efa, hit->vert1);
-       iterv2= uv_vertex_map_get(vmap, hit->efa, (hit->vert1+1)%nverts);
+       nverts= hit->efa->len;
+       iterv1= uv_vertex_map_get(vmap, hit->efa, hit->lindex);
+       iterv2= uv_vertex_map_get(vmap, hit->efa, (hit->lindex+1)%nverts);
        iterv1->flag= 1;
        iterv2->flag= 1;
 
@@ -2589,75 +2600,62 @@
 
 static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object 
*obedit)
 {
-#if 0
-       EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
-       EditFace *efa;
-       EditVert *eve;
-       MTFace *tface;
+       BMEditMesh *em= ((Mesh*)obedit->data)->edit_btmesh;
+       BMFace *efa;
+       BMLoop *l;
+       BMIter iter, liter;
+       BMVert *eve;
+       MTexPoly *tface;
+       MLoopUV *luv;
        short change = 0;
        int count = 0;
        float *coords;
        short *usercount, users;
        
        /* set all verts to -1 : an unused index*/
-       for(eve= em->verts.first; eve; eve= eve->next)
-               eve->tmp.l=-1;
+       BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL)
+               BMINDEX_SET(eve, -1);
        
        /* index every vert that has a selected UV using it, but only once so 
as to
         * get unique indicies and to count how much to malloc */
-       for(efa= em->faces.first; efa; efa= efa->next) {
-               tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+       BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+               tface= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, 
CD_MTEXPOLY);
+               if(!uvedit_face_visible(scene, ima, efa, tface)) {
+                       BMINDEX_SET(efa, 0);
+                       continue;
+               } else {
+                       BMINDEX_SET(efa, 1);
+               }
 
-               if(uvedit_face_visible(scene, ima, efa, tface)) {
-                       if(uvedit_uv_selected(em, scene, efa, tface, 0) && 
efa->v1->tmp.l==-1)          efa->v1->tmp.l= count++;
-                       if(uvedit_uv_selected(em, scene, efa, tface, 1) && 
efa->v2->tmp.l==-1)          efa->v2->tmp.l= count++;
-                       if(uvedit_uv_selected(em, scene, efa, tface, 2) && 
efa->v3->tmp.l==-1)          efa->v3->tmp.l= count++;
-                       if(efa->v4)
-                               if(uvedit_uv_selected(em, scene, efa, tface, 3) 
&& efa->v4->tmp.l==-1)  efa->v4->tmp.l= count++;
-
-                       change = 1;
-                       
-                       /* optional speedup */
-                       efa->tmp.p = tface;
+               change = 1;
+               BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
+                       if (uvedit_uv_selected(em, scene, l) && 
BMINDEX_GET(l->v) == -1) {
+                               BMINDEX_SET(l->v, count);
+                               count++;
+                       }
                }
-               else
-                       efa->tmp.p = NULL;
        }
        
        coords = MEM_callocN(sizeof(float)*count*2, "snap to adjacent coords");
        usercount = MEM_callocN(sizeof(short)*count, "snap to adjacent counts");
        
        /* add all UV coords from visible, unselected UV coords as well as 
counting them to average later */
-       for(efa= em->faces.first; efa; efa= efa->next) {
-               if((tface=(MTFace *)efa->tmp.p)) {
-                       /* is this an unselected UV we can snap to? */
-                       if(efa->v1->tmp.l >= 0 && (!uvedit_uv_selected(em, 
scene, efa, tface, 0))) {
-                               coords[efa->v1->tmp.l*2] +=             
tface->uv[0][0];
-                               coords[(efa->v1->tmp.l*2)+1] += tface->uv[0][1];
-                               usercount[efa->v1->tmp.l]++;
-                               change = 1;
+       BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+               if (!BMINDEX_GET(efa))
+                       continue;
+
+               tface= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, 
CD_MTEXPOLY);
+               if(!uvedit_face_visible(scene, ima, efa, tface))
+                       continue;
+
+               BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
+                       if (BMINDEX_GET(l->v) >= 0 && 
+                           (!uvedit_uv_selected(em, scene, l))) {
+                                   luv = CustomData_bmesh_get(&em->bm->ldata, 
l->head.data, CD_MLOOPUV);
+                                   coords[BMINDEX_GET(l->v)*2] += luv->uv[0];
+                                   coords[BMINDEX_GET(l->v)*2+1] += luv->uv[1];
+                                   change = 1;
                        }
-                       if(efa->v2->tmp.l >= 0 && (!uvedit_uv_selected(em, 
scene, efa, tface, 1))) {
-                               coords[efa->v2->tmp.l*2] +=             
tface->uv[1][0];
-                               coords[(efa->v2->tmp.l*2)+1] += tface->uv[1][1];
-                               usercount[efa->v2->tmp.l]++;
-                               change = 1;
-                       }
-                       if(efa->v3->tmp.l >= 0 && (!uvedit_uv_selected(em, 
scene, efa, tface, 2))) {
-                               coords[efa->v3->tmp.l*2] +=             
tface->uv[2][0];
-                               coords[(efa->v3->tmp.l*2)+1] += tface->uv[2][1];
-                               usercount[efa->v3->tmp.l]++;
-                               change = 1;
-                       }
-                       
-                       if(efa->v4) {
-                               if(efa->v4->tmp.l >= 0 && 
(!uvedit_uv_selected(em, scene, efa, tface, 3))) {
-                                       coords[efa->v4->tmp.l*2] +=             
tface->uv[3][0];
-                                       coords[(efa->v4->tmp.l*2)+1] += 
tface->uv[3][1];
-                                       usercount[efa->v4->tmp.l]++;
-                                       change = 1;
-                               }
-                       }
                }
        }
        
@@ -2665,65 +2663,43 @@
        if(!change) {
                MEM_freeN(coords);
                MEM_freeN(usercount);
-               BKE_mesh_end_editmesh(obedit->data, em);
                return change;
        }
        
        /* copy the averaged unselected UVs back to the selected UVs */
-       for(efa= em->faces.first; efa; efa= efa->next) {
-               if((tface=(MTFace *)efa->tmp.p)) {
-                       
-                       if(     uvedit_uv_selected(em, scene, efa, tface, 0) &&
-                                       efa->v1->tmp.l >= 0 &&
-                                       (users = usercount[efa->v1->tmp.l])
-                       ) {
-                               tface->uv[0][0] = coords[efa->v1->tmp.l*2]      
        / users;
-                               tface->uv[0][1] = coords[(efa->v1->tmp.l*2)+1]  
/ users;
-                       }
+       BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to