[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35809] branches/bmesh/blender/source/ blender: =bmesh= fixed edge creasing for subsurf

Joseph Eagar joeedh at gmail.com
Sun Mar 27 05:29:29 CEST 2011


Revision: 35809
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35809
Author:   joeedh
Date:     2011-03-27 03:29:27 +0000 (Sun, 27 Mar 2011)
Log Message:
-----------
=bmesh= fixed edge creasing for subsurf

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-03-27 03:14:14 UTC (rev 35808)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-03-27 03:29:27 UTC (rev 35809)
@@ -1850,7 +1850,12 @@
 	int numCol = CustomData_number_of_layers(&em->bm->ldata, CD_MLOOPCOL);
 	int numTex = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
 	int i, j, *index, add_orig;
-
+	int has_crease, has_edge_bweight, has_vert_bweight;
+	
+	has_edge_bweight = CustomData_has_layer(&em->bm->edata, CD_BWEIGHT);
+	has_vert_bweight = CustomData_has_layer(&em->bm->vdata, CD_BWEIGHT);
+	has_crease = CustomData_has_layer(&em->bm->edata, CD_CREASE);
+	
 	dm->deformedOnly = 1;
 	
 	/*don't add origindex layer if one already exists*/
@@ -1889,6 +1894,9 @@
 
 		mv->flag = BMFlags_To_MEFlags(eve);
 
+		if (has_vert_bweight)
+			mv->bweight = (unsigned char)(BM_GetCDf(&bm->vdata, eve, CD_BWEIGHT)*255.0f);
+
 		if (add_orig) *index = i;
 
 		CustomData_from_bmesh_block(&bm->vdata, &dm->vertData, eve->head.data, i);
@@ -1904,6 +1912,11 @@
 		med->v1 = BMINDEX_GET(eed->v1);
 		med->v2 = BMINDEX_GET(eed->v2);
 		med->flag = ME_EDGEDRAW|ME_EDGERENDER;
+
+		if (has_crease)
+			med->crease = (unsigned char)(BM_GetCDf(&bm->edata, eed, CD_CREASE)*255.0f);
+		if (has_edge_bweight)
+			med->bweight = (unsigned char)(BM_GetCDf(&bm->edata, eed, CD_BWEIGHT)*255.0f);
 		
 		med->flag = BMFlags_To_MEFlags(eed);
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-03-27 03:14:14 UTC (rev 35808)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-03-27 03:29:27 UTC (rev 35809)
@@ -1273,7 +1273,8 @@
 	BMEdge *ee;
 	BMIter iter;
 	BMVert *ev;
-	int i;
+	int has_bweight = CustomData_has_layer(&bm->edata, CD_BWEIGHT);
+	int i, has_crease = CustomData_has_layer(&bm->edata, CD_CREASE);
 
 	/* store vertex indices in tmp union */
 	ev = BMIter_New(&iter, bm, BM_VERTS_OF_MESH, NULL);
@@ -1282,11 +1283,11 @@
 
 	ee = BMIter_New(&iter, bm, BM_EDGES_OF_MESH, NULL);
 	for( ; ee; ee=BMIter_Step(&iter)) {
-		if (CustomData_has_layer(&bm->edata, CD_BWEIGHT)) {
+		if (has_bweight) {
 			edge_r->bweight = (unsigned char) (BM_GetCDf(&bm->edata, ee, CD_BWEIGHT)*255.0f);
 		}
 
-		if (CustomData_has_layer(&bm->edata, CD_CREASE)) {
+		if (has_crease) {
 			edge_r->crease = (unsigned char) (BM_GetCDf(&bm->edata, ee, CD_CREASE)*255.0f);
 		}
 
@@ -1294,7 +1295,7 @@
 		if (ee->head.flag & BM_SEAM) edge_r->flag |= ME_SEAM;
 		if (ee->head.flag & BM_SHARP) edge_r->flag |= ME_SHARP;
 #if 0
-		/* this needs setup of f2 field */
+		/* this needs setup of f2 (edge draw flags, if I remember right) field */
 		if (!ee->f2) edge_r->flag |= ME_LOOSEEDGE;
 #endif
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-03-27 03:14:14 UTC (rev 35808)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-03-27 03:29:27 UTC (rev 35809)
@@ -563,7 +563,7 @@
 	for(i = 0; i < totedge; i++, me++) {
 		CCGEdge *e;
 		float crease;
-
+		
 		crease = useFlatSubdiv ? creaseFactor :
 								 me->crease * creaseFactor / 255.0f;
 

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-03-27 03:14:14 UTC (rev 35808)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-03-27 03:29:27 UTC (rev 35809)
@@ -378,6 +378,10 @@
 	
 	i = 0;
 	BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) {
+		float *bweight = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_BWEIGHT);
+
+		mvert->bweight = bweight ? (char)((*bweight)*255) : 0;
+
 		VECCOPY(mvert->co, v->co);
 
 		mvert->no[0] = (short) (v->no[0]*32767.0f);
@@ -399,11 +403,16 @@
 
 	i = 0;
 	BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) {
+		float *crease = CustomData_bmesh_get(&bm->edata, e->head.data, CD_CREASE);
+		float *bweight = CustomData_bmesh_get(&bm->edata, e->head.data, CD_BWEIGHT);
+		
 		medge->v1 = BMINDEX_GET(e->v1);
 		medge->v2 = BMINDEX_GET(e->v2);
-
+		medge->crease = crease ? (char)((*crease)*255) : 0;
+		medge->bweight = bweight ? (char)((*bweight)*255) : 0;
+		
 		medge->flag = BMFlags_To_MEFlags(e);
-
+		
 		BMINDEX_SET(e, i);
 
 		/*copy over customdata*/




More information about the Bf-blender-cvs mailing list