[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22610] branches/bmesh/blender/source/ blender: rearranged some code a bit
Joseph Eagar
joeedh at gmail.com
Tue Aug 18 22:05:10 CEST 2009
Revision: 22610
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22610
Author: joeedh
Date: 2009-08-18 22:05:08 +0200 (Tue, 18 Aug 2009)
Log Message:
-----------
rearranged some code a bit
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/customdata.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/blenkernel/intern/subsurf_ccg.c
branches/bmesh/blender/source/blender/bmesh/bmesh.h
branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
branches/bmesh/blender/source/blender/bmesh/docs/bmesh_design.mwiki
branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
branches/bmesh/blender/source/blender/editors/mesh/editmesh_mods.c
branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h 2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h 2009-08-18 20:05:08 UTC (rev 22610)
@@ -162,12 +162,13 @@
void CustomData_copy_data(const struct CustomData *source,
struct CustomData *dest, int source_index,
int dest_index, int count);
+void CustomData_copy_elements(int type, void *source, void *dest, int count);
void CustomData_em_copy_data(const struct CustomData *source,
struct CustomData *dest, void *src_block,
void **dest_block);
void CustomData_bmesh_copy_data(const struct CustomData *source,
- struct CustomData *dest,void *src_block,
- void **dest_block);
+ struct CustomData *dest, void *src_block,
+ void **dest_block);
/* frees data in a CustomData object
* return 1 on success, 0 on failure
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2009-08-18 20:05:08 UTC (rev 22610)
@@ -282,27 +282,75 @@
{
DMFaceIter *iter = dm->newFaceIter(dm);
DMLoopIter *liter;
+ CustomData *oldata, *opdata;
MPoly *mpoly;
MLoop *mloop;
- int i;
+ int l, i, j, lasttype;
+ oldata = dm->getLoopDataLayout(dm);
+ opdata = dm->getFaceDataLayout(dm);
+
+ CustomData_copy(oldata, ldata, CD_MASK_DERIVEDMESH, CD_CALLOC, totloop);
+ CustomData_copy(opdata, pdata, CD_MASK_DERIVEDMESH, CD_CALLOC, dm->getNumFaces(dm));
+
mloop = MEM_callocN(sizeof(MLoop)*totloop, "MLoop from dm_add_polys_from_iter");
+ CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
mpoly = MEM_callocN(sizeof(MPoly)*dm->getNumFaces(dm), "MPoly from dm_add_polys_from_iter");
-
- CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
CustomData_add_layer(pdata, CD_MPOLY, CD_ASSIGN, mpoly, dm->getNumFaces(dm));
- i = 0;
+ l = 0;
for (; !iter->done; iter->step(iter), mpoly++) {
mpoly->flag = iter->flags;
- mpoly->loopstart = i;
+ mpoly->loopstart = l;
mpoly->totloop = iter->len;
mpoly->mat_nr = iter->mat_nr;
+ j = 0;
+ lasttype = -1;
+ for (i=0; i<opdata->totlayer; i++) {
+ void *e1, *e2;
+
+ if (opdata->layers[i].type == CD_MPOLY)
+ continue;
+
+ e1 = iter->getCDData(iter, opdata->layers[i].type, j);
+ e2 = CustomData_get_layer_n(pdata, opdata->layers[i].type, j);
+
+ CustomData_copy_elements(opdata->layers[i].type, e1, e2, 1);
+
+ if (opdata->layers[i].type == lasttype)
+ j++;
+ else
+ j = 0;
+
+ lasttype = opdata->layers[i].type;
+ }
+
liter = iter->getLoopsIter(iter);
- for (; !liter->done; liter->step(liter), mloop++, i++) {
+ for (; !liter->done; liter->step(liter), mloop++, l++) {
mloop->v = liter->vindex;
mloop->e = liter->eindex;
+
+ j = 0;
+ lasttype = -1;
+ for (i=0; i<oldata->totlayer; i++) {
+ void *e1, *e2;
+
+ if (oldata->layers[i].type == CD_MLOOP)
+ continue;
+
+ e1 = liter->getLoopCDData(liter, oldata->layers[i].type, j);
+ e2 = CustomData_get_layer_n(ldata, oldata->layers[i].type, j);
+
+ CustomData_copy_elements(oldata->layers[i].type, e1, e2, 1);
+
+ if (oldata->layers[i].type == lasttype)
+ j++;
+ else
+ j = 0;
+
+ lasttype = oldata->layers[i].type;
+ }
}
}
iter->free(iter);
@@ -312,33 +360,21 @@
{
DMFaceIter *iter = source->newFaceIter(source);
DMLoopIter *liter;
- MPoly *mpoly;
- MLoop *mloop;
- int i;
+ int totloop = 0;
- mloop = MEM_callocN(sizeof(MLoop)*source->numLoopData, "MLoop from dm_add_polys_from_iter");
- mpoly = MEM_callocN(sizeof(MPoly)*source->getNumFaces(source), "MPoly from dm_add_polys_from_iter");
-
- CustomData_add_layer(&target->loopData, CD_MLOOP, CD_ASSIGN, mloop, source->numLoopData);
- CustomData_add_layer(&target->polyData, CD_MPOLY, CD_ASSIGN, mpoly, source->getNumFaces(source));
-
- target->numLoopData = source->numLoopData;
- target->numPolyData = source->numPolyData;
-
- i = 0;
- for (; !iter->done; iter->step(iter), mpoly++) {
- mpoly->flag = iter->flags;
- mpoly->loopstart = i;
- mpoly->totloop = iter->len;
- mpoly->mat_nr = iter->mat_nr;
-
+ for (; !iter->done; iter->step(iter)) {
liter = iter->getLoopsIter(iter);
- for (; !liter->done; liter->step(liter), mloop++, i++) {
- mloop->v = liter->vindex;
- mloop->e = liter->eindex;
+ for (; !liter->done; liter->step(liter)) {
+ totloop++;
}
}
+
iter->free(iter);
+
+ dm_add_polys_from_iter(&target->loopData, &target->polyData, source, totloop);
+
+ target->numLoopData = totloop;
+ target->numPolyData = source->getNumFaces(source);
}
void DM_to_mesh(DerivedMesh *dm, Mesh *me)
@@ -1044,7 +1080,7 @@
}
}
-static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
+static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, int has_vcol, int matnr))
{
emDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
}
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2009-08-18 20:05:08 UTC (rev 22610)
@@ -1311,7 +1311,7 @@
void *cddm_loopiter_getcddata(void *self, int type, int layer)
{
- CDDM_FaceIter *iter = self;
+ CDDM_LoopIter *iter = self;
if (layer == -1) return CustomData_get(&iter->cddm->dm.loopData,
iter->head.index, type);
@@ -1321,13 +1321,13 @@
void *cddm_loopiter_getvertcddata(void *self, int type, int layer)
{
- CDDM_FaceIter *iter = self;
+ CDDM_LoopIter *iter = self;
if (layer == -1) return CustomData_get(&iter->cddm->dm.vertData,
- iter->cddm->mloop[iter->head.index].v,
+ iter->cddm->mloop[iter->head.vindex].v,
type);
else return CustomData_get_n(&iter->cddm->dm.vertData, type,
- iter->cddm->mloop[iter->head.index].v, layer);
+ iter->cddm->mloop[iter->head.vindex].v, layer);
}
DMLoopIter *cddmiter_get_loopiter(void *self)
@@ -1406,8 +1406,6 @@
CustomData_copy_data(&source->vertData, &dm->vertData, 0, 0, numVerts);
CustomData_copy_data(&source->edgeData, &dm->edgeData, 0, 0, numEdges);
CustomData_copy_data(&source->faceData, &dm->faceData, 0, 0, numFaces);
- CustomData_copy_data(&source->loopData, &dm->loopData, 0, 0, numLoops);
- CustomData_copy_data(&source->polyData, &dm->polyData, 0, 0, numPolys);
/* now add mvert/medge/mface layers */
cddm->mvert = source->dupVertArray(source);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2009-08-18 20:05:08 UTC (rev 22610)
@@ -1465,6 +1465,16 @@
data->layers[i].flag |= CD_FLAG_NOCOPY;
}
+void CustomData_copy_elements(int type, void *source, void *dest, int count)
+{
+ const LayerTypeInfo *typeInfo = layerType_getInfo(type);
+
+ if (typeInfo->copy)
+ typeInfo->copy(source, dest, count);
+ else
+ memcpy(dest, source, typeInfo->size*count);
+}
+
void CustomData_copy_data(const CustomData *source, CustomData *dest,
int source_index, int dest_index, int count)
{
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2009-08-18 20:05:08 UTC (rev 22610)
@@ -275,6 +275,9 @@
/*private variables, for number of verts/edges/faces
within the above hash/table members*/
int tv, te, tf;
+
+ /*customdata layout of the tesselated faces*/
+ CustomData tessface_layout;
} EditDerivedBMesh;
static void bmdm_recalc_lookups(EditDerivedBMesh *bmdm)
@@ -1312,6 +1315,8 @@
iter->head.flags = BMFlags_To_MEFlags(iter->f);
iter->head.index++;
+ iter->head.len = iter->f->len;
+
iter->nextf = BMIter_Step(&iter->iter);
if (!iter->nextf) iter->head.done = 1;
@@ -1330,16 +1335,16 @@
{
bmDM_loopIter *iter = self;
- iter->l = iter->nextl;
+ iter->l = BMIter_Step(&iter->iter);
+ if (!iter->l) {
+ iter->head.done = 1;
+ return;
+ }
bmvert_to_mvert(iter->l->v, &iter->head.v);
iter->head.index++;
iter->head.vindex = BMINDEX_GET(iter->l->v);
iter->head.eindex = BMINDEX_GET(iter->l->e);
-
- iter->nextl = BMIter_Step(&iter->iter);
-
- if (!iter->nextl) iter->head.done = 1;
}
void *bmDM_getLoopCDData(void *self, int type, int layer)
@@ -1378,15 +1383,15 @@
iter->bm = fiter->bm;
iter->f = fiter->f;
- iter->nextl = BMIter_New(&iter->iter, iter->bm, BM_LOOPS_OF_FACE, iter->f);
+ iter->l = BMIter_New(&iter->iter, iter->bm, BM_LOOPS_OF_FACE, iter->f);
iter->head.step = bmDM_loopIterStep;
iter->head.getLoopCDData = bmDM_getLoopCDData;
iter->head.getVertCDData = bmDM_getVertCDData;
- bmvert_to_mvert(iter->nextl->v, &iter->head.v);
- iter->head.vindex = BMINDEX_GET(iter->nextl->v);
- iter->head.eindex = BMINDEX_GET(iter->nextl->e);
+ bmvert_to_mvert(iter->l->v, &iter->head.v);
+ iter->head.vindex = BMINDEX_GET(iter->l->v);
+ iter->head.eindex = BMINDEX_GET(iter->l->e);
return (DMLoopIter*) iter;
}
@@ -1450,19 +1455,76 @@
}
}
+CustomData *bmDm_getVertDataLayout(DerivedMesh *dm)
+{
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+
+ return &bmdm->tc->bm->vdata;
+}
+
+CustomData *bmDm_getEdgeDataLayout(DerivedMesh *dm)
+{
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+
+ return &bmdm->tc->bm->edata;
+}
+
+CustomData *bmDm_getTessFaceDataLayout(DerivedMesh *dm)
+{
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list