[Bf-blender-cvs] [db651bd] mesh-transfer-data: Merge branch 'master' into mesh-transfer-data

Bastien Montagne noreply at git.blender.org
Thu Dec 25 17:55:18 CET 2014


Commit: db651bde5a36c22ca2bf45068640948533b1ed30
Author: Bastien Montagne
Date:   Thu Dec 25 16:52:07 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rBdb651bde5a36c22ca2bf45068640948533b1ed30

Merge branch 'master' into mesh-transfer-data

Conflicts:
	source/blender/makesrna/intern/rna_modifier.c

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



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

diff --cc source/blender/blenkernel/CMakeLists.txt
index 60cd9a6,5850b16..31e28f9
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@@ -279,9 -275,15 +279,16 @@@ set(SR
  	tracking_private.h
  	intern/CCGSubSurf.h
  	intern/pbvh_intern.h
 +	intern/data_transfer_intern.h
  )
  
+ if(WITH_BINRELOC)
+ 	list(APPEND INC_SYS
+ 		${BINRELOC_INCLUDE_DIRS}
+ 	)
+ 	add_definitions(-DWITH_BINRELOC)
+ endif()
+ 
  add_definitions(${GL_DEFINITIONS})
  
  if(WIN32)
diff --cc source/blender/makesrna/intern/rna_modifier.c
index e4d735f,cc7c978..d9af220
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@@ -719,265 -605,40 +720,300 @@@ static int rna_LaplacianDeformModifier_
  	return ((lmd->flag & MOD_LAPLACIANDEFORM_BIND) && (lmd->cache_system != NULL));
  }
  
++
+ /* NOTE: Curve and array modifiers requires curve path to be evaluated,
+  * dependency graph will make sure that curve eval would create such a path,
+  * but if curve was already evaluated we might miss path.
+  *
+  * So what we do here is: if path was not calculated for target curve we
+  * tag it for update.
+  */
+ 
+ static void rna_CurveModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+ {
+ 	CurveModifierData *cmd = (CurveModifierData *)ptr->data;
+ 	rna_Modifier_update(bmain, scene, ptr);
+ 	DAG_relations_tag_update(bmain);
+ 	if (cmd->object != NULL) {
+ 		Curve *curve = cmd->object->data;
+ 		if ((curve->flag & CU_PATH) == 0) {
+ 			DAG_id_tag_update(&curve->id, OB_RECALC_DATA);
+ 		}
+ 	}
+ }
+ 
+ static void rna_ArrayModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+ {
+ 	ArrayModifierData *amd = (ArrayModifierData *)ptr->data;
+ 	rna_Modifier_update(bmain, scene, ptr);
+ 	DAG_relations_tag_update(bmain);
+ 	if (amd->curve_ob != NULL) {
+ 		Curve *curve = amd->curve_ob->data;
+ 		if ((curve->flag & CU_PATH) == 0) {
+ 			DAG_id_tag_update(&curve->id, OB_RECALC_DATA);
+ 		}
+ 	}
+ }
+ 
++
 +static void rna_DataTransferModifier_use_data_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 +{
 +	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +
 +	if (!(dtmd->flags & MOD_DATATRANSFER_USE_VERT)) {
 +		dtmd->data_types &= ~DT_TYPE_VERT_ALL;
 +	}
 +	if (!(dtmd->flags & MOD_DATATRANSFER_USE_EDGE)) {
 +		dtmd->data_types &= ~DT_TYPE_EDGE_ALL;
 +	}
 +	if (!(dtmd->flags & MOD_DATATRANSFER_USE_LOOP)) {
 +		dtmd->data_types &= ~DT_TYPE_LOOP_ALL;
 +	}
 +	if (!(dtmd->flags & MOD_DATATRANSFER_USE_POLY)) {
 +		dtmd->data_types &= ~DT_TYPE_POLY_ALL;
 +	}
 +
 +	rna_Modifier_update(bmain, scene, ptr);
 +}
 +
 +static void rna_DataTransferModifier_data_types_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 +{
 +	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +	const int item_types = BKE_object_data_transfer_get_dttypes_item_types(dtmd->data_types);
 +
 +	if (item_types & ME_VERT) {
 +		dtmd->flags |= MOD_DATATRANSFER_USE_VERT;
 +	}
 +	if (item_types & ME_EDGE) {
 +		dtmd->flags |= MOD_DATATRANSFER_USE_EDGE;
 +	}
 +	if (item_types & ME_LOOP) {
 +		dtmd->flags |= MOD_DATATRANSFER_USE_LOOP;
 +	}
 +	if (item_types & ME_POLY) {
 +		dtmd->flags |= MOD_DATATRANSFER_USE_POLY;
 +	}
 +
 +	rna_Modifier_update(bmain, scene, ptr);
 +}
 +
 +static EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
 +{
 +	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +	EnumPropertyItem *item = NULL, tmp_item = {0};
 +	int totitem = 0;
 +
 +	if (!C) {  /* needed for docs and i18n tools */
 +		return DT_layers_select_src_items;
 +	}
 +
 +	/* No active here! */
 +	RNA_enum_items_add_value(&item, &totitem, DT_layers_select_src_items, DT_LAYERS_ALL_SRC);
 +
 +	if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_src")) {
 +		Object *ob_src = dtmd->ob_source;
 +
 +#if 0  /* XXX Don't think we want this in modifier version... */
 +		if (BKE_object_pose_armature_get(ob_src)) {
 +			RNA_enum_items_add_value(&item, &totitem, DT_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_SELECT);
 +			RNA_enum_items_add_value(&item, &totitem, DT_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_DEFORM);
 +		}
 +#endif
 +
 +		if (ob_src) {
 +			bDeformGroup *dg;
 +			int i;
 +
 +			RNA_enum_item_add_separator(&item, &totitem);
 +
 +			for (i = 0, dg = ob_src->defbase.first; dg; i++, dg = dg->next) {
 +				tmp_item.value = i;
 +				tmp_item.identifier = tmp_item.name = dg->name;
 +				RNA_enum_item_add(&item, &totitem, &tmp_item);
 +			}
 +		}
 +	}
 +	else if (STREQ(RNA_property_identifier(prop), "layers_shapekey_select_src")) {
 +		/* TODO */
 +	}
 +	else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_src")) {
 +		Object *ob_src = dtmd->ob_source;
 +
 +		if (ob_src) {
 +			DerivedMesh *dm_src;
 +			CustomData *pdata;
 +			int num_data, i;
 +
 +			/* XXX Is this OK? */
 +			dm_src = mesh_get_derived_final(dtmd->modifier.scene, ob_src, CD_MASK_BAREMESH | CD_MTEXPOLY);
 +			pdata = dm_src->getPolyDataLayout(dm_src);
 +			num_data = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
 +
 +			RNA_enum_item_add_separator(&item, &totitem);
 +
 +			for (i = 0; i < num_data; i++) {
 +				tmp_item.value = i;
 +				tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
 +				RNA_enum_item_add(&item, &totitem, &tmp_item);
 +			}
 +		}
 +	}
 +	else if (STREQ(RNA_property_identifier(prop), "layers_vcol_select_src")) {
 +		Object *ob_src = dtmd->ob_source;
 +
 +		if (ob_src) {
 +			DerivedMesh *dm_src;
 +			CustomData *ldata;
 +			int num_data, i;
 +
 +			/* XXX Is this OK? */
 +			dm_src = mesh_get_derived_final(dtmd->modifier.scene, ob_src, CD_MASK_BAREMESH | CD_MLOOPCOL);
 +			ldata = dm_src->getLoopDataLayout(dm_src);
 +			num_data = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
 +
 +			RNA_enum_item_add_separator(&item, &totitem);
 +
 +			for (i = 0; i < num_data; i++) {
 +				tmp_item.value = i;
 +				tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(ldata, CD_MLOOPCOL, i);
 +				RNA_enum_item_add(&item, &totitem, &tmp_item);
 +			}
 +		}
 +	}
 +
 +	RNA_enum_item_end(&item, &totitem);
 +	*r_free = true;
 +
 +	return item;
 +}
 +
 +static EnumPropertyItem *rna_DataTransferModifier_layers_select_dst_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
 +{
 +	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +	EnumPropertyItem *item = NULL, tmp_item = {0};
 +	int totitem = 0;
 +
 +	if (!C) {  /* needed for docs and i18n tools */
 +		return DT_layers_select_dst_items;
 +	}
 +
 +	/* No active here! */
 +	RNA_enum_items_add_value(&item, &totitem, DT_layers_select_dst_items, DT_LAYERS_NAME_DST);
 +	RNA_enum_items_add_value(&item, &totitem, DT_layers_select_dst_items, DT_LAYERS_INDEX_DST);
 +
 +	if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_dst")) {
 +		/* Only list destination layers if we have a single source! */
 +		if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_MDEFORMVERT] >= 0) {
 +			Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
 +
 +			if (ob_dst) {
 +				bDeformGroup *dg;
 +				int i;
 +
 +				RNA_enum_item_add_separator(&item, &totitem);
 +
 +				for (i = 0, dg = ob_dst->defbase.first; dg; i++, dg = dg->next) {
 +					tmp_item.value = i;
 +					tmp_item.identifier = tmp_item.name = dg->name;
 +					RNA_enum_item_add(&item, &totitem, &tmp_item);
 +				}
 +			}
 +		}
 +	}
 +	else if (STREQ(RNA_property_identifier(prop), "layers_shapekey_select_dst")) {
 +		/* TODO */
 +	}
 +	else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_dst")) {
 +		/* Only list destination layers if we have a single source! */
 +		if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_UV] >= 0) {
 +			Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
 +
 +			if (ob_dst && ob_dst->data) {
 +				Mesh *me_dst;
 +				CustomData *pdata;
 +				int num_data, i;
 +
 +				me_dst = ob_dst->data;
 +				pdata = &me_dst->pdata;
 +				num_data = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
 +
 +				RNA_enum_item_add_separator(&item, &totitem);
 +
 +				for (i = 0; i < num_data; i++) {
 +					tmp_item.value = i;
 +					tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
 +					RNA_enum_item_add(&item, &totitem, &tmp_item);
 +				}
 +			}
 +		}
 +	}
 +	else if (STREQ(RNA_property_identifier(prop), "layers_vcol_select_dst")) {
 +		/* Only list destination layers if we have a single source! */
 +		if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_VCOL] >= 0) {
 +			Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
 +
 +			if (ob_dst && ob_dst->data) {
 +				Mesh *me_dst;
 +				CustomData *ldata;
 +				int num_data, i;
 +
 +				me_dst = ob_dst->data;
 +				ldata = &me_dst->ldata;
 +				num_data = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
 +
 +				RNA_enum_item_add_separator(&item, &totitem);
 +
 +				for (i = 0; i < num_data; i++) {
 +					tmp_item.value = i;
 +					tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(ldata, CD_MLOOPCOL, i);
 +					RNA_enum_item_add(&item, &totitem, &tmp_item);
 +				}
 +			}
 +		}
 +	}
 +
 +
 +	RNA_enum_item_end(&item, &totitem);
 +	*r_free = true;
 +
 +	return item;
 +}
 +
 +static EnumPropertyItem *rna_DataTransferModifier_mix_mode_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
 +{
 +	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +	EnumPropertyItem *item = NULL;
 +	int totitem = 0;
 +
 +	bool support_advanced_mixing, support_threshold;
 +
 +	if (!C) {  /* needed for docs and i18n tools */
 +		return DT_mix_mode_items;
 +	}
 +
 +	RNA_enum_items_add_value(&item, &totitem, DT_mix_mode_items, CDT_MIX_TRANSFER);
 +
 +	BKE_object_data_transfer_get_dttypes_capacity(dtmd->data_types, &support_advanced_mixing, &support_threshold);
 +
 +	if (support_advanced_mixing) {
 +		RNA_enum_items_add_value(&item, &totitem, DT_mix_mode_items, CDT_MIX_REPLACE_ABOVE_THRESHOLD);
 +		RNA_enum_items_add_value(&item, &totitem, DT_mix_mode_items, CDT_MIX_REPLACE_BELOW_THRESHOLD);
 +	}
 +
 +	if (support_advanced_mix

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list