[Bf-blender-cvs] [c96037c] mesh-transfer-data: Dissociate 'high-level' of data types identifiers from 'low-level' one.

Bastien Montagne noreply at git.blender.org
Tue Nov 4 17:43:19 CET 2014


Commit: c96037c634dfb3560f1235463219ce75af35796a
Author: Bastien Montagne
Date:   Tue Nov 4 17:40:10 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rBc96037c634dfb3560f1235463219ce75af35796a

Dissociate 'high-level' of data types identifiers from 'low-level' one.

This allows us to make `ED_data_transfer` & co handle several data types at once
(again, will be useful for modifier version, especially since we cache item mappings
and such), and fix several litle issues in previous code.

===================================================================

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_transfer_data.c

===================================================================

diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index a10d5d3..cc30064 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -229,6 +229,28 @@ void ED_object_check_force_modifiers(struct Main *bmain, struct Scene *scene, st
 
 /* Data transfer. */
 
+/* Warning, those def are stored in files (TransferData modifier), *DO NOT* modify those values. */
+enum {
+	MDT_DATA_MDEFORMVERT                 = 1 << 0,
+	MDT_DATA_SHAPEKEY                    = 1 << 1,
+	MDT_DATA_SKIN                        = 1 << 2,
+	MDT_DATA_BWEIGHT_VERT                = 1 << 3,
+
+	MDT_DATA_SHARP_EDGE                  = 1 << 8,
+	MDT_DATA_SEAM                        = 1 << 9,
+	MDT_DATA_CREASE                      = 1 << 10,
+	MDT_DATA_BWEIGHT_EDGE                = 1 << 11,
+	MDT_DATA_FREESTYLE_EDGE              = 1 << 12,
+
+	MDT_DATA_UV                          = 1 << 16,
+	MDT_DATA_SHARP_FACE                  = 1 << 17,
+	MDT_DATA_FREESTYLE_FACE              = 1 << 18,
+
+	MDT_DATA_VCOL                        = 1 << 24,
+};
+
+int ED_data_transfer_mdtdata_to_cdtype(const int mdtdata);
+
 /* How to select data layers, for types supporting multi-layers.
  * Here too, some options are highly dependent on type of transferred data! */
 enum {
@@ -253,14 +275,14 @@ enum {
 };
 
 bool ED_data_transfer(
-        struct Scene *scene, struct Object *ob_src, struct Object *ob_dst, const int data_type, const bool use_create,
+        struct Scene *scene, struct Object *ob_src, struct Object *ob_dst, const int data_types, const bool use_create,
         const int map_vert_mode, const int map_edge_mode, const int map_poly_mode, const int map_loop_mode,
         struct SpaceTransform *space_transform, const float max_distance, const float precision,
         const int fromlayers_select, const int tolayers_select,
         const int mix_mode, const float mix_factor, const char *vgroup_name);
 bool ED_data_transfer_dm(
         struct Scene *scene, struct Object *ob_src, struct Object *ob_dst, struct DerivedMesh *dm_dst,
-        const int data_type, const bool use_create,
+        const int data_types, const bool use_create,
         const int map_vert_mode, const int map_edge_mode, const int map_poly_mode, const int map_loop_mode,
         struct SpaceTransform *space_transform, const float max_distance, const float ray_radius,
         const int fromlayers_select, const int tolayers_select,
diff --git a/source/blender/editors/object/object_transfer_data.c b/source/blender/editors/object/object_transfer_data.c
index b4dfcd8..ca8597b 100644
--- a/source/blender/editors/object/object_transfer_data.c
+++ b/source/blender/editors/object/object_transfer_data.c
@@ -63,55 +63,94 @@
 #include "object_intern.h"
 
 
-#define MDT_DATATYPE_IS_VERT(_dt) ELEM(_dt, CD_FAKE_MDEFORMVERT, CD_FAKE_SHAPEKEY, CD_MVERT_SKIN, CD_FAKE_BWEIGHT)
-#define MDT_DATATYPE_IS_EDGE(_dt) ELEM(_dt, CD_FAKE_CREASE, CD_FAKE_SHARP, CD_FAKE_SEAM, CD_FAKE_BWEIGHT, CD_FREESTYLE_EDGE)
-#define MDT_DATATYPE_IS_POLY(_dt) ELEM(_dt, CD_FAKE_UV, CD_FAKE_SHARP, CD_FREESTYLE_FACE)
-#define MDT_DATATYPE_IS_LOOP(_dt) ELEM(_dt, CD_FAKE_UV, CD_MLOOPCOL)
+#define MDT_DATATYPE_IS_VERT(_dt) ELEM(_dt, MDT_DATA_MDEFORMVERT, MDT_DATA_SHAPEKEY, MDT_DATA_SKIN,  \
+                                            MDT_DATA_BWEIGHT_VERT)
+#define MDT_DATATYPE_IS_EDGE(_dt) ELEM(_dt, MDT_DATA_CREASE, MDT_DATA_SHARP_EDGE, MDT_DATA_SEAM,  \
+                                            MDT_DATA_BWEIGHT_EDGE, MDT_DATA_FREESTYLE_EDGE)
+#define MDT_DATATYPE_IS_POLY(_dt) ELEM(_dt, MDT_DATA_UV, MDT_DATA_SHARP_FACE, MDT_DATA_FREESTYLE_FACE)
+#define MDT_DATATYPE_IS_LOOP(_dt) ELEM(_dt, MDT_DATA_UV, MDT_DATA_VCOL)
 
-#define MDT_DATATYPE_IS_MULTILAYERS(_dt) ELEM(_dt, CD_FAKE_MDEFORMVERT, CD_FAKE_SHAPEKEY, CD_FAKE_UV, CD_MLOOPCOL)
+#define MDT_DATATYPE_IS_MULTILAYERS(_dt) ELEM(_dt, MDT_DATA_MDEFORMVERT, MDT_DATA_SHAPEKEY, MDT_DATA_UV, MDT_DATA_VCOL)
+
+int ED_data_transfer_mdtdata_to_cdtype(const int mdtdata)
+{
+	switch (mdtdata) {
+		case MDT_DATA_MDEFORMVERT:
+			return CD_FAKE_MDEFORMVERT;
+		case MDT_DATA_SHAPEKEY:
+			return CD_FAKE_SHAPEKEY;
+		case MDT_DATA_SKIN:
+			return CD_MVERT_SKIN;
+		case MDT_DATA_BWEIGHT_VERT:
+			return CD_FAKE_BWEIGHT;
+
+		case MDT_DATA_SHARP_EDGE:
+			return CD_FAKE_SHARP;
+		case MDT_DATA_SEAM:
+			return CD_FAKE_SEAM;
+		case MDT_DATA_CREASE:
+			return CD_FAKE_CREASE;
+		case MDT_DATA_BWEIGHT_EDGE:
+			return CD_FAKE_BWEIGHT;
+		case MDT_DATA_FREESTYLE_EDGE:
+			return CD_FREESTYLE_EDGE;
+
+		case MDT_DATA_UV:
+			return CD_FAKE_UV;
+		case MDT_DATA_SHARP_FACE:
+			return CD_FAKE_SHARP;
+		case MDT_DATA_FREESTYLE_FACE:
+			return CD_FREESTYLE_FACE;
+
+		case MDT_DATA_VCOL:
+			return CD_MLOOPCOL;
+
+		default:
+			BLI_assert(0);
+	}
+	return 0;  /* Should never be reached! */
+}
 
 /* Check what can do each layer type (if it is actually handled by transferdata, if it supports advanced mixing... */
 static bool mdt_get_layertype_capacity(const int type, bool *r_advanced_mixing, bool *r_threshold)
 {
 	*r_advanced_mixing = false;
 	*r_threshold = false;
-	/* Note: for now we are cool and allow non-fake-like types as well. */
 	switch (type) {
 	/* Vertex data */
-		case CD_MDEFORMVERT:
-		case CD_FAKE_MDEFORMVERT:
+		case MDT_DATA_MDEFORMVERT:
 			*r_advanced_mixing = true;
 			*r_threshold = true;
 			return true;
-		case CD_MVERT_SKIN:
+		case MDT_DATA_SKIN:
 			*r_threshold = true;
 			return true;
-		case CD_FAKE_BWEIGHT:
+		case MDT_DATA_BWEIGHT_VERT:
 			return true;
 	/* Edge data */
-		case CD_FAKE_SHARP:
+		case MDT_DATA_SHARP_EDGE:
 			*r_threshold = true;
 			return true;
-		case CD_FAKE_SEAM:
+		case MDT_DATA_SEAM:
 			*r_threshold = true;
 			return true;
-		case CD_FAKE_CREASE:
+		case MDT_DATA_CREASE:
 			return true;
-#if 0  /* Already handled with vertices data. */
-		case CD_FAKE_BWEIGHT:
+		case MDT_DATA_BWEIGHT_EDGE:
+			return true;
+		case MDT_DATA_FREESTYLE_EDGE:
 			return true;
-#endif
 	/* Loop/Poly data */
-		case CD_FAKE_UV:
+		case MDT_DATA_UV:
 			return true;
-		case CD_MLOOPCOL:
+		case MDT_DATA_VCOL:
 			*r_advanced_mixing = true;
 			*r_threshold = true;
 			return true;
-#if 0  /* Already handled with vertices data. */
-		case CD_FAKE_SHARP:
+		case MDT_DATA_SHARP_FACE:
+			return true;
+		case MDT_DATA_FREESTYLE_FACE:
 			return true;
-#endif
 	}
 
 	return false;
@@ -121,26 +160,26 @@ static bool mdt_get_layertype_capacity(const int type, bool *r_advanced_mixing,
  * Note some are 'fake' ones, i.e. they are not hold by real CDLayers. */
 static EnumPropertyItem MDT_layer_items[] = {
 	{0, "", 0, "Vertex Data", ""},
-	{CD_FAKE_MDEFORMVERT, "VGROUP_WEIGHTS", 0, "Vertex Group(s)", "Transfer active or all vertex groups"},
+	{MDT_DATA_MDEFORMVERT, "VGROUP_WEIGHTS", 0, "Vertex Group(s)", "Transfer active or all vertex groups"},
 #if 0  /* XXX For now, would like to finish/merge work from 2014 gsoc first. */
-	{CD_FAKE_SHAPEKEY, "SHAPEKEYS", 0, "Shapekey(s)", "Transfer active or all shape keys"},
+	{MDT_DATA_SHAPEKEY, "SHAPEKEYS", 0, "Shapekey(s)", "Transfer active or all shape keys"},
 #endif
 #if 0  /* XXX When SkinModifier is enabled, it seems to erase its own CD_MVERT_SKIN layer from final DM :( */
-	{CD_MVERT_SKIN, "SKIN", 0, "Skin Weight", "Transfer skin weights"},
+	{MDT_DATA_SKIN, "SKIN", 0, "Skin Weight", "Transfer skin weights"},
 #endif
-	{CD_FAKE_BWEIGHT, "BEVEL_WEIGHT", 0, "Bevel Weight", "Transfer bevel weights"},
+	{MDT_DATA_BWEIGHT_VERT, "BEVEL_WEIGHT_VERT", 0, "Bevel Weight", "Transfer bevel weights"},
 	{0, "", 0, "Edge Data", ""},
-	{CD_FAKE_SHARP, "SHARP", 0, "Sharp", "Transfer sharp flag"},
-	{CD_FAKE_SEAM, "SEAM", 0, "Seam", "Transfer UV seam flag"},
-	{CD_FAKE_CREASE, "CREASE", 0, "Subsurf Crease", "Transfer crease values"},
-	{CD_FAKE_BWEIGHT, "BEVEL_WEIGHT", 0, "Bevel Weight", "Transfer bevel weights"},
-	{CD_FREESTYLE_EDGE, "FREESTYLE_EDGE", 0, "Freestyle Flag", "Transfer Freestyle edge flag"},
+	{MDT_DATA_SHARP_EDGE, "SHARP_EDGE", 0, "Sharp", "Transfer sharp flag"},
+	{MDT_DATA_SEAM, "SEAM", 0, "Seam", "Transfer UV seam flag"},
+	{MDT_DATA_CREASE, "CREASE", 0, "Subsurf Crease", "Transfer crease values"},
+	{MDT_DATA_BWEIGHT_EDGE, "BEVEL_WEIGHT_EDGE", 0, "Bevel Weight", "Transfer bevel weights"},
+	{MDT_DATA_FREESTYLE_EDGE, "FREESTYLE_EDGE", 0, "Freestyle Flag", "Transfer Freestyle edge flag"},
 	{0, "", 0, "Face Data", ""},
-	{CD_FAKE_UV, "UV", 0, "UVs", "Transfer UV layers"},
-	{CD_FAKE_SHARP, "SMOOTH", 0, "Smooth", "Transfer flat/smooth flag"},
-	{CD_FREESTYLE_FACE, "FREESTYLE_FACE", 0, "Freestyle Flag", "Transfer Freestyle face flag"},
+	{MDT_DATA_UV, "UV", 0, "UVs", "Transfer UV layers"},
+	{MDT_DATA_SHARP_FACE, "SMOOTH", 0, "Smooth", "Transfer flat/smooth flag"},
+	{MDT_DATA_FREESTYLE_FACE, "FREESTYLE_FACE", 0, "Freestyle Flag", "Transfer Freestyle face flag"},
 	{0, "", 0, "Face Corner Data", ""},
-	{CD_MLOOPCOL, "VCol", 0, "VCol", "Vertex (face corners) colors"},
+	{MDT_DATA_VCOL, "VCOL", 0, "VCol", "Vertex (face corners) colors"},
 	{0, NULL, 0, NULL, NULL}
 };
 
@@ -281,7 +320,7 @@ static EnumPropertyItem *mdt_fromlayers_select_itemf(
 	RNA_enum_items_add_value(&item, &totitem, MDT_fromlayers_select_items, MDT_FROMLAYERS_ACTIVE);
 	RNA_enum_items_add_value(&item, &totitem, MDT_fromlayers_select_items, MDT_FROMLAYERS_ALL);
 
-	if (data_type == CD_FAKE_MDEFORMVERT) {
+	if (data_type == MDT_DATA_MDEFORMVERT) {
 		Object *ob = CTX_data_active_object(C);
 		if (BKE_object_pose_armature_get(ob)) {
 			RNA_enum_items_add_value(&item, &totitem, MDT_fromlayers_select_items, MDT_FROMLAYERS_VGROUP_BONE_SELECTED);
@@ -347,9 +386,9 @@ static bool data_transfer_check(bContext *UNUSED(C), wmOperator *op)
 
 /* ********** */
 
-static loop_island_compute data_transfer_get_loop_islands_generator(const int data_type)
+static loop_island_compute data_transfer_get_loop_islands_generator(const int cddata_type)
 {
-	switch (data_type) {
+	switch (cddata_type) {
 		case CD_FAKE_UV:
 			return BKE_loop_poly_island_compute_uv;
 			break;
@@ -407,7 +446,7 @@ static void data_transfer_interp_char(const DataTransferLayerMapping *laymap, vo
 /* Helpers to match sources and destinations d

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list