[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21751] branches/bmesh/blender/source/ blender: first pass at the uv code.
Joseph Eagar
joeedh at gmail.com
Tue Jul 21 10:39:58 CEST 2009
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. @@
More information about the Bf-blender-cvs
mailing list