Commit: 9fdd738b2b78df67ee11aeea957d13897a496072
Author: Sergey Sharybin
Date:   Mon Feb 2 20:21:07 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB9fdd738b2b78df67ee11aeea957d13897a496072

Depsgraph: Fix previous workaround for driving bone by itself

- No relations needs to be added in this case at all
- COver RNA paths now as well

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

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 d6f78b8..330b9ae 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -702,23 +702,17 @@ void DepsgraphRelationBuilder::build_driver(ID *id, 
FCurve *fcu)
                                if (target_pchan != NULL) {
                                        /* get node associated with bone */
                                        // XXX: watch the space!
-                                       eDepsOperation_Code target_key_opcode;
                                        /* Some casescan't use final bone 
transform, for example:
                                         * - Driving the bone with itself 
(addressed here)
                                         * - Relations inside an IK chain 
(TODO?)
                                         */
-                                       if (dtar->id == id) {
-                                               if (pchan != NULL && 
STREQ(pchan->name, target_pchan->name)) {
-                                                       target_key_opcode = 
DEG_OPCODE_BONE_READY;
-                                               }
-                                               else {
-                                                       target_key_opcode = 
DEG_OPCODE_BONE_DONE;
-                                               }
+                                       if (dtar->id == id &&
+                                           pchan != NULL &&
+                                           STREQ(pchan->name, 
target_pchan->name))
+                                       {
+                                               continue;
                                        }
-                                       else {
-                                               target_key_opcode = 
DEG_OPCODE_BONE_DONE;
-                                       }
-                                       OperationKey target_key(dtar->id, 
DEPSNODE_TYPE_BONE, target_pchan->name, target_key_opcode);
+                                       OperationKey target_key(dtar->id, 
DEPSNODE_TYPE_BONE, target_pchan->name, DEG_OPCODE_BONE_DONE);
                                        add_relation(target_key, driver_key, 
DEPSREL_TYPE_DRIVER_TARGET, "[Bone Target -> Driver]");
                                }
                        }
@@ -732,19 +726,20 @@ void DepsgraphRelationBuilder::build_driver(ID *id, 
FCurve *fcu)
                                 * having to wait for pose eval to finish (to 
prevent cycles)
                                 */
                                Object *ob = (Object *)dtar->id;
-                               bPoseChannel *pchan;
-                               char *bone_name;
-                               
-                               bone_name = 
BLI_str_quoted_substrN(dtar->rna_path, "pose.bones[");
-                               pchan = BKE_pose_channel_find_name(ob->pose, 
bone_name);
-                               
+                               char *bone_name = 
BLI_str_quoted_substrN(dtar->rna_path, "pose.bones[");
+                               bPoseChannel *target_pchan = 
BKE_pose_channel_find_name(ob->pose, bone_name);
                                if (bone_name) {
                                        MEM_freeN(bone_name);
                                        bone_name = NULL;
                                }
-                               
-                               if (pchan) {
-                                       OperationKey bone_key(dtar->id, 
DEPSNODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_LOCAL);
+                               if (target_pchan) {
+                                       if (dtar->id == id &&
+                                           pchan != NULL &&
+                                           STREQ(pchan->name, 
target_pchan->name))
+                                       {
+                                               continue;
+                                       }
+                                       OperationKey bone_key(dtar->id, 
DEPSNODE_TYPE_BONE, target_pchan->name, DEG_OPCODE_BONE_LOCAL);
                                        add_relation(bone_key, driver_key, 
DEPSREL_TYPE_DRIVER, "[RNA Bone -> Driver]");
                                }
                        }

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

Reply via email to