[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58937] branches/ soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c: Vertex Groups transfer operator: fixing the layer manipulation behaviour to go on well with vertex groups' interface as the CD_MDeformVert doesnt store each group in a layer

Walid Shouman eng.walidshouman at gmail.com
Mon Aug 5 18:45:37 CEST 2013


Revision: 58937
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58937
Author:   walid
Date:     2013-08-05 16:45:36 +0000 (Mon, 05 Aug 2013)
Log Message:
-----------
Vertex Groups transfer operator: fixing the layer manipulation behaviour to go on well with vertex groups' interface as the CD_MDeformVert doesnt store each group in a layer

Modified Paths:
--------------
    branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c

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:54:31 UTC (rev 58936)
+++ branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c	2013-08-05 16:45:36 UTC (rev 58937)
@@ -246,7 +246,7 @@
 
 	ReplaceGroupMode replace_mode = RNA_enum_get(op->ptr, "replace_mode");
 	TransferMode transfer_mode = RNA_enum_get(op->ptr, "transfer_mode");
-	bDeformGroup *dg_dst;	//used to remove the layers
+	bDeformGroup *dg_dst, *dg_src;
 
 	int num_src_lay, num_dst_lay;
 
@@ -254,7 +254,6 @@
 
 	float tmp_mat[4][4];
 
-	int CD_src;
 	int active_dst, active_src;
 	char *src_name;
 
@@ -266,9 +265,8 @@
 	me_dst = ob_dst->data;
 	me_src = ob_src->data;
 
-	//manipulating the layers first as its interface uses the Mesh structure not the BMesh
-	num_src_lay = CustomData_number_of_layers(&me_src->vdata, CD_MDEFORMVERT);
-	num_dst_lay = CustomData_number_of_layers(&me_dst->vdata, CD_MDEFORMVERT);
+	num_src_lay = BLI_countlist(&ob_src->defbase);
+	num_dst_lay = BLI_countlist(&ob_dst->defbase);
 
 	if (num_src_lay < 1) {
 		//the source should have deformvert layers
@@ -286,12 +284,17 @@
 			ED_vgroup_add(ob_dst);
 			i--;
 		}
-		CD_src = CustomData_get_layer_index(&me_src->vdata, CD_MDEFORMVERT);
+
+		dg_src = ob_src->defbase.first;
+		dg_dst = ob_dst->defbase.first;
+
 		//copy the names
 		for (i = 0; i < num_src_lay; ++i) {
+			src_name = dg_src->name;
+			BLI_strncpy(dg_dst->name, dg_src->name, sizeof(dg_src->name));
 
-			src_name = me_src->vdata.layers[CD_src + i].name;
-			CustomData_set_layer_name(&me_dst->vdata, CD_MDEFORMVERT, i, src_name);
+			dg_dst = dg_dst->next;
+			dg_src = dg_src->next;
 		}
 
 		replace_info.src_lay_start = 0;
@@ -303,18 +306,21 @@
 	//we'll tell the copy function to start copying from # of source layers from the end of the dst layers
 	else if (replace_mode == APPEND_GROUPS)
 	{
-		CD_src = CustomData_get_layer_index(&me_src->vdata, CD_MDEFORMVERT);
+		dg_src = ob_src->defbase.first;
+
 		for (i = 0; i < num_src_lay; ++i) {
 
-			src_name = me_src->vdata.layers[CD_src + i].name;
+			src_name = dg_src->name;
 			//append vertex group with the src names
 			ED_vgroup_add_name(ob_dst, src_name);
+
+			dg_dst = dg_dst->next;
 		}
 
 		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;
+		replace_info.src_lay_end = num_src_lay - 1;
+		replace_info.dst_lay_start = num_dst_lay;
+		replace_info.dst_lay_end = num_dst_lay + num_src_lay - 1;
 	}
 
 	else if (replace_mode == REPLACE_ALL_GROUPS)
@@ -323,11 +329,14 @@
 			ED_vgroup_delete(ob_dst, dg_dst);
 		}
 
-		CD_src = CustomData_get_layer_index(&me_src->vdata, CD_MDEFORMVERT);
+		dg_src = ob_src->defbase.first;
+
 		for (i = 0; i < num_src_lay; ++i) {
-			src_name = me_src->vdata.layers[CD_src + i].name;
+			src_name = dg_src->name;
 			//add vertex group with the src name
 			ED_vgroup_add_name(ob_dst, src_name);
+
+			dg_src = dg_src->next;
 		}
 
 		replace_info.src_lay_start = 0;
@@ -337,34 +346,28 @@
 	}
 
 	else if (replace_mode == REPLACE_ACTIVE_GROUP) {
-
 		//find the source active layer
-		active_src = CustomData_get_active_layer_index(&me_src->vdata, CD_MDEFORMVERT);
-		active_dst = CustomData_get_active_layer_index(&me_dst->vdata, CD_MDEFORMVERT);
+		active_src = ob_src->actdef;
+		active_dst = ob_dst->actdef;
 
-		CD_src = CustomData_get_layer_index(&me_src->vdata, CD_MDEFORMVERT);
+		dg_src = BLI_findlink(&ob_src->defbase, active_src);
+		dg_dst = BLI_findlink(&ob_dst->defbase, active_dst);
 
 		if (num_src_lay == 0) {	//empty destination
-			src_name = me_src->vdata.layers[CD_src + active_src].name;
-
-			//add vertex group with the src name
+			src_name = dg_src->name;
 			ED_vgroup_add_name(ob_dst, src_name);
 
-			//make the added layer the active one
-			CustomData_set_layer_active(&me_dst->vdata, CD_MDEFORMVERT, 0);
 		}
 
 		else {	//destination has layers (accordingly there's a selected layer)
-
-			src_name = me_src->vdata.layers[CD_src + active_src].name;
-
-			CustomData_set_layer_name(&me_dst->vdata, CD_MDEFORMVERT, active_dst, src_name);
+			src_name = dg_src->name;
+			BLI_strncpy(dg_dst->name, dg_src->name, sizeof(dg_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_start = active_src - 1;
 		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_start = active_dst - 1;	//fixing the indices
 		replace_info.dst_lay_end = replace_info.dst_lay_start;
 	}
 




More information about the Bf-blender-cvs mailing list