Depsgraph: Comb code to a better state all over
[blender.git] / source / blender / depsgraph / intern / builder / deg_builder_relations_rig.cc
index efedf847515e61985ca5cfce41c3b164cc87d368..0915da3f7ccff7f0e02639f51bc445445c627cd8 100644 (file)
@@ -59,15 +59,12 @@ extern "C" {
 
 #include "intern/builder/deg_builder.h"
 #include "intern/builder/deg_builder_pchanmap.h"
 
 #include "intern/builder/deg_builder.h"
 #include "intern/builder/deg_builder_pchanmap.h"
+#include "intern/debug/deg_debug.h"
+#include "intern/node/deg_node.h"
+#include "intern/node/deg_node_component.h"
+#include "intern/node/deg_node_operation.h"
 
 
-#include "intern/nodes/deg_node.h"
-#include "intern/nodes/deg_node_component.h"
-#include "intern/nodes/deg_node_operation.h"
-
-#include "intern/depsgraph_intern.h"
-#include "intern/depsgraph_types.h"
-
-#include "util/deg_util_foreach.h"
+#include "intern/depsgraph_type.h"
 
 namespace DEG {
 
 
 namespace DEG {
 
@@ -84,24 +81,24 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                return;
        }
        OperationKey pchan_local_key(&object->id,
                return;
        }
        OperationKey pchan_local_key(&object->id,
-                                    DEG_NODE_TYPE_BONE,
+                                    NodeType::BONE,
                                     pchan->name,
                                     pchan->name,
-                                    DEG_OPCODE_BONE_LOCAL);
+                                    OperationCode::BONE_LOCAL);
        OperationKey init_ik_key(
        OperationKey init_ik_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_INIT_IK);
        OperationKey solver_key(&object->id,
        OperationKey solver_key(&object->id,
-                               DEG_NODE_TYPE_EVAL_POSE,
+                               NodeType::EVAL_POSE,
                                rootchan->name,
                                rootchan->name,
-                               DEG_OPCODE_POSE_IK_SOLVER);
+                               OperationCode::POSE_IK_SOLVER);
        OperationKey pose_cleanup_key(
        OperationKey pose_cleanup_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_CLEANUP);
        add_relation(pchan_local_key, init_ik_key, "IK Constraint -> Init IK Tree");
        add_relation(init_ik_key, solver_key, "Init IK -> IK Solver");
        /* Never cleanup before solver is run. */
        add_relation(solver_key,
                     pose_cleanup_key,
                     "IK Solver -> Cleanup",
        add_relation(pchan_local_key, init_ik_key, "IK Constraint -> Init IK Tree");
        add_relation(init_ik_key, solver_key, "Init IK -> IK Solver");
        /* Never cleanup before solver is run. */
        add_relation(solver_key,
                     pose_cleanup_key,
                     "IK Solver -> Cleanup",
-                    DEPSREL_FLAG_GODMODE);
+                    RELATION_FLAG_GODMODE);
        /* IK target */
        /* TODO(sergey): This should get handled as part of the constraint code. */
        if (data->tar != NULL) {
        /* IK target */
        /* TODO(sergey): This should get handled as part of the constraint code. */
        if (data->tar != NULL) {
@@ -112,23 +109,23 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                 * This way we ensuring the whole subtree is updated from scratch
                 * without need of intermediate matricies. This is an overkill, but good
                 * enough for testing IK solver. */
                 * This way we ensuring the whole subtree is updated from scratch
                 * without need of intermediate matricies. This is an overkill, but good
                 * enough for testing IK solver. */
-               ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
+               ComponentKey pose_key(&object->id, NodeType::EVAL_POSE);
                if ((data->tar->type == OB_ARMATURE) && (data->subtarget[0])) {
                        /* TODO(sergey): This is only for until granular update stores
                         * intermediate result. */
                        if (data->tar != object) {
                                /* Different armature - can just read the results. */
                                ComponentKey target_key(
                if ((data->tar->type == OB_ARMATURE) && (data->subtarget[0])) {
                        /* TODO(sergey): This is only for until granular update stores
                         * intermediate result. */
                        if (data->tar != object) {
                                /* Different armature - can just read the results. */
                                ComponentKey target_key(
-                                       &data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget);
+                                       &data->tar->id, NodeType::BONE, data->subtarget);
                                add_relation(target_key, pose_key, con->name);
                        }
                        else {
                                /* Same armature - we'll use the ready state only, just in case
                                 * this bone is in the chain we're solving. */
                                OperationKey target_key(&data->tar->id,
                                add_relation(target_key, pose_key, con->name);
                        }
                        else {
                                /* Same armature - we'll use the ready state only, just in case
                                 * this bone is in the chain we're solving. */
                                OperationKey target_key(&data->tar->id,
-                                                       DEG_NODE_TYPE_BONE,
+                                                       NodeType::BONE,
                                                        data->subtarget,
                                                        data->subtarget,
-                                                       DEG_OPCODE_BONE_DONE);
+                                                       OperationCode::BONE_DONE);
                                add_relation(target_key, solver_key, con->name);
                        }
                }
                                add_relation(target_key, solver_key, con->name);
                        }
                }
@@ -138,13 +135,13 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                        /* Vertex group target. */
                        /* NOTE: for now, we don't need to represent vertex groups
                         * separately. */
                        /* Vertex group target. */
                        /* NOTE: for now, we don't need to represent vertex groups
                         * separately. */
-                       ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_GEOMETRY);
+                       ComponentKey target_key(&data->tar->id, NodeType::GEOMETRY);
                        add_relation(target_key, solver_key, con->name);
                        add_customdata_mask(data->tar, CD_MASK_MDEFORMVERT);
                }
                else {
                        /* Standard Object Target. */
                        add_relation(target_key, solver_key, con->name);
                        add_customdata_mask(data->tar, CD_MASK_MDEFORMVERT);
                }
                else {
                        /* Standard Object Target. */
-                       ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_TRANSFORM);
+                       ComponentKey target_key(&data->tar->id, NodeType::TRANSFORM);
                        add_relation(target_key, pose_key, con->name);
                }
                if (data->tar == object && data->subtarget[0]) {
                        add_relation(target_key, pose_key, con->name);
                }
                if (data->tar == object && data->subtarget[0]) {
@@ -158,7 +155,7 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
        if (data->poletar != NULL) {
                if ((data->poletar->type == OB_ARMATURE) && (data->polesubtarget[0])) {
                        ComponentKey target_key(&data->poletar->id,
        if (data->poletar != NULL) {
                if ((data->poletar->type == OB_ARMATURE) && (data->polesubtarget[0])) {
                        ComponentKey target_key(&data->poletar->id,
-                                               DEG_NODE_TYPE_BONE,
+                                               NodeType::BONE,
                                                data->polesubtarget);
                        add_relation(target_key, solver_key, con->name);
                }
                                                data->polesubtarget);
                        add_relation(target_key, solver_key, con->name);
                }
@@ -168,12 +165,12 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                        /* Vertex group target. */
                        /* NOTE: for now, we don't need to represent vertex groups
                         * separately. */
                        /* Vertex group target. */
                        /* NOTE: for now, we don't need to represent vertex groups
                         * separately. */
-                       ComponentKey target_key(&data->poletar->id, DEG_NODE_TYPE_GEOMETRY);
+                       ComponentKey target_key(&data->poletar->id, NodeType::GEOMETRY);
                        add_relation(target_key, solver_key, con->name);
                        add_customdata_mask(data->poletar, CD_MASK_MDEFORMVERT);
                }
                else {
                        add_relation(target_key, solver_key, con->name);
                        add_customdata_mask(data->poletar, CD_MASK_MDEFORMVERT);
                }
                else {
-                       ComponentKey target_key(&data->poletar->id, DEG_NODE_TYPE_TRANSFORM);
+                       ComponentKey target_key(&data->poletar->id, NodeType::TRANSFORM);
                        add_relation(target_key, solver_key, con->name);
                }
        }
                        add_relation(target_key, solver_key, con->name);
                }
        }
@@ -189,8 +186,8 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                parchan = pchan->parent;
        }
        root_map->add_bone(parchan->name, rootchan->name);
                parchan = pchan->parent;
        }
        root_map->add_bone(parchan->name, rootchan->name);
-       OperationKey parchan_transforms_key(&object->id, DEG_NODE_TYPE_BONE,
-                                           parchan->name, DEG_OPCODE_BONE_READY);
+       OperationKey parchan_transforms_key(&object->id, NodeType::BONE,
+                                           parchan->name, OperationCode::BONE_READY);
        add_relation(parchan_transforms_key, solver_key, "IK Solver Owner");
        /* Walk to the chain's root. */
        int segcount = 0;
        add_relation(parchan_transforms_key, solver_key, "IK Solver Owner");
        /* Walk to the chain's root. */
        int segcount = 0;
@@ -201,21 +198,21 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                 * with IK solver results. */
                if (parchan != pchan) {
                        OperationKey parent_key(&object->id,
                 * with IK solver results. */
                if (parchan != pchan) {
                        OperationKey parent_key(&object->id,
-                                               DEG_NODE_TYPE_BONE,
+                                               NodeType::BONE,
                                                parchan->name,
                                                parchan->name,
-                                               DEG_OPCODE_BONE_READY);
+                                               OperationCode::BONE_READY);
                        add_relation(parent_key, solver_key, "IK Chain Parent");
                        OperationKey bone_done_key(&object->id,
                        add_relation(parent_key, solver_key, "IK Chain Parent");
                        OperationKey bone_done_key(&object->id,
-                                                  DEG_NODE_TYPE_BONE,
+                                                  NodeType::BONE,
                                                   parchan->name,
                                                   parchan->name,
-                                                  DEG_OPCODE_BONE_DONE);
+                                                  OperationCode::BONE_DONE);
                        add_relation(solver_key, bone_done_key, "IK Chain Result");
                }
                else {
                        OperationKey final_transforms_key(&object->id,
                        add_relation(solver_key, bone_done_key, "IK Chain Result");
                }
                else {
                        OperationKey final_transforms_key(&object->id,
-                                                         DEG_NODE_TYPE_BONE,
+                                                         NodeType::BONE,
                                                          parchan->name,
                                                          parchan->name,
-                                                         DEG_OPCODE_BONE_DONE);
+                                                         OperationCode::BONE_DONE);
                        add_relation(solver_key, final_transforms_key, "IK Solver Result");
                }
                parchan->flag |= POSE_DONE;
                        add_relation(solver_key, final_transforms_key, "IK Solver Result");
                }
                parchan->flag |= POSE_DONE;
@@ -234,7 +231,7 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
                parchan  = parchan->parent;
        }
        OperationKey pose_done_key(
                parchan  = parchan->parent;
        }
        OperationKey pose_done_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_DONE);
        add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link");
 }
 
        add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link");
 }
 
@@ -247,18 +244,18 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object,
        bSplineIKConstraint *data = (bSplineIKConstraint *)con->data;
        bPoseChannel *rootchan = BKE_armature_splineik_solver_find_root(pchan, data);
        OperationKey transforms_key(&object->id,
        bSplineIKConstraint *data = (bSplineIKConstraint *)con->data;
        bPoseChannel *rootchan = BKE_armature_splineik_solver_find_root(pchan, data);
        OperationKey transforms_key(&object->id,
-                                   DEG_NODE_TYPE_BONE,
+                                   NodeType::BONE,
                                    pchan->name,
                                    pchan->name,
-                                   DEG_OPCODE_BONE_READY);
+                                   OperationCode::BONE_READY);
        OperationKey init_ik_key(&object->id,
        OperationKey init_ik_key(&object->id,
-                                DEG_NODE_TYPE_EVAL_POSE,
-                                DEG_OPCODE_POSE_INIT_IK);
+                                NodeType::EVAL_POSE,
+                                OperationCode::POSE_INIT_IK);
        OperationKey solver_key(&object->id,
        OperationKey solver_key(&object->id,
-                               DEG_NODE_TYPE_EVAL_POSE,
+                               NodeType::EVAL_POSE,
                                rootchan->name,
                                rootchan->name,
-                               DEG_OPCODE_POSE_SPLINE_IK_SOLVER);
+                               OperationCode::POSE_SPLINE_IK_SOLVER);
        OperationKey pose_cleanup_key(
        OperationKey pose_cleanup_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_CLEANUP);
        /* Solver depends on initialization. */
        add_relation(init_ik_key, solver_key, "Init IK -> IK Solver");
        /* Never cleanup before solver is run. */
        /* Solver depends on initialization. */
        add_relation(init_ik_key, solver_key, "Init IK -> IK Solver");
        /* Never cleanup before solver is run. */
@@ -267,22 +264,21 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object,
        add_relation(transforms_key,
                     solver_key,
                     "Spline IK Solver Owner",
        add_relation(transforms_key,
                     solver_key,
                     "Spline IK Solver Owner",
-                    DEPSREL_FLAG_GODMODE);
+                    RELATION_FLAG_GODMODE);
        /* Attach path dependency to solver. */
        if (data->tar != NULL) {
                /* TODO(sergey): For until we'll store partial matricies in the
                 * depsgraph, we create dependency between target object and pose eval
        /* Attach path dependency to solver. */
        if (data->tar != NULL) {
                /* TODO(sergey): For until we'll store partial matricies in the
                 * depsgraph, we create dependency between target object and pose eval
-                * component. See IK pose for a bit more information.
-                */
+                * component. See IK pose for a bit more information. */
                /* TODO: the bigggest point here is that we need the curve PATH and not
                 * just the general geometry. */
                /* TODO: the bigggest point here is that we need the curve PATH and not
                 * just the general geometry. */
-               ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_GEOMETRY);
-               ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
+               ComponentKey target_key(&data->tar->id, NodeType::GEOMETRY);
+               ComponentKey pose_key(&object->id, NodeType::EVAL_POSE);
                add_relation(target_key, pose_key, "Curve.Path -> Spline IK");
        }
        pchan->flag |= POSE_DONE;
        OperationKey final_transforms_key(
                add_relation(target_key, pose_key, "Curve.Path -> Spline IK");
        }
        pchan->flag |= POSE_DONE;
        OperationKey final_transforms_key(
-               &object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_DONE);
+               &object->id, NodeType::BONE, pchan->name, OperationCode::BONE_DONE);
        add_relation(solver_key, final_transforms_key, "Spline IK Result");
        root_map->add_bone(pchan->name, rootchan->name);
        /* Walk to the chain's root/ */
        add_relation(solver_key, final_transforms_key, "Spline IK Result");
        root_map->add_bone(pchan->name, rootchan->name);
        /* Walk to the chain's root/ */
@@ -297,21 +293,21 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object,
                 * the result with IK solver results. */
                if (parchan != pchan) {
                        OperationKey parent_key(&object->id,
                 * the result with IK solver results. */
                if (parchan != pchan) {
                        OperationKey parent_key(&object->id,
-                                               DEG_NODE_TYPE_BONE,
+                                               NodeType::BONE,
                                                parchan->name,
                                                parchan->name,
-                                               DEG_OPCODE_BONE_READY);
+                                               OperationCode::BONE_READY);
                        add_relation(parent_key, solver_key, "Spline IK Solver Update");
                        OperationKey bone_done_key(&object->id,
                        add_relation(parent_key, solver_key, "Spline IK Solver Update");
                        OperationKey bone_done_key(&object->id,
-                                                  DEG_NODE_TYPE_BONE,
+                                                  NodeType::BONE,
                                                   parchan->name,
                                                   parchan->name,
-                                                  DEG_OPCODE_BONE_DONE);
+                                                  OperationCode::BONE_DONE);
                        add_relation(solver_key, bone_done_key, "IK Chain Result");
                }
                parchan->flag |= POSE_DONE;
                OperationKey final_transforms_key(&object->id,
                        add_relation(solver_key, bone_done_key, "IK Chain Result");
                }
                parchan->flag |= POSE_DONE;
                OperationKey final_transforms_key(&object->id,
-                                                 DEG_NODE_TYPE_BONE,
+                                                 NodeType::BONE,
                                                  parchan->name,
                                                  parchan->name,
-                                                 DEG_OPCODE_BONE_DONE);
+                                                 OperationCode::BONE_DONE);
                add_relation(
                        solver_key, final_transforms_key, "Spline IK Solver Result");
                root_map->add_bone(parchan->name, rootchan->name);
                add_relation(
                        solver_key, final_transforms_key, "Spline IK Solver Result");
                root_map->add_bone(parchan->name, rootchan->name);
@@ -323,7 +319,7 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object,
                }
        }
        OperationKey pose_done_key(
                }
        }
        OperationKey pose_done_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_DONE);
        add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link");
 }
 
        add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link");
 }
 
@@ -334,15 +330,15 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
        bArmature *armature = (bArmature *)object->data;
        // TODO: selection status?
        /* Attach links between pose operations. */
        bArmature *armature = (bArmature *)object->data;
        // TODO: selection status?
        /* Attach links between pose operations. */
-       ComponentKey local_transform(&object->id, DEG_NODE_TYPE_TRANSFORM);
+       ComponentKey local_transform(&object->id, NodeType::TRANSFORM);
        OperationKey pose_init_key(
        OperationKey pose_init_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_INIT);
        OperationKey pose_init_ik_key(
        OperationKey pose_init_ik_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_INIT_IK);
        OperationKey pose_cleanup_key(
        OperationKey pose_cleanup_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_CLEANUP);
        OperationKey pose_done_key(
        OperationKey pose_done_key(
-               &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
+               &object->id, NodeType::EVAL_POSE, OperationCode::POSE_DONE);
        add_relation(
                local_transform, pose_init_key, "Local Transform -> Pose Init");
        add_relation(pose_init_key, pose_init_ik_key, "Pose Init -> Pose Init IK");
        add_relation(
                local_transform, pose_init_key, "Local Transform -> Pose Init");
        add_relation(pose_init_key, pose_init_ik_key, "Pose Init -> Pose Init IK");
@@ -351,8 +347,8 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
        /* Make sure pose is up-to-date with armature updates. */
        build_armature(armature);
        OperationKey armature_key(&armature->id,
        /* Make sure pose is up-to-date with armature updates. */
        build_armature(armature);
        OperationKey armature_key(&armature->id,
-                                 DEG_NODE_TYPE_PARAMETERS,
-                                 DEG_OPCODE_PLACEHOLDER,
+                                 NodeType::PARAMETERS,
+                                 OperationCode::PLACEHOLDER,
                                  "Armature Eval");
        add_relation(armature_key, pose_init_key, "Data dependency");
        /* IK Solvers.
                                  "Armature Eval");
        add_relation(armature_key, pose_init_key, "Data dependency");
        /* IK Solvers.
@@ -401,50 +397,50 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
        if (pose_depends_on_local_transform) {
                /* TODO(sergey): Once partial updates are possible use relation between
                 * object transform and solver itself in it's build function. */
        if (pose_depends_on_local_transform) {
                /* TODO(sergey): Once partial updates are possible use relation between
                 * object transform and solver itself in it's build function. */
-               ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
-               ComponentKey local_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM);
+               ComponentKey pose_key(&object->id, NodeType::EVAL_POSE);
+               ComponentKey local_transform_key(&object->id, NodeType::TRANSFORM);
                add_relation(local_transform_key, pose_key, "Local Transforms");
        }
        /* Links between operations for each bone. */
        LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
                OperationKey bone_local_key(&object->id,
                add_relation(local_transform_key, pose_key, "Local Transforms");
        }
        /* Links between operations for each bone. */
        LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
                OperationKey bone_local_key(&object->id,
-                                           DEG_NODE_TYPE_BONE,
+                                           NodeType::BONE,
                                            pchan->name,
                                            pchan->name,
-                                           DEG_OPCODE_BONE_LOCAL);
+                                           OperationCode::BONE_LOCAL);
                OperationKey bone_pose_key(&object->id,
                OperationKey bone_pose_key(&object->id,
-                                          DEG_NODE_TYPE_BONE,
+                                          NodeType::BONE,
                                           pchan->name,
                                           pchan->name,
-                                          DEG_OPCODE_BONE_POSE_PARENT);
+                                          OperationCode::BONE_POSE_PARENT);
                OperationKey bone_ready_key(&object->id,
                OperationKey bone_ready_key(&object->id,
-                                           DEG_NODE_TYPE_BONE,
+                                           NodeType::BONE,
                                            pchan->name,
                                            pchan->name,
-                                           DEG_OPCODE_BONE_READY);
+                                           OperationCode::BONE_READY);
                OperationKey bone_done_key(&object->id,
                OperationKey bone_done_key(&object->id,
-                                          DEG_NODE_TYPE_BONE,
+                                          NodeType::BONE,
                                           pchan->name,
                                           pchan->name,
-                                          DEG_OPCODE_BONE_DONE);
+                                          OperationCode::BONE_DONE);
                pchan->flag &= ~POSE_DONE;
                /* Pose init to bone local. */
                add_relation(pose_init_key,
                             bone_local_key,
                             "Pose Init - Bone Local",
                pchan->flag &= ~POSE_DONE;
                /* Pose init to bone local. */
                add_relation(pose_init_key,
                             bone_local_key,
                             "Pose Init - Bone Local",
-                            DEPSREL_FLAG_GODMODE);
+                            RELATION_FLAG_GODMODE);
                /* Local to pose parenting operation. */
                add_relation(bone_local_key, bone_pose_key, "Bone Local - Bone Pose");
                /* Parent relation. */
                if (pchan->parent != NULL) {
                /* Local to pose parenting operation. */
                add_relation(bone_local_key, bone_pose_key, "Bone Local - Bone Pose");
                /* Parent relation. */
                if (pchan->parent != NULL) {
-                       eDepsOperation_Code parent_key_opcode;
+                       OperationCode parent_key_opcode;
                        /* NOTE: this difference in handling allows us to prevent lockups
                         * while ensuring correct poses for separate chains. */
                        if (root_map.has_common_root(pchan->name, pchan->parent->name)) {
                        /* NOTE: this difference in handling allows us to prevent lockups
                         * while ensuring correct poses for separate chains. */
                        if (root_map.has_common_root(pchan->name, pchan->parent->name)) {
-                               parent_key_opcode = DEG_OPCODE_BONE_READY;
+                               parent_key_opcode = OperationCode::BONE_READY;
                        }
                        else {
                        }
                        else {
-                               parent_key_opcode = DEG_OPCODE_BONE_DONE;
+                               parent_key_opcode = OperationCode::BONE_DONE;
                        }
 
                        OperationKey parent_key(&object->id,
                        }
 
                        OperationKey parent_key(&object->id,
-                                               DEG_NODE_TYPE_BONE,
+                                               NodeType::BONE,
                                                pchan->parent->name,
                                                parent_key_opcode);
                        add_relation(
                                                pchan->parent->name,
                                                parent_key_opcode);
                        add_relation(
@@ -459,15 +455,15 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
                                &pchan->constraints, constraint_walk, &data);
                        /* Constraints stack and constraint dependencies. */
                        build_constraints(&object->id,
                                &pchan->constraints, constraint_walk, &data);
                        /* Constraints stack and constraint dependencies. */
                        build_constraints(&object->id,
-                                         DEG_NODE_TYPE_BONE,
+                                         NodeType::BONE,
                                          pchan->name,
                                          &pchan->constraints,
                                          &root_map);
                        /* Pose -> constraints. */
                        OperationKey constraints_key(&object->id,
                                          pchan->name,
                                          &pchan->constraints,
                                          &root_map);
                        /* Pose -> constraints. */
                        OperationKey constraints_key(&object->id,
-                                                    DEG_NODE_TYPE_BONE,
+                                                    NodeType::BONE,
                                                     pchan->name,
                                                     pchan->name,
-                                                    DEG_OPCODE_BONE_CONSTRAINTS);
+                                                    OperationCode::BONE_CONSTRAINTS);
                        add_relation(bone_pose_key, constraints_key, "Constraints Stack");
                        /* Constraints -> ready/ */
                        /* TODO(sergey): When constraint stack is exploded, this step should
                        add_relation(bone_pose_key, constraints_key, "Constraints Stack");
                        /* Constraints -> ready/ */
                        /* TODO(sergey): When constraint stack is exploded, this step should
@@ -487,9 +483,9 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
                /* B-Bone shape is the real final step after Done if present. */
                if (pchan->bone != NULL && pchan->bone->segments > 1) {
                        OperationKey bone_segments_key(&object->id,
                /* B-Bone shape is the real final step after Done if present. */
                if (pchan->bone != NULL && pchan->bone->segments > 1) {
                        OperationKey bone_segments_key(&object->id,
-                                                      DEG_NODE_TYPE_BONE,
+                                                      NodeType::BONE,
                                                       pchan->name,
                                                       pchan->name,
-                                                      DEG_OPCODE_BONE_SEGMENTS);
+                                                      OperationCode::BONE_SEGMENTS);
                        /* B-Bone shape depends on the final position of the bone. */
                        add_relation(bone_done_key,
                                     bone_segments_key,
                        /* B-Bone shape depends on the final position of the bone. */
                        add_relation(bone_done_key,
                                     bone_segments_key,
@@ -499,18 +495,18 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
                        BKE_pchan_bbone_handles_get(pchan, &prev, &next);
                        if (prev) {
                                OperationKey prev_key(&object->id,
                        BKE_pchan_bbone_handles_get(pchan, &prev, &next);
                        if (prev) {
                                OperationKey prev_key(&object->id,
-                                                     DEG_NODE_TYPE_BONE,
+                                                     NodeType::BONE,
                                                      prev->name,
                                                      prev->name,
-                                                     DEG_OPCODE_BONE_DONE);
+                                                     OperationCode::BONE_DONE);
                                add_relation(prev_key,
                                             bone_segments_key,
                                             "Prev Handle -> B-Bone Segments");
                        }
                        if (next) {
                                OperationKey next_key(&object->id,
                                add_relation(prev_key,
                                             bone_segments_key,
                                             "Prev Handle -> B-Bone Segments");
                        }
                        if (next) {
                                OperationKey next_key(&object->id,
-                                                     DEG_NODE_TYPE_BONE,
+                                                     NodeType::BONE,
                                                      next->name,
                                                      next->name,
-                                                     DEG_OPCODE_BONE_DONE);
+                                                     OperationCode::BONE_DONE);
                                add_relation(next_key,
                                             bone_segments_key,
                                             "Next Handle -> B-Bone Segments");
                                add_relation(next_key,
                                             bone_segments_key,
                                             "Next Handle -> B-Bone Segments");
@@ -519,7 +515,7 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
                        add_relation(bone_segments_key,
                                     pose_done_key,
                                     "PoseEval Result-Bone Link",
                        add_relation(bone_segments_key,
                                     pose_done_key,
                                     "PoseEval Result-Bone Link",
-                                    DEPSREL_FLAG_GODMODE);
+                                    RELATION_FLAG_GODMODE);
                        add_relation(bone_segments_key,
                                     pose_cleanup_key,
                                     "Cleanup dependency");
                        add_relation(bone_segments_key,
                                     pose_cleanup_key,
                                     "Cleanup dependency");
@@ -547,30 +543,30 @@ void DepsgraphRelationBuilder::build_proxy_rig(Object *object)
        Object *proxy_from = object->proxy_from;
        build_armature(armature);
        OperationKey pose_init_key(&object->id,
        Object *proxy_from = object->proxy_from;
        build_armature(armature);
        OperationKey pose_init_key(&object->id,
-                                  DEG_NODE_TYPE_EVAL_POSE,
-                                  DEG_OPCODE_POSE_INIT);
+                                  NodeType::EVAL_POSE,
+                                  OperationCode::POSE_INIT);
        OperationKey pose_done_key(&object->id,
        OperationKey pose_done_key(&object->id,
-                                  DEG_NODE_TYPE_EVAL_POSE,
-                                  DEG_OPCODE_POSE_DONE);
+                                  NodeType::EVAL_POSE,
+                                  OperationCode::POSE_DONE);
        OperationKey pose_cleanup_key(&object->id,
        OperationKey pose_cleanup_key(&object->id,
-                                     DEG_NODE_TYPE_EVAL_POSE,
-                                     DEG_OPCODE_POSE_CLEANUP);
+                                     NodeType::EVAL_POSE,
+                                     OperationCode::POSE_CLEANUP);
        LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
                OperationKey bone_local_key(&object->id,
        LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
                OperationKey bone_local_key(&object->id,
-                                           DEG_NODE_TYPE_BONE, pchan->name,
-                                           DEG_OPCODE_BONE_LOCAL);
+                                           NodeType::BONE, pchan->name,
+                                           OperationCode::BONE_LOCAL);
                OperationKey bone_ready_key(&object->id,
                OperationKey bone_ready_key(&object->id,
-                                           DEG_NODE_TYPE_BONE,
+                                           NodeType::BONE,
                                            pchan->name,
                                            pchan->name,
-                                           DEG_OPCODE_BONE_READY);
+                                           OperationCode::BONE_READY);
                OperationKey bone_done_key(&object->id,
                OperationKey bone_done_key(&object->id,
-                                          DEG_NODE_TYPE_BONE,
+                                          NodeType::BONE,
                                           pchan->name,
                                           pchan->name,
-                                          DEG_OPCODE_BONE_DONE);
+                                          OperationCode::BONE_DONE);
                OperationKey from_bone_done_key(&proxy_from->id,
                OperationKey from_bone_done_key(&proxy_from->id,
-                                               DEG_NODE_TYPE_BONE,
+                                               NodeType::BONE,
                                                pchan->name,
                                                pchan->name,
-                                               DEG_OPCODE_BONE_DONE);
+                                               OperationCode::BONE_DONE);
                add_relation(pose_init_key, bone_local_key, "Pose Init -> Bone Local");
                add_relation(bone_local_key, bone_ready_key, "Local -> Ready");
                add_relation(bone_ready_key, bone_done_key, "Ready -> Done");
                add_relation(pose_init_key, bone_local_key, "Pose Init -> Bone Local");
                add_relation(bone_local_key, bone_ready_key, "Local -> Ready");
                add_relation(bone_ready_key, bone_done_key, "Ready -> Done");
@@ -579,18 +575,17 @@ void DepsgraphRelationBuilder::build_proxy_rig(Object *object)
                add_relation(bone_done_key,
                            pose_done_key,
                            "Bone Done -> Pose Done",
                add_relation(bone_done_key,
                            pose_done_key,
                            "Bone Done -> Pose Done",
-                           DEPSREL_FLAG_GODMODE);
-
+                           RELATION_FLAG_GODMODE);
                /* Make sure bone in the proxy is not done before it's FROM is done. */
                if (pchan->bone && pchan->bone->segments > 1) {
                        OperationKey from_bone_segments_key(&proxy_from->id,
                /* Make sure bone in the proxy is not done before it's FROM is done. */
                if (pchan->bone && pchan->bone->segments > 1) {
                        OperationKey from_bone_segments_key(&proxy_from->id,
-                                                           DEG_NODE_TYPE_BONE,
+                                                           NodeType::BONE,
                                                            pchan->name,
                                                            pchan->name,
-                                                           DEG_OPCODE_BONE_SEGMENTS);
+                                                           OperationCode::BONE_SEGMENTS);
                        add_relation(from_bone_segments_key,
                                     bone_done_key,
                                     "Bone Segments -> Bone Done",
                        add_relation(from_bone_segments_key,
                                     bone_done_key,
                                     "Bone Segments -> Bone Done",
-                                    DEPSREL_FLAG_GODMODE);
+                                    RELATION_FLAG_GODMODE);
                }
                else {
                        add_relation(from_bone_done_key,
                }
                else {
                        add_relation(from_bone_done_key,
@@ -600,12 +595,12 @@ void DepsgraphRelationBuilder::build_proxy_rig(Object *object)
 
                if (pchan->prop != NULL) {
                        OperationKey bone_parameters(&object->id,
 
                if (pchan->prop != NULL) {
                        OperationKey bone_parameters(&object->id,
-                                                    DEG_NODE_TYPE_PARAMETERS,
-                                                    DEG_OPCODE_PARAMETERS_EVAL,
+                                                    NodeType::PARAMETERS,
+                                                    OperationCode::PARAMETERS_EVAL,
                                                     pchan->name);
                        OperationKey from_bone_parameters(&proxy_from->id,
                                                     pchan->name);
                        OperationKey from_bone_parameters(&proxy_from->id,
-                                                         DEG_NODE_TYPE_PARAMETERS,
-                                                         DEG_OPCODE_PARAMETERS_EVAL,
+                                                         NodeType::PARAMETERS,
+                                                         OperationCode::PARAMETERS_EVAL,
                                                          pchan->name);
                        add_relation(from_bone_parameters,
                                     bone_parameters,
                                                          pchan->name);
                        add_relation(from_bone_parameters,
                                     bone_parameters,