[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