[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59537] branches/ soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c : code rewrite: edits in the CD_Shapekey CD_MDeformVert copy WIP
Walid Shouman
eng.walidshouman at gmail.com
Mon Aug 26 23:34:32 CEST 2013
Revision: 59537
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59537
Author: walid
Date: 2013-08-26 21:34:32 +0000 (Mon, 26 Aug 2013)
Log Message:
-----------
code rewrite: edits in the CD_Shapekey CD_MDeformVert copy WIP
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-08-26 21:11:52 UTC (rev 59536)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c 2013-08-26 21:34:32 UTC (rev 59537)
@@ -96,9 +96,9 @@
BMVert *v_dst;
} BMVert_match;
-static void BM_mesh_cd_array_transfer(const CustomData *cd_src, BMElem **array_src, int array_src_count,
- const CustomData *cd_dst, BMElem **array_dst, int array_dst_count,
- const int layer_type, const struct ReplaceLayerInfo *replace_info);
+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);
static void BM_mesh_aligned_transfer(BMesh *bm_src, BMesh *bm_dst, const char itype, const int layer_type,
const struct ReplaceLayerInfo *replace_info);
@@ -375,80 +375,46 @@
}
-static void BM_mesh_cd_array_transfer(const CustomData *cd_src, BMElem **array_src, int array_src_count,
- const CustomData *cd_dst, BMElem **array_dst, int array_dst_count,
- const int layer_type, const struct ReplaceLayerInfo *replace_info)
+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))
{
//... copy between arrays aligned arrays ...
if ((array_dst && array_src) && (array_src_count == array_dst_count)) {
- 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;
-
int i;
- 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++) {
+ void *ptr;
+
+ for (i = 0; i < array_dst_count; i++) {
+ BMElem *ele_src = array_src[i];
+ BMElem *ele_dst = array_dst[i];
+
switch (layer_type) {
case CD_SHAPEKEY:
{
- //fix the layers
- int CD_basis_src = CustomData_get_n_offset(cd_src, CD_SHAPEKEY, 0);
- int CD_basis_dst = CustomData_get_n_offset(cd_dst, CD_SHAPEKEY, 0);
- int CD_offset_src = CustomData_get_n_offset(cd_src, CD_SHAPEKEY, src_lay_iter);
- int CD_offset_dst = CustomData_get_n_offset(cd_dst, CD_SHAPEKEY, dst_lay_iter);
+ ptr = CustomData_bmesh_get(cd_src, ele_src->head.data, CD_SHAPEKEY);
+ CustomData_bmesh_set(cd_src, ele_src->head.data, CD_SHAPEKEY, ptr);
- for (i = 0; i < array_dst_count; i++) {
+ ptr = CustomData_bmesh_get(cd_dst, ele_dst->head.data, CD_SHAPEKEY);
+ CustomData_bmesh_set(cd_dst, ele_dst->head.data, CD_SHAPEKEY, ptr);
- BMElem *ele_src = array_src[i];
- BMElem *ele_dst = array_dst[i];
+ CustomData_bmesh_copy_data(cd_src, cd_dst, ele_src->head.data, &ele_dst->head.data);
- float *cos_src = BM_ELEM_CD_GET_VOID_P(ele_src, CD_offset_src);
- float *cos_dst = BM_ELEM_CD_GET_VOID_P(ele_dst, CD_offset_dst);
-
- float *cos_src_basis = BM_ELEM_CD_GET_VOID_P(ele_src, CD_basis_src);
- float *cos_dst_basis = BM_ELEM_CD_GET_VOID_P(ele_dst, CD_basis_dst);
-
- float offset[3];
-
- sub_v3_v3v3(offset, cos_src, cos_src_basis);
- add_v3_v3v3(cos_dst, offset, cos_dst_basis);
- sub_v3_v3v3(offset, cos_src, cos_src_basis);
- }
-
break;
}
case CD_MDEFORMVERT:
{
- const int cd_dvert_src_offset = CustomData_get_offset(cd_src, CD_MDEFORMVERT);
- const int cd_dvert_dst_offset = CustomData_get_offset(cd_dst, CD_MDEFORMVERT);
- const int src_grp_ind = src_lay_start + src_lay_iter;
- const int dst_grp_ind = dst_lay_start + dst_lay_iter;
+ ptr = CustomData_bmesh_get(cd_src, ele_src->head.data, CD_MDEFORMVERT);
+ CustomData_bmesh_set(cd_src, ele_src->head.data, CD_MDEFORMVERT, ptr);
- for (i = 0; i < array_dst_count; i++) {
- MDeformVert *dv_src, *dv_dst;
- MDeformWeight *dw_src, *dw_dst;
+ ptr = CustomData_bmesh_get(cd_dst, ele_dst->head.data, CD_MDEFORMVERT);
+ CustomData_bmesh_set(cd_dst, ele_dst->head.data, CD_MDEFORMVERT, ptr);
- BMElem *ele_src = array_src[i];
- BMElem *ele_dst = array_dst[i];
+ CustomData_bmesh_copy_data(cd_src, cd_dst, ele_src->head.data, &ele_dst->head.data);
- dv_src = BM_ELEM_CD_GET_VOID_P(ele_src, cd_dvert_src_offset);
- dw_src = defvert_verify_index(dv_src, src_grp_ind);
-
- dv_dst = BM_ELEM_CD_GET_VOID_P(ele_dst, cd_dvert_dst_offset);
- dw_dst = defvert_verify_index(dv_dst, dst_grp_ind);
-
- if (dw_src == NULL)
- dw_dst = NULL;
-
- else
- dw_dst->weight = dw_src->weight;
- }
-
break;
}
}
More information about the Bf-blender-cvs
mailing list