[Bf-blender-cvs] [23f0b6d] mesh-transfer-data: More minor refactoring and cleanup.

Bastien Montagne noreply at git.blender.org
Mon Oct 27 11:09:11 CET 2014


Commit: 23f0b6d01be4001cdd6f964df20a76c72407c53c
Author: Bastien Montagne
Date:   Mon Oct 27 11:08:46 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rB23f0b6d01be4001cdd6f964df20a76c72407c53c

More minor refactoring and cleanup.

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

M	source/blender/blenkernel/intern/customdata.c
M	source/blender/editors/object/object_transfer_data.c

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

diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 280c3a9..f0bd151 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -3568,13 +3568,28 @@ static void customdata_data_transfer_interp_generic(const DataTransferLayerMappi
 
 	int best_src_idx = 0;
 
+	const int data_type = laymap->data_type;
+
 	const size_t data_size = laymap->data_size;
 	const uint64_t data_flag = laymap->data_flag;
 
+	cd_interp interp_cd = NULL;
+	cd_copy copy_cd = NULL;
+
+	if (!(data_type & CD_FAKE)) {
+		const LayerTypeInfo *type_info = layerType_getInfo(data_type);
+
+		interp_cd = type_info->interp;
+		copy_cd = type_info->copy;
+	}
+
 	if (count > 1) {
 		int i;
 
-		if (data_flag) {
+		if (interp_cd) {
+			interp_cd(sources, weights, NULL, count, (char *)data_dst);
+		}
+		else if (data_flag) {
 			/* Boolean case, we can 'interpolate' in two groups, and choose value from highest weighted group. */
 			float tot_weight_true = 0.0f, tot_weight_false = 0.0f;
 			int item_true_idx = -1, item_false_idx = -1;
@@ -3609,6 +3624,10 @@ static void customdata_data_transfer_interp_generic(const DataTransferLayerMappi
 	if (data_flag) {
 		copy_bit_flag(data_size, data_dst, sources[best_src_idx], data_flag);
 	}
+	/* No interpolation, just copy highest weight source element's data. */
+	else if (copy_cd) {
+		copy_cd((char *)sources[best_src_idx], (char *)data_dst, 1);
+	}
 	else {
 		memcpy(data_dst, sources[best_src_idx], data_size);
 	}
@@ -3629,8 +3648,6 @@ void CustomData_data_transfer(const Mesh2MeshMapping *m2mmap, const DataTransfer
 	size_t data_offset;
 
 	cd_datatransfer_interp interp = NULL;
-	cd_interp interp_cd = NULL;
-	cd_copy copy_cd = NULL;
 
 	size_t tmp_buff_size = 32;
 	void **tmp_data_src;
@@ -3645,8 +3662,6 @@ void CustomData_data_transfer(const Mesh2MeshMapping *m2mmap, const DataTransfer
 		data_step = laymap->elem_size;
 		data_size = laymap->data_size;
 		data_offset = laymap->data_offset;
-
-		interp = laymap->interp ? laymap->interp : customdata_data_transfer_interp_generic;
 	}
 	else {
 		const LayerTypeInfo *type_info = layerType_getInfo(data_type);
@@ -3655,15 +3670,10 @@ void CustomData_data_transfer(const Mesh2MeshMapping *m2mmap, const DataTransfer
 		data_size = (size_t)type_info->size;
 		data_step = laymap->elem_size ? laymap->elem_size : data_size;
 		data_offset = laymap->data_offset;
-		if (laymap->interp) {
-			interp = laymap->interp;
-		}
-		else {
-			interp_cd = type_info->interp;
-			copy_cd = type_info->copy;
-		}
 	}
 
+	interp = laymap->interp ? laymap->interp : customdata_data_transfer_interp_generic;
+
 	for (i = 0; i < totelem; i++, data_dst = (char *)data_dst + data_step, mapit++) {
 		const int nbr_sources = mapit->nbr_sources;
 		float max_weight = 0.0f;
@@ -3690,21 +3700,7 @@ void CustomData_data_transfer(const Mesh2MeshMapping *m2mmap, const DataTransfer
 			}
 		}
 
-		if (interp) {
-			interp(laymap, (char *)data_dst + data_offset, tmp_data_src, mapit->weights_src, nbr_sources);
-		}
-		else if (nbr_sources > 1 && interp_cd) {
-			interp_cd(tmp_data_src, mapit->weights_src, NULL, nbr_sources, (char *)data_dst + data_offset);
-		}
-		else {
-			/* No interpolation, just copy highest weight source element's data. */
-			if (copy_cd) {
-				copy_cd(tmp_data_src[max_weight_idx], (char *)data_dst + data_offset, 1);
-			}
-			else {
-				memcpy((char *)data_dst + data_offset, tmp_data_src[max_weight_idx], data_size);
-			}
-		}
+		interp(laymap, (char *)data_dst + data_offset, tmp_data_src, mapit->weights_src, nbr_sources);
 	}
 
 	MEM_freeN(tmp_data_src);
diff --git a/source/blender/editors/object/object_transfer_data.c b/source/blender/editors/object/object_transfer_data.c
index a3b05ae..3fdb68a 100644
--- a/source/blender/editors/object/object_transfer_data.c
+++ b/source/blender/editors/object/object_transfer_data.c
@@ -927,7 +927,7 @@ static bool data_transfer_draw_check_prop(PointerRNA *ptr, PropertyRNA *prop)
 	const char *prop_id = RNA_property_identifier(prop);
 	const int data_type = RNA_enum_get(ptr, "data_type");
 	const bool use_max_distance = RNA_boolean_get(ptr, "use_max_distance");
-	const int replace_mode = RNA_enum_get(ptr, "replace_mode");
+	const int mix_mode = RNA_enum_get(ptr, "mix_mode");
 
 	if (STREQ(prop_id, "max_distance") && !use_max_distance) {
 		return false;
@@ -946,7 +946,7 @@ static bool data_transfer_draw_check_prop(PointerRNA *ptr, PropertyRNA *prop)
 		return false;
 	}
 
-	if (STREQ(prop_id, "mix_factor") && (replace_mode == MDT_MIX_REPLACE_ALL)) {
+	if (STREQ(prop_id, "mix_factor") && (mix_mode == MDT_MIX_REPLACE_ALL)) {
 		return false;
 	}




More information about the Bf-blender-cvs mailing list