[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58259] branches/ soc-2013-meshdata_transfer/source/blender: Adding a shapekeys debugging function print_shape_key_info()

Walid Shouman eng.walidshouman at gmail.com
Mon Jul 15 10:32:14 CEST 2013


Revision: 58259
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58259
Author:   walid
Date:     2013-07-15 08:32:13 +0000 (Mon, 15 Jul 2013)
Log Message:
-----------
Adding a shapekeys debugging function print_shape_key_info()

Modified Paths:
--------------
    branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
    branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_shapekey.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-07-15 08:26:16 UTC (rev 58258)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c	2013-07-15 08:32:13 UTC (rev 58259)
@@ -23,6 +23,13 @@
 #define MY_MAX_FLOAT 1000
 #endif
 
+#define SHAPEKEY_VALUES_BY_VERT (1 << 1)
+#define SHAPEKEY_VALUES_BY_LAYER (1 << 2)
+#define SHAPEKEY_OFFSETS_BY_VERT (1 << 3)
+#define SHAPEKEY_OFFSETS_BY_LAYER (1 << 4)
+
+bool print_shapekeys_info(BMesh *bm, int type, bool type_info, bool layer_info, int mode);
+
 bool BKE_bmesh_calc_relative_deform(
 		const int v_count,
 
@@ -168,6 +175,7 @@
 	int src_lay_start, src_lay_end;
 	int dst_lay_start, dst_lay_end;	//dst_lay_end currently isn't being used
 
+	print_shapekeys_info(bm_src,CD_SHAPEKEY, true, true, SHAPEKEY_VALUES_BY_LAYER);
 
 	//Is that good to support edit mesh mode at the cost of receiving me_src too ?
 	//if (me_src->edit_btmesh != NULL) em_src = me_src->edit_btmesh;	//edit mesh mode
@@ -407,3 +415,131 @@
 	return true;
 }
 
+/**
+ * @brief print_shapekeys_info: currently prints the shapekey info (intended to be for any CD) for a certaing bmesh
+ * @param bm: the bmesh
+ * @param type: CustomData type ie: CD_SHAPEKEY (currently it could be any vdata type)
+ * @param type_info: show what we know about the type associated to the bm
+ * @param layer_info: show what we know about each layer
+ * @param mode: either 1, 2, 3 or 4; choose between different ways to show each layer's data
+ * @return true upon success
+ */
+
+bool print_shapekeys_info(BMesh *bm, int type, bool type_info, bool layer_info, int mode)
+{
+	int CD_Offset, CD_Basis;	//in case we need to know the difference
+	int layer_index;
+	BMVert *v;
+	BMIter iter;
+
+	int layer_iter, tot_layer;
+	float value[3];
+
+	int first_index = CustomData_get_layer_index(&bm->vdata, type);
+	int active_index = CustomData_get_active_layer_index(&bm->vdata, type);
+	int render_index = CustomData_get_render_layer_index(&bm->vdata, type);
+	int clone_index = CustomData_get_clone_layer_index(&bm->vdata, type);
+	int stencil_index = CustomData_get_stencil_layer_index(&bm->vdata, type);
+
+	if (!CustomData_has_layer(&bm->vdata, type)) {
+		return false;
+	}
+
+	tot_layer = CustomData_number_of_layers(&bm->vdata, type);
+
+	if (type_info) {
+		//we'll need to get the bmesh name too to make it friendly with many bmeshes
+
+		//print all what we know about the shapekey vdata
+		printf("%s (type no: %d) info of \"bmesh_name\"\r\n", CustomData_layertype_name(type), type);
+		printf("\t-First layer index: %d\tname: %s\r\n", first_index, bm->vdata.layers[first_index].name);
+		printf("\t-Active layer:  %d\tindex: %d\tname: %s\r\n", CustomData_get_active_layer(&bm->vdata, type),
+			   active_index, bm->vdata.layers[active_index].name);
+		printf("\t-Render layer:  %d\tindex: %d\tname: %s\r\n", CustomData_get_render_layer(&bm->vdata, type),
+			   render_index, bm->vdata.layers[render_index].name);
+		printf("\t-Clone layer:   %d\tindex: %d\tname: %s\r\n", CustomData_get_clone_layer(&bm->vdata, type),
+			   clone_index, bm->vdata.layers[clone_index].name);
+		printf("\t-Stencil layer: %d\tindex: %d\tname: %s\r\n", CustomData_get_stencil_layer(&bm->vdata, type),
+			   stencil_index, bm->vdata.layers[stencil_index].name);
+		printf("\t-Number of layers: %d\r\n", tot_layer);
+//		printf("\t-Has interpolation? %d\r\n", CustomData_has_interp(type));
+	}
+
+	if (layer_info) {
+		for (layer_iter = 0; layer_iter < tot_layer; layer_iter++) {
+			layer_index = CustomData_get_layer_index_n(&bm->vdata, type, layer_iter);
+
+			printf("Shapekey num: %d\r\n",layer_iter);
+			printf("\t-active: %d\r\n", bm->vdata.layers[layer_index].active);
+			printf("\t-active clone: %d\r\n", bm->vdata.layers[layer_index].active_clone);
+			printf("\t-active mask: %d\r\n", bm->vdata.layers[layer_index].active_mask);
+			printf("\t-active rnd: %d\r\n", bm->vdata.layers[layer_index].active_rnd);
+			printf("\t-flag: %d\r\n", bm->vdata.layers[layer_index].flag);
+			printf("\t-name: %s\r\n", bm->vdata.layers[layer_index].name);
+			printf("\t-offset: %d\r\n", bm->vdata.layers[layer_index].offset);
+			printf("\t-type: %d\t%s\r\n", bm->vdata.layers[layer_index].type, CustomData_layertype_name(bm->vdata.layers[layer_index].type));
+			printf("\t-uid: %d\r\n", bm->vdata.layers[layer_index].uid);
+		}
+	}
+
+	//we could get shapekeys by vertex or by layer either by shapekey values or offsets
+	if (mode == SHAPEKEY_VALUES_BY_LAYER) {
+		for (layer_iter = 0; layer_iter < tot_layer; layer_iter++) {
+			CD_Offset = CustomData_get_n_offset(&bm->vdata, type, layer_iter);
+
+			printf("shapekey layer number: %d\r\n", layer_iter);
+			BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+				//value = BM_ELEM_CD_GET_VOID_P(v,CD_offset_dst);
+				copy_v3_v3(value, BM_ELEM_CD_GET_VOID_P(v, CD_Offset));
+
+				printf("\tVertex at index: %d\tvalued: %f, %f, %f\r\n",v->head.index, value[1], value[2], value[3]);
+			}
+		}
+	}
+
+	else if (mode == (SHAPEKEY_OFFSETS_BY_LAYER)) {
+		CD_Basis = CustomData_get_n_offset(&bm->vdata, type, 0);
+
+		for (layer_iter = 1; layer_iter < tot_layer; layer_iter++) {
+			CD_Offset = CustomData_get_n_offset(&bm->vdata, type, layer_iter);
+
+			printf("shapekey layer number: %d\r\n", layer_iter);
+			BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+				//value = BM_ELEM_CD_GET_VOID_P(v,CD_offset_dst);
+				sub_v3_v3v3(value, BM_ELEM_CD_GET_VOID_P(v, CD_Offset), BM_ELEM_CD_GET_VOID_P(v, CD_Basis));
+
+				printf("\tVertex at index: %d\tvalued: %f, %f, %f\r\n",v->head.index, value[1], value[2], value[3]);
+			}
+		}
+	}
+
+	else if (mode == SHAPEKEY_VALUES_BY_VERT) {
+		BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+			printf("Vertex index: %d\r\n", v->head.index);
+
+			for (layer_iter = 0; layer_iter < tot_layer; layer_iter++) {
+				CD_Offset = CustomData_get_n_offset(&bm->vdata, type, layer_iter);
+				copy_v3_v3(value, BM_ELEM_CD_GET_VOID_P(v, CD_Offset));
+
+				printf("\tshapekey layer: %d\tvalued: %f, %f, %f\r\n",layer_iter, value[1], value[2], value[3]);
+			}
+		}
+	}
+
+	else if (mode == (SHAPEKEY_OFFSETS_BY_VERT)) {
+		CD_Basis = CustomData_get_n_offset(&bm->vdata, type, 0);
+
+		BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+			printf("Vertex index: %d\r\n", v->head.index);
+
+			for (layer_iter = 1; layer_iter < tot_layer; layer_iter++) {
+				CD_Offset = CustomData_get_n_offset(&bm->vdata, type, 0);
+				sub_v3_v3v3(value, BM_ELEM_CD_GET_VOID_P(v, CD_Offset), BM_ELEM_CD_GET_VOID_P(v, CD_Basis));
+
+				printf("\tshapekey layer: %d\tvalued: %f, %f, %f\r\n",layer_iter, value[1], value[2], value[3]);
+			}
+		}
+	}
+	return true;
+}
+

Modified: branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_shapekey.c
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_shapekey.c	2013-07-15 08:26:16 UTC (rev 58258)
+++ branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_shapekey.c	2013-07-15 08:32:13 UTC (rev 58259)
@@ -722,7 +722,7 @@
 
 	/* properties */
 	RNA_def_float(ot->srna, "tolerance", 0.01f, 0.001f, 10.0f,
-	              "Tolerance", "Radius of source vertices to inherit from", 0.0f, 5.0f);
+	              "Tolerance", "Radius of source vertices to inherit from", 0.001f, 5.0f);
 	RNA_def_float(ot->srna, "interp_radius", 1.5f, 0.0f, 100.0f,
 	              "Interp Radius", "Radius of accepted contagious vertices", 0.0f, 10.0f);
 	RNA_def_int(ot->srna, "interp_power", 1, 0, 20,




More information about the Bf-blender-cvs mailing list