[Bf-blender-cvs] [58b1544] depsgraph_refactor: Depsgraph: Need relation between IK solver and object transform

Sergey Sharybin noreply at git.blender.org
Fri Jan 23 13:57:01 CET 2015


Commit: 58b154419568a4c517ff8def8affac380fb4b22b
Author: Sergey Sharybin
Date:   Fri Jan 23 17:55:22 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB58b154419568a4c517ff8def8affac380fb4b22b

Depsgraph: Need relation between IK solver and object transform

IK solver ode needs to know object transform matrix so added relation for that.

Currently the relation is between object transform and pose components, so all
pose eval evaluation init happens nicely. In the future we might want to redirect
this relation to solver operation itself.

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

M	source/blender/depsgraph/intern/depsgraph_build_relations.cpp

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
index 08799fa..11fa28f 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -1244,15 +1244,18 @@ void DepsgraphRelationBuilder::build_rig(Scene *scene, Object *ob)
 	 * - Animated chain-lengths are a problem...
 	 */
 	RootPChanMap root_map;
+	bool have_ik_solver = false;
 	for (bPoseChannel *pchan = (bPoseChannel *)ob->pose->chanbase.first; pchan; pchan = pchan->next) {
 		for (bConstraint *con = (bConstraint *)pchan->constraints.first; con; con = con->next) {
 			switch (con->type) {
 				case CONSTRAINT_TYPE_KINEMATIC:
 					build_ik_pose(ob, pchan, con, &root_map);
+					have_ik_solver = true;
 					break;
 					
 				case CONSTRAINT_TYPE_SPLINEIK:
 					build_splineik_pose(ob, pchan, con, &root_map);
+					have_ik_solver = true;
 					break;
 					
 				default:
@@ -1261,6 +1264,15 @@ void DepsgraphRelationBuilder::build_rig(Scene *scene, Object *ob)
 		}
 	}
 
+	if (have_ik_solver) {
+		/* TODO(sergey): Once partial updates are possible use relation between
+		 * object transform and solver itself in it's build function.
+		 */
+		ComponentKey pose_key(&ob->id, DEPSNODE_TYPE_EVAL_POSE);
+		ComponentKey local_transform_key(&ob->id, DEPSNODE_TYPE_TRANSFORM);
+		add_relation(local_transform_key, pose_key, DEPSREL_TYPE_TRANSFORM, "Local Transforms");
+	}
+
 #if 0
 	/* links between different bones - parenting relationships */
 	for (bPoseChannel *pchan = (bPoseChannel *)ob->pose->chanbase.first;




More information about the Bf-blender-cvs mailing list