[Bf-blender-cvs] [ac06f77d256] temp-fracture-modifier-2.8: proper collection iteration in updateDepsgraph etc + couple of fixes
Martin Felke
noreply at git.blender.org
Sat Aug 25 22:03:25 CEST 2018
Commit: ac06f77d256913a2ef8ef7355d46f0af7c7f5eac
Author: Martin Felke
Date: Sat Aug 25 18:46:40 2018 +0200
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rBac06f77d256913a2ef8ef7355d46f0af7c7f5eac
proper collection iteration in updateDepsgraph etc + couple of fixes
===================================================================
M source/blender/makesrna/intern/rna_rigidbody.c
M source/blender/modifiers/intern/MOD_fracture.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c
index ee790b3eef0..46124a43799 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -294,7 +294,7 @@ static void rna_RigidBodyOb_shape_reset(Main *UNUSED(bmain), Scene *scene, Point
Object *ob = ptr->id.data;
foreach_shard_flag_shape(ob, rbo->flag, rbo->shape, true);
- BKE_rigidbody_cache_reset(rbw);
+ BKE_rigidbody_cache_reset(scene);
if (rbo->shared->physics_shape)
rbo->flag |= RBO_FLAG_NEEDS_RESHAPE;
}
@@ -598,11 +598,11 @@ static void rna_RigidBodyOb_force_threshold_set(PointerRNA *ptr, float value)
foreach_shard_float(ob, value, set_force_threshold);
}
-static void rna_RigidBodyWorld_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_RigidBodyWorld_reset(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- RigidBodyWorld *rbw = (RigidBodyWorld *)ptr->data;
+ //RigidBodyWorld *rbw = (RigidBodyWorld *)ptr->data;
- BKE_rigidbody_cache_reset(rbw);
+ BKE_rigidbody_cache_reset(scene);
}
static char *rna_RigidBodyWorld_path(PointerRNA *UNUSED(ptr))
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 88ed5486c04..40965636e76 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -32,6 +32,7 @@
#include <string.h> //for memcpy
#include "MEM_guardedalloc.h"
+#include "BKE_collection.h"
#include "BKE_fracture.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
@@ -240,37 +241,58 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
}
if (fmd->extra_group) {
- CollectionObject *go;
- for (go = fmd->extra_group->gobject.first; go; go = go->next) {
- if (go->ob)
- {
- DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Extra");
- DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Extra");
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->extra_group, obj)
+ {
+ if (ctx->object != obj) {
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Extra");
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Extra");
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
if (fmd->autohide_filter_group) {
- CollectionObject *go;
- for (go = fmd->autohide_filter_group->gobject.first; go; go = go->next) {
- if (go->ob)
- {
- DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Autohide Filter");
- DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Autohide Filter");
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->autohide_filter_group, obj)
+ {
+ if (ctx->object != obj) {
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Autohide Filter");
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Autohide Filter");
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
if (fmd->cutter_group) {
- CollectionObject *go;
- for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
- if (go->ob)
- {
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->cutter_group, obj)
+ {
+ if (ctx->object != obj) {
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Cutter");
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Cutter");
+ }
+ }
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
+ }
+
+ if (fmd->dm_group) {
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->dm_group, obj)
+ {
+ if (ctx->object != obj) {
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Pack");
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Pack");
+ }
+ }
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
+ }
- DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Cutter");
- DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Cutter");
+ if (ctx->scene->rigidbody_world && ctx->scene->rigidbody_world->group) {
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(ctx->scene->rigidbody_world->group, obj)
+ {
+ if (ctx->object != obj) {
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier RBW");
+ DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier RBW");
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
/* We need own transformation as well. */
@@ -288,40 +310,43 @@ static void foreachObjectLink(
walk(userData, ob, &fmd->anim_mesh_ob, IDWALK_CB_NOP);
if (fmd->extra_group) {
- CollectionObject *go;
- for (go = fmd->extra_group->gobject.first; go; go = go->next) {
- if (go->ob) {
- walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->extra_group, obj)
+ {
+ if (ob != obj) {
+ walk(userData, ob, &obj, IDWALK_CB_NOP);
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
if (fmd->cutter_group) {
- CollectionObject *go;
- for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
- if (go->ob) {
- walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->cutter_group, obj)
+ {
+ if (ob != obj) {
+ walk(userData, ob, &obj, IDWALK_CB_NOP);
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
if (fmd->autohide_filter_group) {
- CollectionObject *go;
- for (go = fmd->autohide_filter_group->gobject.first; go; go = go->next) {
- if (go->ob) {
- walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->autohide_filter_group, obj)
+ {
+ if (ob != obj) {
+ walk(userData, ob, &obj, IDWALK_CB_NOP);
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
- if (fmd->cutter_group) {
- CollectionObject *go;
- for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
- if (go->ob)
- {
- walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+ if (fmd->dm_group) {
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->dm_group, obj)
+ {
+ if (ob != obj) {
+ walk(userData, ob, &obj, IDWALK_CB_NOP);
}
}
+ FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
}
More information about the Bf-blender-cvs
mailing list