[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