[Bf-blender-cvs] [ebc07bc] depsgraph_refactor: Alternative builder method for adding operations to IDDepsNodes and fix for driver operations.

Lukas Tönne noreply at git.blender.org
Wed Apr 16 13:07:46 CEST 2014


Commit: ebc07bc48b0c7eaca27c298b68ffdf1a23b37e8c
Author: Lukas Tönne
Date:   Wed Apr 16 11:55:16 2014 +0200
https://developer.blender.org/rBebc07bc48b0c7eaca27c298b68ffdf1a23b37e8c

Alternative builder method for adding operations to IDDepsNodes and fix
for driver operations.

Driver operation has to be added to the parameters component. To avoid
having to pass this explicitly, use a wrapper method which constructs
the associated component for an operation if necessary.

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

M	source/blender/depsgraph/intern/depsgraph_build.cpp
M	source/blender/depsgraph/intern/depsgraph_build.h
M	source/blender/depsgraph/intern/depsgraph_build_nodes.cpp

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build.cpp b/source/blender/depsgraph/intern/depsgraph_build.cpp
index 0727e25..4f2f9c5 100644
--- a/source/blender/depsgraph/intern/depsgraph_build.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build.cpp
@@ -237,6 +237,17 @@ OperationDepsNode *DepsgraphNodeBuilder::add_operation_node(ComponentDepsNode *c
 	return op_node;
 }
 
+OperationDepsNode *DepsgraphNodeBuilder::add_operation_node(IDDepsNode *id_node, eDepsNode_Type type,
+                                                            eDepsOperation_Type optype, DepsEvalOperationCb op, const string &description,
+                                                            PointerRNA ptr)
+{
+	DepsNodeFactory *factory = DEG_get_node_factory(type);
+	ComponentDepsNode *comp_node = id_node->add_component(factory->component_type());
+	OperationDepsNode *op_node = comp_node->add_operation(type, optype, op, description);
+	op_node->ptr = ptr;
+	return op_node;
+}
+
 /* ************************************************* */
 /* Relations Builder */
 
diff --git a/source/blender/depsgraph/intern/depsgraph_build.h b/source/blender/depsgraph/intern/depsgraph_build.h
index bb29b2b..92cd387 100644
--- a/source/blender/depsgraph/intern/depsgraph_build.h
+++ b/source/blender/depsgraph/intern/depsgraph_build.h
@@ -69,6 +69,9 @@ struct DepsgraphNodeBuilder {
 	OperationDepsNode *add_operation_node(ComponentDepsNode *comp_node, eDepsNode_Type type,
 	                                      eDepsOperation_Type optype, DepsEvalOperationCb op, const string &description,
 	                                      PointerRNA ptr);
+	OperationDepsNode *add_operation_node(IDDepsNode *id_node, eDepsNode_Type type,
+	                                      eDepsOperation_Type optype, DepsEvalOperationCb op, const string &description,
+	                                      PointerRNA ptr);
 	
 	IDDepsNode *build_scene(Scene *scene);
 	SubgraphDepsNode *build_subgraph(Group *group);
@@ -79,7 +82,7 @@ struct DepsgraphNodeBuilder {
 	void build_rigidbody(IDDepsNode *scene_node, Scene *scene);
 	void build_particles(IDDepsNode *ob_node, Object *ob);
 	void build_animdata(IDDepsNode *id_node);
-	OperationDepsNode *build_driver(ComponentDepsNode *adt_node, FCurve *fcurve);
+	OperationDepsNode *build_driver(IDDepsNode *id_node, FCurve *fcurve);
 	void build_ik_pose(ComponentDepsNode *bone_node, Object *ob, bPoseChannel *pchan, bConstraint *con);
 	void build_splineik_pose(ComponentDepsNode *bone_node, Object *ob, bPoseChannel *pchan, bConstraint *con);
 	void build_rig(IDDepsNode *ob_node, Object *ob);
diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
index f633da6..d0d1a76 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -340,7 +340,7 @@ void DepsgraphNodeBuilder::build_animdata(IDDepsNode *id_node)
 		/* drivers */
 		for (FCurve *fcu = (FCurve *)adt->drivers.first; fcu; fcu = fcu->next) {
 			/* create driver */
-			/*OperationDepsNode *driver_node =*/ build_driver(adt_node, fcu);
+			/*OperationDepsNode *driver_node =*/ build_driver(id_node, fcu);
 			
 			/* hook up update callback associated with F-Curve */
 			// ...
@@ -352,13 +352,13 @@ void DepsgraphNodeBuilder::build_animdata(IDDepsNode *id_node)
  * < id: ID-Block that driver is attached to
  * < fcu: Driver-FCurve
  */
-OperationDepsNode *DepsgraphNodeBuilder::build_driver(ComponentDepsNode *adt_node, FCurve *fcurve)
+OperationDepsNode *DepsgraphNodeBuilder::build_driver(IDDepsNode *id_node, FCurve *fcurve)
 {
-	IDPtr id = adt_node->owner->id;
+	IDPtr id = id_node->id;
 	ChannelDriver *driver = fcurve->driver;
 	
 	/* create data node for this driver ..................................... */
-	OperationDepsNode *driver_op = add_operation_node(adt_node, DEPSNODE_TYPE_OP_DRIVER,
+	OperationDepsNode *driver_op = add_operation_node(id_node, DEPSNODE_TYPE_OP_DRIVER,
 	                                                  DEPSOP_TYPE_EXEC, BKE_animsys_eval_driver,
 	                                                  deg_op_name_driver(driver),
 	                                                  make_rna_pointer(id, &RNA_FCurve, fcurve));




More information about the Bf-blender-cvs mailing list