[Bf-blender-cvs] [d1d359b792f] master: Depsgraph: Fix missing relations for objects which are indirectly linked

Sergey Sharybin noreply at git.blender.org
Tue May 30 17:43:23 CEST 2017


Commit: d1d359b792fd30a109d8fe70444b8645c8f3998f
Author: Sergey Sharybin
Date:   Tue May 30 17:42:04 2017 +0200
Branches: master
https://developer.blender.org/rBd1d359b792fd30a109d8fe70444b8645c8f3998f

Depsgraph: Fix missing relations for objects which are indirectly linked

This is a corresponding part of 7dda3cf.

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

M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index ce238de4be9..df56ff5897c 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -113,6 +113,41 @@ extern "C" {
 
 namespace DEG {
 
+namespace {
+
+struct BuilderWalkUserData {
+	DepsgraphRelationBuilder *builder;
+	Main *bmain;
+	Scene *scene;
+};
+
+static void modifier_walk(void *user_data,
+                          struct Object * /*ob*/,
+                          struct Object **obpoin,
+                          int /*cb_flag*/)
+{
+	BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
+	if (*obpoin) {
+		data->builder->build_object(data->bmain, data->scene, *obpoin);
+	}
+}
+
+void constraint_walk(bConstraint * /*con*/,
+                     ID **idpoin,
+                     bool /*is_reference*/,
+                     void *user_data)
+{
+	BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
+	if (*idpoin) {
+		ID *id = *idpoin;
+		if (GS(id->name) == ID_OB) {
+			data->builder->build_object(data->bmain, data->scene, (Object *)id);
+		}
+	}
+}
+
+}  /* namespace */
+
 /* ***************** */
 /* Relations Builder */
 
@@ -407,6 +442,21 @@ void DepsgraphRelationBuilder::build_object(Main *bmain, Scene *scene, Object *o
 		             "[ObLocal -> ObParent]");
 	}
 
+	if (ob->modifiers.first != NULL) {
+		BuilderWalkUserData data;
+		data.builder = this;
+		data.bmain = bmain;
+		data.scene = scene;
+		modifiers_foreachObjectLink(ob, modifier_walk, &data);
+	}
+	if (ob->constraints.first != NULL) {
+		BuilderWalkUserData data;
+		data.builder = this;
+		data.bmain = bmain;
+		data.scene = scene;
+		BKE_constraints_id_loop(&ob->constraints, constraint_walk, &data);
+	}
+
 	/* object constraints */
 	if (ob->constraints.first != NULL) {
 		OperationKey constraint_key(&ob->id,




More information about the Bf-blender-cvs mailing list