[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58934] branches/ soc-2013-meshdata_transfer/source/blender: Vertex Groups transfer: removing the layer identificationcompletely outside of the copy function

Walid Shouman eng.walidshouman at gmail.com
Mon Aug 5 17:49:26 CEST 2013


Revision: 58934
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58934
Author:   walid
Date:     2013-08-05 15:49:25 +0000 (Mon, 05 Aug 2013)
Log Message:
-----------
Vertex Groups transfer: removing the layer identificationcompletely outside of the copy function

Modified Paths:
--------------
    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.h
    branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.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-05 15:26:45 UTC (rev 58933)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c	2013-08-05 15:49:25 UTC (rev 58934)
@@ -2509,7 +2509,7 @@
 }
 
 
-bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode replace_mode, float tmp_mat[4][4])
+bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, const struct ReplaceLayerInfo replace_info, float tmp_mat[4][4])
 {
 	//-----algorithm definitions start
 	struct BMBVHTree *bmtree_src = NULL;
@@ -2577,28 +2577,13 @@
 	}
 
 	tmp_weight = MEM_mallocN(sizeof(*tmp_weight) * exp_vert_per_face, "tmp_weight bmesh_data_transfer.c");
-	if (replace_mode == APPEND_GROUPS) {
-		src_lay_start = 0;
-		src_lay_end = tot_layer_src;
-		dst_lay_start = tot_layer_dst - tot_layer_src;
-		dst_lay_end = tot_layer_dst;
-	}
 
-	else if ((replace_mode == REPLACE_ENOUGH_GROUPS) || (replace_mode == REPLACE_ALL_GROUPS)) {
-		src_lay_start = 0;
-		src_lay_end = tot_layer_src;
-		dst_lay_start = 0;
-		dst_lay_end = tot_layer_src;
-	}
+	src_lay_start = replace_info.src_lay_start;
+	src_lay_end = replace_info.src_lay_end;
+	dst_lay_start = replace_info.dst_lay_start;
+	dst_lay_end = replace_info.dst_lay_end;
 
-	else if (replace_mode == REPLACE_ACTIVE_GROUP) {
-		src_lay_start = CustomData_get_active_layer_index(&bm_src->ldata, CD_MDEFORMVERT);
-		src_lay_end = src_lay_start + 1;	//stopping condition
-		dst_lay_start = CustomData_get_active_layer_index(&bm_dst->ldata, CD_MDEFORMVERT);
-		dst_lay_end = dst_lay_start + 1;
-	}
-
-	for (src_lay_iter = src_lay_start, dst_lay_iter = dst_lay_start; src_lay_iter < src_lay_end;
+	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++) {
 
 		//fix the layer index of the source & dest

Modified: branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h	2013-08-05 15:26:45 UTC (rev 58933)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h	2013-08-05 15:49:25 UTC (rev 58934)
@@ -41,6 +41,13 @@
 	APPEND_GROUPS = 4
 } ReplaceGroupMode;
 
+struct ReplaceLayerInfo {
+	int src_lay_start;
+	int src_lay_end;
+	int dst_lay_start;
+	int dst_lay_end;
+} ReplaceLayerInfo;
+
 bool BKE_bmesh_calc_relative_deform(const int v_count, const float (*vert_cos_src)[], const float (*vert_cos_dst)[],
 									const float (*vert_cos_org)[],	float (*vert_cos_new)[]);
 bool BM_edge_has_consistant_loops(BMEdge *e, int CD_offset);
@@ -71,7 +78,8 @@
 bool BM_mesh_vertex_group_copy(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode replace_mode, float tmp_mat[4][4]);
 bool BM_mesh_vertex_color_copy(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode replace_mode, float tmp_mat[4][4]);
 //rewrite that shall be followed on the other 3 datatype to be a bit modular
-bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode replace_mode, float tmp_mat[4][4]);
+bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, const struct ReplaceLayerInfo replace_info,
+                                float tmp_mat[4][4]);
 
 #endif /* __BMESH_DATA_TRANSFER_H__ */
 

Modified: branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c	2013-08-05 15:26:45 UTC (rev 58933)
+++ branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c	2013-08-05 15:49:25 UTC (rev 58934)
@@ -258,6 +258,8 @@
 	int active_dst, active_src;
 	char *src_name;
 
+	struct ReplaceLayerInfo replace_info;
+
 	invert_m4_m4(ob_src->imat, ob_src->obmat);
 	mul_m4_m4m4(tmp_mat, ob_src->imat, ob_dst->obmat);
 
@@ -291,6 +293,11 @@
 			src_name = me_src->vdata.layers[CD_src + i].name;
 			CustomData_set_layer_name(&me_dst->vdata, CD_MDEFORMVERT, i, src_name);
 		}
+
+		replace_info.src_lay_start = 0;
+		replace_info.src_lay_end = num_src_lay;
+		replace_info.dst_lay_start = 0;
+		replace_info.dst_lay_end = num_src_lay;
 	}
 
 	//we'll tell the copy function to start copying from # of source layers from the end of the dst layers
@@ -303,6 +310,11 @@
 			//append vertex group with the src names
 			ED_vgroup_add_name(ob_dst, src_name);
 		}
+
+		replace_info.src_lay_start = 0;
+		replace_info.src_lay_end = num_src_lay;
+		replace_info.dst_lay_start = num_dst_lay;//num_dst_lay - num_src_lay;
+		replace_info.dst_lay_end = num_dst_lay + num_src_lay;
 	}
 
 	else if (replace_mode == REPLACE_ALL_GROUPS)
@@ -317,6 +329,11 @@
 			//add vertex group with the src name
 			ED_vgroup_add_name(ob_dst, src_name);
 		}
+
+		replace_info.src_lay_start = 0;
+		replace_info.src_lay_end = num_src_lay;
+		replace_info.dst_lay_start = 0;
+		replace_info.dst_lay_end = num_src_lay;
 	}
 
 	else if (replace_mode == REPLACE_ACTIVE_GROUP) {
@@ -343,6 +360,12 @@
 
 			CustomData_set_layer_name(&me_dst->vdata, CD_MDEFORMVERT, active_dst, src_name);
 		}
+
+		//to transfer a single layer add it to the start and end
+		replace_info.src_lay_start = CustomData_get_active_layer_index(&me_src->ldata, CD_MDEFORMVERT);
+		replace_info.src_lay_end = replace_info.src_lay_start;
+		replace_info.dst_lay_start = CustomData_get_active_layer_index(&me_dst->ldata, CD_MDEFORMVERT);
+		replace_info.dst_lay_end = replace_info.dst_lay_start;
 	}
 
 	//allocate space
@@ -353,7 +376,7 @@
 	BM_mesh_bm_from_me(bm_dst, me_dst, TRUE, true, 0);
 
 	if (transfer_mode == PROJECTION_TRANSFER) {
-		if (!BM_mesh_vertex_group_copy2(bm_src, bm_dst, replace_mode, tmp_mat)) {
+		if (!BM_mesh_vertex_group_copy2(bm_src, bm_dst, replace_info, tmp_mat)) {
 			return false;
 		}
 	}




More information about the Bf-blender-cvs mailing list