Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-04-16 08:17:33 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-04-16 08:17:33 +0400
commitd89db25c53b4b00038061dc15fede87dd36276a0 (patch)
tree9af1a6df0b91d47d27b01e563f8c1ba3d7024252 /source/blender/blenkernel/intern/editderivedmesh.c
parentd9fa08e73d71732f3170d3817e5ab51f72c62c82 (diff)
bmesh api todo:
emDM_getTessFaceDataArray now returns UV's and Colors from editmode loops.
Diffstat (limited to 'source/blender/blenkernel/intern/editderivedmesh.c')
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index abc74983d2b..c53b11aa60c 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -1492,35 +1492,49 @@ static void *emDM_getTessFaceDataArray(DerivedMesh *dm, int type)
{
EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
BMesh *bm= bmdm->tc->bm;
- BMFace *efa;
- char *data, *bmdata;
void *datalayer;
- int index /*, offset*/ /*UNUSED */, size, i;
datalayer = DM_get_tessface_data_layer(dm, type);
if (datalayer)
return datalayer;
- /* layers are store per face for editmesh, we convert to a tbmporary
+ /* layers are store per face for editmesh, we convert to a temporary
* data layer array in the derivedmesh when these are requested */
if (type == CD_MTFACE || type == CD_MCOL) {
- index = CustomData_get_layer_index(&bm->pdata, type);
+ const int type_from = (type == CD_MTFACE) ? CD_MTEXPOLY : CD_MLOOPCOL;
+ int index;
+ char *data, *bmdata;
+ index = CustomData_get_layer_index(&bm->pdata, type_from);
if (index != -1) {
/* offset = bm->pdata.layers[index].offset; */ /* UNUSED */
- size = CustomData_sizeof(type);
+ const int size = CustomData_sizeof(type);
+ int i, j;
DM_add_tessface_layer(dm, type, CD_CALLOC, NULL);
index = CustomData_get_layer_index(&dm->faceData, type);
dm->faceData.layers[index].flag |= CD_FLAG_TEMPORARY;
data = datalayer = DM_get_tessface_data_layer(dm, type);
- for (i=0; i<bmdm->tc->tottri; i++, data+=size) {
- efa = bmdm->tc->looptris[i][0]->f;
- /* BMESH_TODO: need to still add tface data,
- * derived from the loops.*/
- bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, type);
- memcpy(data, bmdata, size);
+
+ if (type == CD_MTFACE) {
+ for (i = 0; i < bmdm->tc->tottri; i++, data += size) {
+ BMFace *efa = bmdm->tc->looptris[i][0]->f;
+ bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
+ ME_MTEXFACE_CPY(((MTFace *)data), ((MTexPoly *)bmdata));
+ for (j = 0; j < 3; j++) {
+ bmdata = CustomData_bmesh_get(&bm->ldata, bmdm->tc->looptris[i][j]->head.data, CD_MLOOPUV);
+ copy_v2_v2(((MTFace *)data)->uv[j], ((MLoopUV *)bmdata)->uv);
+ }
+ }
+ }
+ else {
+ for (i = 0; i < bmdm->tc->tottri; i++, data += size) {
+ for (j = 0; j < 3; j++) {
+ bmdata = CustomData_bmesh_get(&bm->ldata, bmdm->tc->looptris[i][j]->head.data, CD_MLOOPCOL);
+ MESH_MLOOPCOL_TO_MCOL(((MLoopCol *)bmdata), (((MCol *)data) + j));
+ }
+ }
}
}
}