[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59909] branches/ soc-2013-meshdata_transfer/source/blender: code rewrite: re-adding transfer by index for vertex colors and UVs
Walid Shouman
eng.walidshouman at gmail.com
Sat Sep 7 07:59:05 CEST 2013
Revision: 59909
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59909
Author: walid
Date: 2013-09-07 05:59:05 +0000 (Sat, 07 Sep 2013)
Log Message:
-----------
code rewrite: re-adding transfer by index for vertex colors and UVs
Modified Paths:
--------------
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
branches/soc-2013-meshdata_transfer/source/blender/editors/mesh/mesh_data.c
Modified: branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c 2013-09-07 04:35:26 UTC (rev 59908)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c 2013-09-07 05:59:05 UTC (rev 59909)
@@ -100,7 +100,7 @@
CustomData *cd_dst, BMElem **array_dst, int array_dst_count,
const int layer_type, const struct ReplaceLayerInfo *UNUSED_replace_info);
-static void BM_mesh_aligned_transfer(BMesh *bm_src, BMesh *bm_dst, const char itype, const int layer_type,
+static void BM_mesh_aligned_transfer(BMesh *bm_src, BMesh *bm_dst, const char htype, const int layer_type,
const struct ReplaceLayerInfo *replace_info);
bool BM_mesh_multi_layer_copy2(BMesh *bm_src, BMesh *bm_dst, const struct ReplaceLayerInfo *replace_info,
@@ -147,12 +147,13 @@
if(transfer_mode == TRANSFER_BY_INDEX) {
switch (type) {
case CD_SHAPEKEY:
+ case CD_MDEFORMVERT:
BM_mesh_aligned_transfer(bm_src, bm_dst, BM_VERTS_OF_MESH, CD_SHAPEKEY, replace_info);
break;
- case CD_MDEFORMVERT:
- BM_mesh_aligned_transfer(bm_src, bm_dst, BM_VERTS_OF_MESH, CD_MDEFORMVERT, replace_info);
- break;
+ case CD_MLOOPCOL:
+ case CD_MLOOPUV:
+ BM_mesh_aligned_transfer(bm_src, bm_dst, BM_LOOP, type, replace_info);
}
}
@@ -397,30 +398,71 @@
}
}
-static void BM_mesh_aligned_transfer(BMesh *bm_src, BMesh *bm_dst, const char itype, const int layer_type,
+static void BM_mesh_aligned_transfer(BMesh *bm_src, BMesh *bm_dst, const char htype, const int layer_type,
const struct ReplaceLayerInfo *replace_info)
{
int array_dst_len;
int array_src_len;
- BMElem **array_src = BM_iter_as_arrayN(bm_src, itype, NULL, &array_src_len, NULL, 0);
- BMElem **array_dst = BM_iter_as_arrayN(bm_dst, itype, NULL, &array_dst_len, NULL, 0);
+ BMElem **array_src;
+ BMElem **array_dst;
CustomData *cd_dst;
CustomData *cd_src;
+ int b; //counter
+ BMFace *f;
+ BMLoop *l;
+ BMIter fiter, liter;
+
+ switch (htype) {
+ case BM_VERT:
+ array_src = BM_iter_as_arrayN(bm_src, BM_VERTS_OF_MESH, NULL, &array_src_len, NULL, 0);
+ array_dst = BM_iter_as_arrayN(bm_dst, BM_VERTS_OF_MESH, NULL, &array_dst_len, NULL, 0);
+ break;
+
+ case BM_LOOP:
+ array_src_len = bm_src->totloop;
+ array_dst_len = bm_dst->totloop;
+ array_src = MEM_mallocN(sizeof(*array_src) * array_src_len, "array_src bmesh_data_transfer.c");
+ array_dst = MEM_mallocN(sizeof(*array_dst) * array_dst_len, "array_dst bmesh_data_transfer.c");
+ b = 0;
+ BM_ITER_MESH (f, &fiter, bm_src, BM_FACES_OF_MESH) {
+ BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
+ array_src[b] = (BMElem*) l;
+ b++;
+ }
+ }
+
+ b = 0;
+ BM_ITER_MESH (f, &fiter, bm_dst, BM_FACES_OF_MESH) {
+ BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
+ array_dst[b] = (BMElem*) l;
+ b++;
+ }
+ }
+
+ break;
+ }
+
+
/* this could be its own function even */
- switch (itype) {
- case BM_VERTS_OF_MESH:
+ switch (htype) {
+ case BM_VERT:
cd_src = &bm_src->vdata;
cd_dst = &bm_dst->vdata;
break;
- case BM_EDGES_OF_MESH:
+ case BM_EDGE:
cd_src = &bm_src->edata;
cd_dst = &bm_dst->edata;
break;
+ case BM_LOOP:
+ cd_src = &bm_src->ldata;
+ cd_dst = &bm_dst->ldata;
+ break;
+
///should the pdata be associated to the FACES_OF_MESH?
}
Modified: branches/soc-2013-meshdata_transfer/source/blender/editors/mesh/mesh_data.c
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/editors/mesh/mesh_data.c 2013-09-07 04:35:26 UTC (rev 59908)
+++ branches/soc-2013-meshdata_transfer/source/blender/editors/mesh/mesh_data.c 2013-09-07 05:59:05 UTC (rev 59909)
@@ -648,6 +648,10 @@
return false;
}
+ if(!BM_mesh_data_copy2(bm_src, bm_dst, &replace_info, CD_MLOOPUV)) {
+ return false;
+ }
+
//transfer the BMesh back to Mesh
BM_mesh_bm_to_me(bm_src, me_src, FALSE);
BM_mesh_bm_to_me(bm_dst, me_dst, TRUE);
@@ -904,6 +908,10 @@
return false;
}
+ if(!BM_mesh_data_copy2(bm_src, bm_dst, &replace_info, CD_MLOOPCOL)) {
+ return false;
+ }
+
//transfer the BMesh back to Mesh
BM_mesh_bm_to_me(bm_src, me_src, FALSE);
BM_mesh_bm_to_me(bm_dst, me_dst, TRUE);
More information about the Bf-blender-cvs
mailing list