[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