Commit: c94cef784868b18eb1458ee1094917aaf6e93c86
Author: Joshua Leung
Date:   Tue Jan 13 13:03:57 2015 +1300
Branches: depsgraph_refactor
https://developer.blender.org/rBc94cef784868b18eb1458ee1094917aaf6e93c86

Depsgraph: Bone constraints depending on the armature transforms were not 
working

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

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 1f77334..41a03ce 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -521,8 +521,24 @@ void DepsgraphRelationBuilder::build_constraints(Scene 
*scene, ID *id, eDepsNode
                                else {
                                        /* standard object relation */
                                        // TODO: loc vs rot vs scale?
-                                       /* TODO(sergey): What to do if target 
is self?  -- should use local transform or just the previous constraint in that 
case... */
-                                       if (&ct->tar->id != id) {
+                                       if (&ct->tar->id == id) {
+                                               /* Constraint targetting own 
object:
+                                                * - This case is fine IFF 
we're dealing with a bone constraint pointing to
+                                                *   its own armature. In that 
case, it's just transform -> bone.
+                                                * - If however it is a real 
self targetting case, just make it depend on the
+                                                *   previous constraint (or 
the pre-constraint state)...
+                                                */
+                                               if ((ct->tar->type == 
OB_ARMATURE) && (component_type == DEPSNODE_TYPE_BONE)) {
+                                                       OperationKey 
target_key(&ct->tar->id, DEPSNODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_FINAL);
+                                                       
add_relation(target_key, constraint_op_key, DEPSREL_TYPE_TRANSFORM, cti->name);
+                                               }
+                                               else {
+                                                       OperationKey 
target_key(&ct->tar->id, DEPSNODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_LOCAL);
+                                                       
add_relation(target_key, constraint_op_key, DEPSREL_TYPE_TRANSFORM, cti->name);
+                                               }
+                                       }
+                                       else {
+                                               /* normal object dependency */
                                                OperationKey 
target_key(&ct->tar->id, DEPSNODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_FINAL);
                                                add_relation(target_key, 
constraint_op_key, DEPSREL_TYPE_TRANSFORM, cti->name);
                                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to