[Bf-blender-cvs] [72c646b] soc-2016-layer_manager: Merge branch 'master' into soc-2016-layer_manager

Julian Eisel noreply at git.blender.org
Mon Aug 1 21:29:31 CEST 2016


Commit: 72c646b4e41a6fe3968b7924654b579bf0d785f1
Author: Julian Eisel
Date:   Mon Aug 1 21:29:18 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB72c646b4e41a6fe3968b7924654b579bf0d785f1

Merge branch 'master' into soc-2016-layer_manager

Conflicts:
	source/blender/blenkernel/intern/softbody.c

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



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

diff --cc source/blender/blenkernel/intern/softbody.c
index 953a045,901926d..adaa245
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@@ -504,52 -518,77 +520,81 @@@ static void ccd_build_deflector_hash(Sc
  
  	if (!hash) return;
  
- 	BKE_BASES_ITER_START(scene)
- 	{
- 		/*Only proceed for mesh object in same layer */
- 		if (base->object->type==OB_MESH && (base->lay & vertexowner->lay)) {
- 			ob= base->object;
- 			if ((vertexowner) && (ob == vertexowner)) {
- 				/* if vertexowner is given  we don't want to check collision with owner object */
+ 	if (group) {
+ 		/* Explicit collision group */
+ 		for (GroupObject *go = group->gobject.first; go; go = go->next) {
+ 			ob = go->ob;
+ 
+ 			if (ob == vertexowner || ob->type != OB_MESH)
  				continue;
- 			}
  
- 			/*+++ only with deflecting set */
- 			if (ob->pd && ob->pd->deflect && BLI_ghash_lookup(hash, ob) == NULL) {
- 				ccd_Mesh *ccdmesh = ccd_mesh_make(ob);
- 				BLI_ghash_insert(hash, ob, ccdmesh);
- 			}/*--- only with deflecting set */
+ 			ccd_build_deflector_hash_single(hash, ob);
+ 		}
+ 	}
+ 	else {
 -		for (Base *base = scene->base.first; base; base = base->next) {
++		BKE_BASES_ITER_START(scene)
++		{
+ 			/*Only proceed for mesh object in same layer */
+ 			if (base->object->type == OB_MESH && (base->lay & vertexowner->lay)) {
+ 				ob= base->object;
+ 				if ((vertexowner) && (ob == vertexowner)) {
+ 					/* if vertexowner is given  we don't want to check collision with owner object */
+ 					continue;
+ 				}
+ 
+ 				ccd_build_deflector_hash_single(hash, ob);
+ 			}
+ 		}
++		BKE_BASES_ITER_END;
+ 	}
+ }
  
- 		}/* mesh && layer*/
+ static void ccd_update_deflector_hash_single(GHash *hash, Object *ob)
+ {
+ 	if (ob->pd && ob->pd->deflect) {
+ 		ccd_Mesh *ccdmesh = BLI_ghash_lookup(hash, ob);
+ 		if (ccdmesh) {
+ 			ccd_mesh_update(ob, ccdmesh);
+ 		}
  	}
- 	BKE_BASES_ITER_END;
  }
  
- static void ccd_update_deflector_hash(Scene *scene, Object *vertexowner, GHash *hash)
+ /**
+  * \note group overrides scene when not NULL.
+  */
+ static void ccd_update_deflector_hash(Scene *scene, Group *group, Object *vertexowner, GHash *hash)
  {
  	Object *ob;
  
  	if ((!hash) || (!vertexowner)) return;
- 	BKE_BASES_ITER_START(scene)
- 	{
- 		/*Only proceed for mesh object in same layer */
- 		if (base->object->type==OB_MESH && (base->lay & vertexowner->lay)) {
- 			ob= base->object;
- 			if (ob == vertexowner) {
- 				/* if vertexowner is given  we don't want to check collision with owner object */
+ 
+ 	if (group) {
+ 		/* Explicit collision group */
+ 		for (GroupObject *go = group->gobject.first; go; go = go->next) {
+ 			ob = go->ob;
+ 
+ 			if (ob == vertexowner || ob->type != OB_MESH)
  				continue;
- 			}
  
- 			/*+++ only with deflecting set */
- 			if (ob->pd && ob->pd->deflect) {
- 				ccd_Mesh *ccdmesh = BLI_ghash_lookup(hash, ob);
- 				if (ccdmesh)
- 					ccd_mesh_update(ob, ccdmesh);
- 			}/*--- only with deflecting set */
+ 			ccd_update_deflector_hash_single(hash, ob);
+ 		}
+ 	}
+ 	else {
 -		for (Base *base = scene->base.first; base; base = base->next) {
++		BKE_BASES_ITER_START(scene)
++		{
+ 			/*Only proceed for mesh object in same layer */
+ 			if (base->object->type == OB_MESH && (base->lay & vertexowner->lay)) {
+ 				ob= base->object;
+ 				if (ob == vertexowner) {
+ 					/* if vertexowner is given  we don't want to check collision with owner object */
+ 					continue;
+ 				}
  
- 		}/* mesh && layer*/
+ 				ccd_update_deflector_hash_single(hash, ob);
+ 			}
+ 		}
++		BKE_BASES_ITER_END;
  	}
- 	BKE_BASES_ITER_END;
  }
  
  
@@@ -944,7 -985,15 +991,17 @@@ static bool are_there_deflectors(Scene 
  				return 1;
  		}
  	}
- 	BKE_BASES_ITER_END;
+ 	else {
 -		for (Base *base = scene->base.first; base; base= base->next) {
++		BKE_BASES_ITER_START(scene)
++		{
+ 			if ( (base->lay & layer) && base->object->pd) {
+ 				if (base->object->pd->deflect)
+ 					return 1;
+ 			}
+ 		}
++		BKE_BASES_ITER_END;
+ 	}
+ 
  	return 0;
  }
  
diff --cc source/blender/blenloader/intern/versioning_270.c
index ee686f7,3e6b0d3..6ab68e7
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@@ -1233,22 -1231,24 +1233,41 @@@ void blo_do_versions_270(FileData *fd, 
  				br->flag |= BRUSH_ACCUMULATE;
  			}
  		}
+ 
+ 		if (!DNA_struct_elem_find(fd->filesdna, "ClothSimSettings", "float", "time_scale")) {
+ 			Object *ob;
+ 			ModifierData *md;
+ 			for (ob = main->object.first; ob; ob = ob->id.next) {
+ 				for (md = ob->modifiers.first; md; md = md->next) {
+ 					if (md->type == eModifierType_Cloth) {
+ 						ClothModifierData *clmd = (ClothModifierData *)md;
+ 						clmd->sim_parms->time_scale = 1.0f;
+ 					}
+ 					else if (md->type == eModifierType_ParticleSystem) {
+ 						ParticleSystemModifierData *pmd = (ParticleSystemModifierData *)md;
+ 						if (pmd->psys->clmd) {
+ 							pmd->psys->clmd->sim_parms->time_scale = 1.0f;
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}
  	}
 +
 +	/* Convert to new layer system */
 +	if (!MAIN_VERSION_ATLEAST(main, 277, 2)) {
 +		if (!DNA_struct_elem_find(fd->filesdna, "Scene", "LayerTree", "object_layers")) {
 +			for (Scene *sce = main->scene.first; sce; sce = sce->id.next) {
 +				sce->object_layers = BKE_layertree_new(LAYER_TREETYPE_OBJECT);
 +				LayerTreeItem *litem = BKE_objectlayer_add(sce->object_layers, NULL, "Default layer");
 +				sce->object_layers->active_layer = litem;
 +
 +				BKE_objectlayer_base_entries_reserve(litem, BLI_listbase_count(&sce->base));
 +				/* For now, simply create a new layer and move all objects into it */
 +				for (Base *base = sce->base.first; base; base = base->next) {
 +					BKE_objectlayer_base_assign(base, litem, true);
 +				}
 +			}
 +		}
 +	}
  }




More information about the Bf-blender-cvs mailing list