[Bf-blender-cvs] [f5e1b218958] custom-manipulators: Merge branch 'blender2.8' into custom-manipulators

Campbell Barton noreply at git.blender.org
Mon Jun 5 06:53:51 CEST 2017


Commit: f5e1b218958a563f13aeb96b855ac9b46f279da4
Author: Campbell Barton
Date:   Mon Jun 5 14:47:35 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBf5e1b218958a563f13aeb96b855ac9b46f279da4

Merge branch 'blender2.8' into custom-manipulators

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



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

diff --cc source/blender/blenkernel/intern/armature.c
index 78120c054d7,6f04be653d1..c022611d17b
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@@ -2443,73 -2438,3 +2443,73 @@@ bPoseChannel *BKE_armature_splineik_sol
  	}
  	return rootchan;
  }
 +
 +void BKE_pose_fmap_cache_update(Depsgraph *graph, Object *ob_pose)
 +{
 +	if (ELEM(NULL, ob_pose, ob_pose->pose)) {
 +		return;
 +	}
 +
 +	bool has_fmap = false;
 +	for (bPoseChannel *pchan = ob_pose->pose->chanbase.first; pchan; pchan = pchan->next) {
 +		MEM_SAFE_FREE(pchan->fmap_data);
 +		if (pchan->bone->flag & BONE_DRAW_FMAP) {
 +			has_fmap = true;
 +		}
 +	}
 +
 +	if (has_fmap == false) {
 +		return;
 +	}
 +
 +	BKE_pose_channels_hash_make(ob_pose->pose);
 +
 +	Scene *scene = DEG_get_scene(graph);
 +
 +	VirtualModifierData virtualModifierData;
 +
- 	DEG_OBJECT_ITER(graph, ob)
++	DEG_OBJECT_ITER(graph, ob, 0)
 +	{
 +		if ((ob->type == OB_MESH) && !BLI_listbase_is_empty(&ob->fmaps)) {
 +			bool use_ob_fmap = false;
 +			ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
 +			for (; md; md = md->next) {
 +				if (modifier_isEnabled(scene, md, eModifierMode_Realtime) && md->type == eModifierType_Armature) {
 +					ArmatureModifierData *amd = (ArmatureModifierData *)md;
 +					if (amd->object && (amd->deformflag & ARM_DEF_FACEMAPS)) {
 +						if (amd->object == ob_pose) {
 +							use_ob_fmap = true;
 +							break;
 +						}
 +					}
 +				}
 +			}
 +
 +			/* bone parent */
 +			if (use_ob_fmap == false) {
 +				if (ob->parent == ob_pose && ob->parsubstr[0]) {
 +					use_ob_fmap = true;
 +				}
 +			}
 +
 +			if (use_ob_fmap) {
 +				/* We know that 'ob' is a mesh that is deformed by 'ob_act'. */
 +				for (bFaceMap *fmap = ob->fmaps.first; fmap; fmap = fmap->next) {
 +					bPoseChannel *pchan = BKE_pose_channel_find_name(ob_pose->pose, fmap->name);
 +					if (pchan && pchan->bone->flag & BONE_DRAW_FMAP) {
 +						if (pchan->fmap_data != NULL) {
 +							/* XXX, we could support multiple meshes per bone,
 +							 * it's a corner-case so only add if users end up needing it. */
 +							continue;
 +						}
 +
 +						pchan->fmap_data = MEM_mallocN(sizeof(*pchan->fmap_data), __func__);
 +						pchan->fmap_data->object = ob;
 +						pchan->fmap_data->fmap = fmap;
 +					}
 +				}
 +			}
 +		}
 +	}
 +	DEG_OBJECT_ITER_END
 +}
diff --cc source/blender/depsgraph/intern/depsgraph_query.cc
index 8411393e812,4241325d571..6d73f4a57ea
--- a/source/blender/depsgraph/intern/depsgraph_query.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query.cc
@@@ -137,16 -188,18 +188,19 @@@ void DEG_objects_iterator_next(BLI_Iter
  			/* Make sure we have the base collection settings is already populated.
  			 * This will fail when BKE_layer_eval_layer_collection_pre hasn't run yet
  			 * Which usually means a missing call to DAG_id_tag_update(). */
 -			BLI_assert(!BLI_listbase_is_empty(&base->collection_properties->data.group));
 +			BLI_assert((base->collection_properties == NULL) ||
 +			           !BLI_listbase_is_empty(&base->collection_properties->data.group));
  
  			/* Flushing depsgraph data. */
- 			ob->base_flag = (base->flag | BASE_FROM_SET) & data->flag;
- 			ob->base_collection_properties = base->collection_properties;
- 			ob->base_selection_color = base->selcol;
- 			data->base = base;
+ 			deg_flush_data(ob, base, data->base_flag);
+ 
+ 			if ((data->flag & DEG_OBJECT_ITER_FLAG_DUPLI) && (ob->transflag & OB_DUPLI)) {
+ 				data->dupli_list = object_duplilist(data->eval_ctx, data->scene, ob);
+ 				data->dupli_object = (DupliObject *)data->dupli_list->first;
+ 			}
  			return;
  		}
+ 
  		base = base->next;
  	}




More information about the Bf-blender-cvs mailing list