Revision: 59910 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59910 Author: walid Date: 2013-09-07 06:11:32 +0000 (Sat, 07 Sep 2013) Log Message: ----------- code rewrite: code-cleanup removing BM_mesh_multi_layer_copy2()
Modified Paths: -------------- branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.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 05:59:05 UTC (rev 59909) +++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c 2013-09-07 06:11:32 UTC (rev 59910) @@ -103,8 +103,6 @@ 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, - TransferMode transfer_mode, int type, void *match_table); bool BM_mesh_data_copy2(BMesh *bm_src, BMesh* bm_dst, const struct ReplaceLayerInfo *replace_info, int type) { @@ -198,184 +196,6 @@ return true; } -bool BM_mesh_multi_layer_copy2(BMesh *bm_src, BMesh *bm_dst, const struct ReplaceLayerInfo *replace_info, - TransferMode transfer_mode, int type, void *match_table) -{ - - BMIter liter, fiter, iter; - BMFace *UNUSED(f_src), *f_dst, *f; - BMVert *v_src, *v_dst, *v; - BMLoop *UNUSED(l_src), *UNUSED(l_dst), *l; - int a, b; - - //layer management - int src_lay_iter, dst_lay_iter; - int src_lay_start = replace_info->src_lay_start; - int src_lay_end = replace_info->src_lay_end; - int dst_lay_start = replace_info->dst_lay_start; - -//+-------------+ -//| | -//| Block 1 | //Switch over the copy method ... either by index or interpolate -//| | -//+-------------+ - - - //transfer by indices (1.0) - // | - // | - // V - - if(transfer_mode == TRANSFER_BY_INDEX) { - - if ((bm_dst->totface != bm_src->totface) || (bm_dst->totvert != bm_src->totvert)) - return false; - - for (src_lay_iter = src_lay_start, dst_lay_iter = dst_lay_start; src_lay_iter <= src_lay_end; - src_lay_iter++, dst_lay_iter++) { - - //+-----------------+ - //| sub_Block 1.0.a | //paste into each loop's/vert's value - //+-----------------+ - - switch (type) { - case CD_MLOOPCOL: - { - BMFace_match *f_match_table = (BMFace_match*) match_table; - - //fix the layers - int CD_src = CustomData_get_n_offset(&bm_src->ldata, CD_MLOOPCOL, src_lay_iter); - int CD_dst = CustomData_get_n_offset(&bm_dst->ldata, CD_MLOOPCOL, dst_lay_iter); - - //as we can see here, storing l_src_dst may seem a redundant step ... however its made - //as a matter of consistency and being over cautious - BM_ITER_MESH_INDEX (f, &fiter, bm_dst, BM_FACES_OF_MESH, a) { - BMLoop **l_src_grp = f_match_table[a].l_src; - BMLoop **l_dst_grp = f_match_table[a].l_dst; - - f_dst = f_match_table[a].f_dst; - BM_ITER_ELEM_INDEX (l, &liter, f_dst, BM_LOOPS_OF_FACE, b) { - MLoopCol *lcol_src = BM_ELEM_CD_GET_VOID_P(l_src_grp[b], CD_src); - MLoopCol *lcol_dst = BM_ELEM_CD_GET_VOID_P(l_dst_grp[b], CD_dst); - CustomData_data_copy_value(CD_MLOOPCOL, lcol_src, lcol_dst); - } - - } - - break; - } - case CD_MLOOPUV: - { - BMFace_match *f_match_table = (BMFace_match*) match_table; - - //fix the layers - int CD_src = CustomData_get_n_offset(&bm_src->ldata, CD_MLOOPUV, src_lay_iter); - int CD_dst = CustomData_get_n_offset(&bm_dst->ldata, CD_MLOOPUV, dst_lay_iter); - - //as we can see here, storing l_src_dst may seem a redundant step ... however its made - //as a matter of consistency and being over cautious - BM_ITER_MESH_INDEX (f, &fiter, bm_dst, BM_FACES_OF_MESH, a) { - BMLoop **l_src_grp = f_match_table[a].l_src; - BMLoop **l_dst_grp = f_match_table[a].l_dst; - - f_dst = f_match_table[a].f_dst; - BM_ITER_ELEM_INDEX (l, &liter, f_dst, BM_LOOPS_OF_FACE, b) { - MLoopUV *lcol_src = BM_ELEM_CD_GET_VOID_P(l_src_grp[b], CD_src); - MLoopUV *lcol_dst = BM_ELEM_CD_GET_VOID_P(l_dst_grp[b], CD_dst); - CustomData_data_copy_value(CD_MLOOPUV, lcol_src, lcol_dst); - } - - } - - break; - } - case CD_SHAPEKEY: - { - BMVert_match *v_match_table = (BMVert_match*) match_table; - - //fix the layers - int CD_basis_src = CustomData_get_n_offset(&bm_src->vdata, CD_SHAPEKEY, 0); //get the offset of the basis - int CD_basis_dst = CustomData_get_n_offset(&bm_dst->vdata, CD_SHAPEKEY, 0); - int CD_offset_src = CustomData_get_n_offset(&bm_src->vdata, CD_SHAPEKEY,src_lay_iter); //get the offset of the - int CD_offset_dst = CustomData_get_n_offset(&bm_dst->vdata, CD_SHAPEKEY,dst_lay_iter); //lay_iter(th)CD_SHAPEKEY layer - - BM_ITER_MESH_INDEX (v, &iter, bm_dst, BM_VERTS_OF_MESH, a) { - float *lcol_src = BM_ELEM_CD_GET_VOID_P(v_src, CD_offset_dst); - float *lcol_dst = BM_ELEM_CD_GET_VOID_P(v_dst, CD_offset_src); - - float *lcol_src_basis = BM_ELEM_CD_GET_VOID_P(v_src, CD_basis_src); - float *lcol_dst_basis = BM_ELEM_CD_GET_VOID_P(v_dst, CD_basis_dst); - - float offset[3]; - - v_src = v_match_table[a].v_src; - v_dst = v_match_table[a].v_dst; - - sub_v3_v3v3(offset, lcol_src, lcol_src_basis); - add_v3_v3v3(lcol_dst, offset, lcol_dst_basis); - } - - break; - } - case CD_MDEFORMVERT: - { - BMVert_match *v_match_table = (BMVert_match*) match_table; - - //fix the layers - const int cd_dvert_dst_offset = CustomData_get_offset(&bm_dst->vdata, CD_MDEFORMVERT); - const int cd_dvert_src_offset = CustomData_get_offset(&bm_src->vdata, CD_MDEFORMVERT); - - const int src_grp_ind = src_lay_start + src_lay_iter; - const int dst_grp_ind = dst_lay_start + dst_lay_iter; - - BM_ITER_MESH_INDEX (v, &iter, bm_dst, BM_VERTS_OF_MESH, a) { - MDeformVert *dv_dst, *dv_src; - MDeformWeight *dw_dst, *dw_src; - - v_src = v_match_table[a].v_src; - v_dst = v_match_table[a].v_dst; - - dv_src = BM_ELEM_CD_GET_VOID_P(v_src, cd_dvert_src_offset); - dw_src = defvert_verify_index(dv_src, src_grp_ind); - - dv_dst = BM_ELEM_CD_GET_VOID_P(v_dst, cd_dvert_dst_offset); - dw_dst = defvert_verify_index(dv_dst, dst_grp_ind); - - if (dw_src == NULL) - dw_dst = NULL; - - else - dw_src->weight = dw_dst->weight; - } - - break; - } - } - } - } - - else { - //transfer by interpolation (1.1) - // | - // | - // V - - //+-----------------+ - //| sub_Block 1.1.a | //loop over each destination face - //+-----------------+ - - //+---------------------+ - //| sub_Block 1.1.a.1 | //paste the (weights * source data) into the destination - //+---------------------+ - - //+---------------------+ - //| sub_Block 1.1.a.2 | //make any needed post processing that is data type dependent - //+---------------------+ //ie: average for the vert values in the shapekeys .. connect faces in the UV transfer - } - return true; -} - - static void BM_mesh_cd_array_transfer(CustomData *cd_src, BMElem **array_src, int array_src_count, CustomData *cd_dst, BMElem **array_dst, int array_dst_count, const int layer_type, const struct ReplaceLayerInfo *UNUSED(replace_info)) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs