Depsgraph: Fix dependency when constraint influence drives some other constraint
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 21 Feb 2018 10:13:25 +0000 (11:13 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 21 Feb 2018 10:13:25 +0000 (11:13 +0100)
It is not possible to address transform at particular position of constraint
stack, and when constraint is being addressed is usually from driver variable.

This fixes some of dependency cycles reported in T54083.

source/blender/depsgraph/intern/depsgraph.cc

index 997e7ad1d40f951d2ada209b703c9d603b54c94c..13b9f746e6b21e9904b39a52d8dd2b60213c40cf 100644 (file)
@@ -149,16 +149,20 @@ static bool pointer_to_component_node_criteria(
                Object *object = (Object *)ptr->id.data;
                bConstraint *con = (bConstraint *)ptr->data;
                /* Check whether is object or bone constraint. */
+               /* NOTE: Currently none of the area can address transform of an object
+                * at a given constraint, but for rigging one might use constraint
+                * influence to be used to drive some corrective shape keys or so.
+                */
                if (BLI_findindex(&object->constraints, con) != -1) {
-                       /* Constraint is defining object transform. */
                        *type = DEG_NODE_TYPE_TRANSFORM;
+                       *operation_code = DEG_OPCODE_TRANSFORM_LOCAL;
                        return true;
                }
                else if (object->pose != NULL) {
                        LISTBASE_FOREACH(bPoseChannel *, pchan, &object->pose->chanbase) {
                                if (BLI_findindex(&pchan->constraints, con) != -1) {
-                                       /* bone transforms */
                                        *type = DEG_NODE_TYPE_BONE;
+                                       *operation_code = DEG_OPCODE_BONE_LOCAL;
                                        *subdata = pchan->name;
                                        return true;
                                }