[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