Merge branch 'master' into blender2.8
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 4 Apr 2018 08:36:39 +0000 (10:36 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 4 Apr 2018 08:36:39 +0000 (10:36 +0200)
source/blender/blenkernel/intern/armature_update.c

index 54f1a353486a3a6a8505a327817e039ef728ce66..5b51cd9502f498cd36d3bc04f51d038c36d33ff5 100644 (file)
@@ -558,6 +558,15 @@ void BKE_splineik_execute_tree(
 
 /* *************** Depsgraph evaluation callbacks ************ */
 
+BLI_INLINE bPoseChannel *pose_pchan_get_indexed(Object *ob, int pchan_index)
+{
+       bPose *pose = ob->pose;
+       BLI_assert(pose != NULL);
+       BLI_assert(pchan_index >= 0);
+       BLI_assert(pchan_index < MEM_allocN_len(pose->chan_array) / sizeof(bPoseChannel *));
+       return pose->chan_array[pchan_index];
+}
+
 void BKE_pose_eval_init(const struct EvaluationContext *UNUSED(eval_ctx),
                         Scene *UNUSED(scene),
                         Object *ob)
@@ -613,8 +622,7 @@ void BKE_pose_eval_bone(const struct EvaluationContext *eval_ctx,
                         Object *ob,
                         int pchan_index)
 {
-       BLI_assert(ob->pose != NULL);
-       bPoseChannel *pchan = ob->pose->chan_array[pchan_index];
+       bPoseChannel *pchan = pose_pchan_get_indexed(ob, pchan_index);
        DEG_debug_print_eval_subdata(
                __func__, ob->id.name, ob, "pchan", pchan->name, pchan);
        BLI_assert(ob->type == OB_ARMATURE);
@@ -651,8 +659,7 @@ void BKE_pose_constraints_evaluate(const struct EvaluationContext *eval_ctx,
                                    Object *ob,
                                    int pchan_index)
 {
-       BLI_assert(ob->pose != NULL);
-       bPoseChannel *pchan = ob->pose->chan_array[pchan_index];
+       bPoseChannel *pchan = pose_pchan_get_indexed(ob, pchan_index);
        DEG_debug_print_eval_subdata(
                __func__, ob->id.name, ob, "pchan", pchan->name, pchan);
        bArmature *arm = (bArmature *)ob->data;
@@ -674,8 +681,7 @@ void BKE_pose_bone_done(const struct EvaluationContext *UNUSED(eval_ctx),
                         struct Object *ob,
                         int pchan_index)
 {
-       BLI_assert(ob->pose != NULL);
-       bPoseChannel *pchan = ob->pose->chan_array[pchan_index];
+       bPoseChannel *pchan = pose_pchan_get_indexed(ob, pchan_index);
        float imat[4][4];
        DEG_debug_print_eval(__func__, pchan->name, pchan);
        if (pchan->bone) {
@@ -689,8 +695,7 @@ void BKE_pose_iktree_evaluate(const struct EvaluationContext *eval_ctx,
                               Object *ob,
                               int rootchan_index)
 {
-       BLI_assert(ob->pose != NULL);
-       bPoseChannel *rootchan = ob->pose->chan_array[rootchan_index];
+       bPoseChannel *rootchan = pose_pchan_get_indexed(ob, rootchan_index);
        DEG_debug_print_eval_subdata(
                __func__, ob->id.name, ob, "rootchan", rootchan->name, rootchan);
        BLI_assert(ob->type == OB_ARMATURE);
@@ -708,8 +713,7 @@ void BKE_pose_splineik_evaluate(const struct EvaluationContext *eval_ctx,
                                 int rootchan_index)
 
 {
-       BLI_assert(ob->pose != NULL);
-       bPoseChannel *rootchan = ob->pose->chan_array[rootchan_index];
+       bPoseChannel *rootchan = pose_pchan_get_indexed(ob, rootchan_index);
        DEG_debug_print_eval_subdata(
                __func__, ob->id.name, ob, "rootchan", rootchan->name, rootchan);
        BLI_assert(ob->type == OB_ARMATURE);