[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42305] branches/bmesh/blender/source/ blender: split BMFlags_To_MEFlags & MEFlags_To_BMFlags into type specific calls, since we always know the types with these functions theres not much point in having generic calls with a type switch .
Campbell Barton
ideasman42 at gmail.com
Thu Dec 1 02:42:03 CET 2011
Revision: 42305
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42305
Author: campbellbarton
Date: 2011-12-01 01:41:56 +0000 (Thu, 01 Dec 2011)
Log Message:
-----------
split BMFlags_To_MEFlags & MEFlags_To_BMFlags into type specific calls, since we always know the types with these functions theres not much point in having generic calls with a type switch.
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/modifiers_bmesh.c
branches/bmesh/blender/source/blender/bmesh/bmesh.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-12-01 00:34:59 UTC (rev 42304)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-12-01 01:41:56 UTC (rev 42305)
@@ -2021,7 +2021,7 @@
normal_float_to_short_v3(mv->no, eve->no);
- mv->flag = BMFlags_To_MEFlags(eve);
+ mv->flag = BM_Vert_Flag_To_MEFlag(eve);
if (has_vert_bweight)
mv->bweight = (unsigned char)(BM_GetCDf(&bm->vdata, eve, CD_BWEIGHT)*255.0f);
@@ -2047,7 +2047,7 @@
if (has_edge_bweight)
med->bweight = (unsigned char)(BM_GetCDf(&bm->edata, eed, CD_BWEIGHT)*255.0f);
- med->flag = BMFlags_To_MEFlags(eed);
+ med->flag = BM_Edge_Flag_To_MEFlag(eed);
CustomData_from_bmesh_block(&bm->edata, &dm->edgeData, eed->head.data, i);
if (add_orig) *index = i;
@@ -2068,7 +2068,7 @@
mf->v3 = BM_GetIndex(l[2]->v);
mf->v4 = 0;
mf->mat_nr = efa->mat_nr;
- mf->flag = BMFlags_To_MEFlags(efa);
+ mf->flag = BM_Face_Flag_To_MEFlag(efa);
*index = add_orig ? BM_GetIndex(efa) : *(int*)CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_ORIGINDEX);
*polyindex = BM_GetIndex(efa);
@@ -2085,7 +2085,7 @@
MPoly *mp = &mpoly[i];
mp->totloop = efa->len;
- mp->flag = BMFlags_To_MEFlags(efa);
+ mp->flag = BM_Face_Flag_To_MEFlag(efa);
mp->loopstart = j;
mp->mat_nr = efa->mat_nr;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2011-12-01 00:34:59 UTC (rev 42304)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2011-12-01 01:41:56 UTC (rev 42305)
@@ -1294,11 +1294,9 @@
{
copy_v3_v3(vert_r->co, ev->co);
- vert_r->no[0] = (short)(ev->no[0] * 32767.0f);
- vert_r->no[1] = (short)(ev->no[1] * 32767.0f);
- vert_r->no[2] = (short)(ev->no[2] * 32767.0f);
+ normal_float_to_short_v3(vert_r->no, ev->no);
- vert_r->flag = BMFlags_To_MEFlags(ev);
+ vert_r->flag = BM_Vert_Flag_To_MEFlag(ev);
if (CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
vert_r->bweight = (unsigned char) (BM_GetCDf(&bm->vdata, ev, CD_BWEIGHT)*255.0f);
@@ -1341,7 +1339,7 @@
edge_r->crease = (unsigned char) (BM_GetCDf(&bm->edata, e, CD_CREASE)*255.0f);
}
- edge_r->flag = BMFlags_To_MEFlags(e);
+ edge_r->flag = BM_Edge_Flag_To_MEFlag(e);
edge_r->v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(bmdm->vhash, e->v1));
edge_r->v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(bmdm->vhash, e->v2));
@@ -1363,7 +1361,7 @@
ef = l[0]->f;
face_r->mat_nr = (unsigned char) ef->mat_nr;
- face_r->flag = BMFlags_To_MEFlags(ef);
+ face_r->flag = BM_Face_Flag_To_MEFlag(ef);
face_r->v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(bmdm->vhash, l[0]->v));
face_r->v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(bmdm->vhash, l[1]->v));
@@ -1383,11 +1381,9 @@
for( ; ev; ev = BMIter_Step(&iter), ++vert_r) {
copy_v3_v3(vert_r->co, ev->co);
- vert_r->no[0] = (short) (ev->no[0] * 32767.0);
- vert_r->no[1] = (short) (ev->no[1] * 32767.0);
- vert_r->no[2] = (short) (ev->no[2] * 32767.0);
+ normal_float_to_short_v3(vert_r->no, ev->no);
- vert_r->flag = BMFlags_To_MEFlags(ev);
+ vert_r->flag = BM_Vert_Flag_To_MEFlag(ev);
if (CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
vert_r->bweight = (unsigned char) (BM_GetCDf(&bm->vdata, ev, CD_BWEIGHT)*255.0f);
@@ -1415,7 +1411,7 @@
edge_r->crease = (unsigned char) (BM_GetCDf(&bm->edata, ee, CD_CREASE)*255.0f);
}
- edge_r->flag = BMFlags_To_MEFlags(ee);
+ edge_r->flag = BM_Edge_Flag_To_MEFlag(ee);
edge_r->v1 = (int)BM_GetIndex(ee->v1);
edge_r->v2 = (int)BM_GetIndex(ee->v2);
@@ -1438,7 +1434,7 @@
face_r->mat_nr = (unsigned char) ef->mat_nr;
- face_r->flag = BMFlags_To_MEFlags(ef);
+ face_r->flag = BM_Face_Flag_To_MEFlag(ef);
face_r->v1 = BM_GetIndex(l[0]->v);
face_r->v2 = BM_GetIndex(l[1]->v);
@@ -1479,7 +1475,7 @@
i = 0;
BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
- poly_r->flag = BMFlags_To_MEFlags(f);
+ poly_r->flag = BM_Face_Flag_To_MEFlag(f);
poly_r->loopstart = i;
poly_r->totloop = f->len;
poly_r->mat_nr = f->mat_nr;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c 2011-12-01 00:34:59 UTC (rev 42304)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c 2011-12-01 01:41:56 UTC (rev 42305)
@@ -148,7 +148,7 @@
for (i=0; i<totvert; i++, mv++) {
v = BM_Make_Vert(bm, mv->co, NULL);
normal_short_to_float_v3(v->no, mv->no);
- v->head.hflag = MEFlags_To_BMFlags(mv->flag, BM_VERT);
+ v->head.hflag = BM_Vert_Flag_From_MEFlag(mv->flag);
CustomData_to_bmesh_block(&dm->vertData, &bm->vdata, i, &v->head.data);
vtable[i] = v;
@@ -160,7 +160,7 @@
for (i=0; i<totedge; i++, me++) {
e = BM_Make_Edge(bm, vtable[me->v1], vtable[me->v2], NULL, 0);
- e->head.hflag = MEFlags_To_BMFlags(me->flag, BM_EDGE);
+ e->head.hflag = BM_Edge_Flag_From_MEFlag(me->flag);
CustomData_to_bmesh_block(&dm->edgeData, &bm->edata, i, &e->head.data);
etable[i] = e;
@@ -190,7 +190,7 @@
if (!f)
continue;
- f->head.hflag = MEFlags_To_BMFlags(mp->flag, BM_FACE);
+ f->head.hflag = BM_Vert_Flag_From_MEFlag(mp->flag);
f->mat_nr = mp->mat_nr;
l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h 2011-12-01 00:34:59 UTC (rev 42304)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h 2011-12-01 01:41:56 UTC (rev 42305)
@@ -303,6 +303,8 @@
/*converts a bmesh to an editmesh*/
struct EditMesh *bmesh_to_editmesh ( BMesh *bm );
+/* unused, type spesific functions below */
+#if 0
/*convert between bmesh and Mesh flags*/
short BMFlags_To_MEFlags(void *element);
@@ -312,7 +314,18 @@
parameter (the three defines map to
MVert, MEdge, and MPoly, respectively).*/
char MEFlags_To_BMFlags(const short hflag, const char htype);
+#endif
+/* flag conversion funcs */
+char BM_Face_Flag_From_MEFlag(const char mflag);
+char BM_Edge_Flag_From_MEFlag(const short mflag);
+char BM_Vert_Flag_From_MEFlag(const char mflag);
+/* reverse */
+char BM_Face_Flag_To_MEFlag(BMFace *f);
+short BM_Edge_Flag_To_MEFlag(BMEdge *e);
+char BM_Vert_Flag_To_MEFlag(BMVert *v);
+
+
/*convert MLoop*** in a bmface to mtface and mcol in
an MFace*/
void BM_loops_to_corners ( BMesh *bm, struct Mesh *me, int findex,
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2011-12-01 00:34:59 UTC (rev 42304)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2011-12-01 01:41:56 UTC (rev 42305)
@@ -626,6 +626,62 @@
return bm;
}
+/* ME -> BM */
+char BM_Vert_Flag_From_MEFlag(const char meflag)
+{
+ return ( ((meflag & SELECT) ? BM_SELECT : 0) |
+ ((meflag & ME_HIDE) ? BM_HIDDEN : 0)
+ );
+}
+char BM_Edge_Flag_From_MEFlag(const short meflag)
+{
+ return ( ((meflag & SELECT) ? BM_SELECT : 0) |
+ ((meflag & ME_SEAM) ? BM_SEAM : 0) |
+ ((meflag & ME_SHARP) ? BM_SHARP : 0) |
+ ((meflag & ME_HIDE) ? BM_HIDDEN : 0)
+ );
+}
+char BM_Face_Flag_From_MEFlag(const char meflag)
+{
+ return ( ((meflag & ME_FACE_SEL) ? BM_SELECT : 0) |
+ ((meflag & ME_SMOOTH) ? BM_SMOOTH : 0) |
+ ((meflag & ME_HIDE) ? BM_HIDDEN : 0)
+ );
+}
+
+/* BM -> ME */
+char BM_Vert_Flag_To_MEFlag(BMVert *eve)
+{
+ const char hflag= eve->head.hflag;
+
+ return ( ((hflag & BM_SELECT) ? SELECT : 0) |
+ ((hflag & BM_HIDDEN) ? ME_HIDE : 0)
+ );
+}
+short BM_Edge_Flag_To_MEFlag(BMEdge *eed)
+{
+ const char hflag= eed->head.hflag;
+
+ return ( ((hflag & BM_SELECT) ? SELECT : 0) |
+ ((hflag & BM_SEAM) ? ME_SEAM : 0) |
+ ((hflag & BM_SHARP) ? ME_SHARP : 0) |
+ ((hflag & BM_HIDDEN) ? ME_HIDE : 0) |
+ ((BM_Wire_Edge(NULL, eed)) ? ME_LOOSEEDGE : 0) | /* not typical */
+ (ME_EDGEDRAW | ME_EDGERENDER)
+ );
+}
+char BM_Face_Flag_To_MEFlag(BMFace *efa)
+{
+ const char hflag= efa->head.hflag;
+
+ return ( ((hflag & BM_SELECT) ? ME_FACE_SEL : 0) |
+ ((hflag & BM_SMOOTH) ? ME_SMOOTH : 0) |
+ ((hflag & BM_HIDDEN) ? ME_HIDE : 0)
+ );
+}
+
+/* unused, type spesific functions below */
+#if 0
/*
BM FLAGS TO ME FLAGS
@@ -633,30 +689,22 @@
which much be either a BMVert, BMEdge,
or BMFace, converted to mesh flags.
*/
-
short BMFlags_To_MEFlags(void *element)
{
const char src_htype= ((BMHeader *)element)->htype;
- const char src_hflag= ((BMHeader *)element)->hflag;
- short dst_flag= 0;
-
- if (src_hflag & BM_HIDDEN) dst_flag |= ME_HIDE;
-
if (src_htype == BM_FACE) {
- if (src_hflag & BM_SELECT) dst_flag |= ME_FACE_SEL;
- if (src_hflag & BM_SMOOTH) dst_flag |= ME_SMOOTH;
- } else if (src_htype == BM_EDGE) {
- if (src_hflag & BM_SELECT) dst_flag |= SELECT;
- if (src_hflag & BM_SEAM) dst_flag |= ME_SEAM;
- if (src_hflag & BM_SHARP) dst_flag |= ME_SHARP;
- if (BM_Wire_Edge(NULL, element)) dst_flag |= ME_LOOSEEDGE;
- dst_flag |= ME_EDGEDRAW | ME_EDGERENDER;
- } else if (src_htype == BM_VERT) {
- if (src_hflag & BM_SELECT) dst_flag |= SELECT;
+ return BM_Face_Flag_To_MEFlag(element);
}
-
- return dst_flag;
+ else if (src_htype == BM_EDGE) {
+ return BM_Edge_Flag_To_MEFlag(element);
+ }
+ else if (src_htype == BM_VERT) {
+ return BM_Vert_Flag_To_MEFlag(element);
+ }
+ else {
+ return 0;
+ }
}
/*
@@ -670,21 +718,17 @@
*/
char MEFlags_To_BMFlags(const short hflag, const char htype)
{
- char f= 0;
-
if (htype == BM_FACE) {
- if (hflag & ME_FACE_SEL) f |= BM_SELECT;
- if (hflag & ME_SMOOTH) f |= BM_SMOOTH;
- if (hflag & ME_HIDE) f |= BM_HIDDEN;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list