[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