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

Log Message:
-----------
first pass at the uv code.  uv editor now mostly uses new bmesh structures for 
uvs.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/bmesh/bmesh_queries.h
    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/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
    branches/bmesh/blender/source/blender/editors/include/ED_uvedit.h
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_add.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/bmesh/blender/source/blender/editors/screen/Makefile
    branches/bmesh/blender/source/blender/editors/screen/SConscript
    branches/bmesh/blender/source/blender/editors/screen/screen_ops.c
    branches/bmesh/blender/source/blender/editors/space_image/Makefile
    branches/bmesh/blender/source/blender/editors/space_image/SConscript
    branches/bmesh/blender/source/blender/editors/space_image/space_image.c
    
branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c
    branches/bmesh/blender/source/blender/editors/uvedit/SConscript
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_draw.c
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_intern.h
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_ops.c
    branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c  
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c  
2009-07-21 08:39:58 UTC (rev 21751)
@@ -192,11 +192,11 @@
                                looptris[i*3+1] = efa->v2->tmp.p;
                                looptris[i*3+2] = efa->v3->tmp.p;
 
-                               if (looptris[i*3]->head.eflag2 > 
looptris[i*3+1]->head.eflag2);
+                               if (looptris[i*3]->head.eflag2 < 
looptris[i*3+1]->head.eflag2);
                                        SWAP(BMLoop*, looptris[i*3], 
looptris[i*3+1]);
-                               if (looptris[i*3+1]->head.eflag2 > 
looptris[i*3+2]->head.eflag2);
+                               if (looptris[i*3+1]->head.eflag2 < 
looptris[i*3+2]->head.eflag2);
                                        SWAP(BMLoop*, looptris[i*3+1], 
looptris[i*3+2]);
-                               if (looptris[i*3]->head.eflag2 > 
looptris[i*3+1]->head.eflag2);
+                               if (looptris[i*3]->head.eflag2 < 
looptris[i*3+1]->head.eflag2);
                                        SWAP(BMLoop*, looptris[i*3], 
looptris[i*3+1]);
 
                                i += 1;

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_queries.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_queries.h 2009-07-21 
05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_queries.h 2009-07-21 
08:39:58 UTC (rev 21751)
@@ -3,6 +3,10 @@
 #include <stdio.h>
 
 /*Queries*/
+
+/*get the area of face f*/
+float BM_face_area(BMFace *f);
+
 /*counts number of elements of type type are in the mesh.*/
 int BM_Count_Element(struct BMesh *bm, int type);
 

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c     
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c     
2009-07-21 08:39:58 UTC (rev 21751)
@@ -164,6 +164,8 @@
        if (bm->vtar) MEM_freeN(bm->vtar);
        if (bm->plar) MEM_freeN(bm->plar);
 
+       BLI_freelistN(&bm->selected);
+
        BMO_ClearStack(bm);
 }
 

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c  
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c  
2009-07-21 08:39:58 UTC (rev 21751)
@@ -108,7 +108,7 @@
                Normalize_d(v2);
 
                l = INPR(v1, v2);
-               if (l < 0.01 && l > -0.01)
+               if (ABS(l) < 0.1)
                        continue;
 
                /* newell's method
@@ -189,6 +189,31 @@
        return 0;
 }
 
+float BM_face_area(BMFace *f)
+{
+       BMLoop *l;
+       BMIter iter;
+       float (*verts)[3], stackv[100][3];
+       float area, center[3];
+       int i;
+
+       if (f->len <= 100) 
+               verts = stackv;
+       else verts = MEM_callocN(sizeof(float)*f->len*3, "bm_face_area tmp");
+
+       i = 0;
+       BM_ITER(l, &iter, NULL, BM_LOOPS_OF_FACE, f) {
+               VECCOPY(verts[i], l->v->co);
+               i++;
+       }
+
+       compute_poly_center(center, &area, verts, f->len);
+
+       if (f->len > 100)
+               MEM_freeN(verts);
+
+       return area;
+}
 /*
 computes center of face in 3d.  uses center of bounding box.
 */

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c   
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c   
2009-07-21 08:39:58 UTC (rev 21751)
@@ -244,6 +244,10 @@
                mvert->flag = BMFlags_To_MEFlags(v);
 
                BMINDEX_SET(v, i);
+
+               /*copy over customdata*/
+               CustomData_from_bmesh_block(&bm->vdata, &me->vdata, 
v->head.data, i);
+
                i++;
                mvert++;
        }
@@ -262,6 +266,10 @@
                medge->flag = BMFlags_To_MEFlags(e);
 
                BMINDEX_SET(e, i);
+
+               /*copy over customdata*/
+               CustomData_from_bmesh_block(&bm->edata, &me->edata, 
e->head.data, i);
+
                i++;
                medge++;
        }
@@ -308,10 +316,16 @@
                for ( ; l; l=BMIter_Step(&liter), j++, mloop++) {
                        mloop->e = BMINDEX_GET(l->e);
                        mloop->v = BMINDEX_GET(l->v);
+
+                       /*copy over customdata*/
+                       CustomData_from_bmesh_block(&bm->ldata, &me->ldata, 
l->head.data, j);
                }
                
                if (f == bm->act_face) me->act_face = i;
 
+               /*copy over customdata*/
+               CustomData_from_bmesh_block(&bm->pdata, &me->pdata, 
f->head.data, i);
+
                i++;
                mpoly++;
        }

Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h     
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h     
2009-07-21 08:39:58 UTC (rev 21751)
@@ -53,6 +53,8 @@
 struct BMVert;
 struct BMEdge;
 struct BMFace;
+struct UvVertMap;
+struct UvMapVert;
 
 // edge and face flag both
 #define EM_FGON                2
@@ -78,23 +80,26 @@
 
 /* bmeshutils.c */
 
-/*this function is currently defunct, dead*/
-void EDBM_Tesselate(struct EditMesh *em);
 void EDBM_RecalcNormals(struct BMEditMesh *em);
+
 void EDBM_MakeEditBMesh(struct Scene *scene, struct Object *ob);
 void EDBM_FreeEditBMesh(struct BMEditMesh *tm);
 void EDBM_LoadEditBMesh(struct Scene *scene, struct Object *ob);
+
 void EDBM_init_index_arrays(struct BMEditMesh *tm, int forvert, int foredge, 
int forface);
 void EDBM_free_index_arrays(struct BMEditMesh *tm);
 struct BMVert *EDBM_get_vert_for_index(struct BMEditMesh *tm, int index);
 struct BMEdge *EDBM_get_edge_for_index(struct BMEditMesh *tm, int index);
 struct BMFace *EDBM_get_face_for_index(struct BMEditMesh *tm, int index);
 struct BMFace *EDBM_get_actFace(struct BMEditMesh *em, int sloppy);
+
 void EDBM_selectmode_flush(struct BMEditMesh *em);
 int EDBM_get_actSelection(struct BMEditMesh *em, struct BMEditSelection *ese);
+
 void EDBM_editselection_center(struct BMEditMesh *em, float *center, struct 
BMEditSelection *ese);
 void EDBM_editselection_plane(struct BMEditMesh *em, float *plane, struct 
BMEditSelection *ese);
 void EDBM_editselection_normal(float *normal, struct BMEditSelection *ese);
+
 void EDBM_selectmode_set(struct BMEditMesh *em);
 void EDBM_convertsel(struct BMEditMesh *em, short oldmode, short selectmode);
 
@@ -104,6 +109,19 @@
 int                    EDBM_init_backbuf_border(struct ViewContext *vc, short 
xmin, short ymin, short xmax, short ymax);
 int                    EDBM_init_backbuf_circle(struct ViewContext *vc, short 
xs, short ys, short rads);
 
+void EDBM_select_swap(struct BMEditMesh *em); /* exported for UV */
+void EDBM_set_actFace(struct BMEditMesh *em, struct BMFace *efa);
+
+int EDBM_texFaceCheck(struct BMEditMesh *em);
+struct MTexPoly *EDBM_get_active_mtexpoly(struct BMEditMesh *em, struct BMFace 
**act_efa, int sloppy);
+
+void EDBM_free_uv_vert_map(struct UvVertMap *vmap);
+struct UvMapVert *EDBM_get_uv_map_vert(struct UvVertMap *vmap, unsigned int v);
+struct UvVertMap *EDBM_make_uv_vert_map(struct BMEditMesh *em, int selected, 
int do_face_idx_array, float *limit);
+
+void EDBM_toggle_select_all(struct BMEditMesh *em);
+void EDBM_set_flag_all(struct BMEditMesh *em, int flag);
+
 /* meshtools.c */
 
 intptr_t       mesh_octree_table(struct Object *ob, struct BMEditMesh *em, 
float *co, char mode);

Modified: branches/bmesh/blender/source/blender/editors/include/ED_uvedit.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_uvedit.h   
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/editors/include/ED_uvedit.h   
2009-07-21 08:39:58 UTC (rev 21751)
@@ -47,10 +47,10 @@
 int ED_uvedit_test_silent(struct Object *obedit);
 int ED_uvedit_test(struct Object *obedit);
 
-int uvedit_face_visible(struct Scene *scene, struct Image *ima, struct 
EditFace *efa, struct MTFace *tf);
-int uvedit_face_selected(struct Scene *scene, struct EditFace *efa, struct 
MTFace *tf);
-int uvedit_edge_selected(struct Scene *scene, struct EditFace *efa, struct 
MTFace *tf, int i);
-int uvedit_uv_selected(struct Scene *scene, struct EditFace *efa, struct 
MTFace *tf, int i);
+int uvedit_face_visible(struct Scene *scene, struct Image *ima, struct BMFace 
*efa, struct MTexPoly *tf);
+int uvedit_face_selected(struct Scene *scene, struct BMEditMesh *em, struct 
BMFace *efa);
+int uvedit_edge_selected(struct BMEditMesh *em, struct Scene *scene, struct 
BMLoop *l);
+int uvedit_uv_selected(struct BMEditMesh *em, struct Scene *scene, struct 
BMLoop *l);
 
 int ED_uvedit_nearest_uv(struct Scene *scene, struct Object *obedit, struct 
Image *ima, float co[2], float uv[2]);
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c   
2009-07-21 05:08:59 UTC (rev 21750)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c   
2009-07-21 08:39:58 UTC (rev 21751)
@@ -1422,3 +1422,62 @@
                }
        }
 }
+
+
+void EDBM_select_swap(BMEditMesh *em) /* exported for UV */
+{
+       BMIter iter;
+       BMVert *eve;
+       BMEdge *eed;
+       BMFace *efa;
+       
+       if(em->bm->selectmode & SCE_SELECT_VERTEX) {
+               BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
+                       if (BM_TestHFlag(eve, BM_HIDDEN))
+                               continue;
+                       BM_Select(em->bm, eve, !BM_TestHFlag(eve, BM_SELECT));
+               }
+       }
+       else if(em->selectmode & SCE_SELECT_EDGE) {
+               BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
+                       if (BM_TestHFlag(eed, BM_HIDDEN))
+                               continue;
+                       BM_Select(em->bm, eed, !BM_TestHFlag(eed, BM_SELECT));
+               }
+       }
+       else {
+               BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+                       if (BM_TestHFlag(efa, BM_HIDDEN))
+                               continue;
+                       BM_Select(em->bm, efa, !BM_TestHFlag(efa, BM_SELECT));
+               }
+
+       }
+//     if (EM_texFaceCheck())
+}
+
+static int select_inverse_mesh_exec(bContext *C, wmOperator *op)
+{
+       Object *obedit= CTX_data_edit_object(C);
+       BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
+       
+       EDBM_select_swap(em);
+       
+       WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+
+       return OPERATOR_FINISHED;       
+}
+
+void MESH_OT_select_inverse(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Select Inverse";
+       ot->idname= "MESH_OT_select_inverse";
+       
+       /* api callbacks */
+       ot->exec= select_inverse_mesh_exec;
+       ot->poll= ED_operator_editmesh;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c

@@ 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