diff options
-rw-r--r-- | source/blender/blenkernel/intern/anim.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/armature.c | 3 |
2 files changed, 6 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index aff99d3e1bf..b878dbe1f39 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -627,6 +627,9 @@ int where_on_path(Object *ob, float ctime, float vec[4], float dir[3], float qua if (!bl->nr) return 0; if (bl->poly > -1) cycl = 1; + /* values below zero for non-cyclic curves give strange results */ + BLI_assert(cycl || ctime >= 0.0f); + ctime *= (path->len - 1); s1 = (int)floor(ctime); diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index a6681360251..875815d7550 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -1940,6 +1940,9 @@ static void splineik_init_tree_from_pchan(Scene *scene, Object *UNUSED(ob), bPos } } + /* disallow negative values (happens with float precision) */ + CLAMP_MIN(ikData->points[segcount], 0.0f); + /* spline has now been bound */ ikData->flag |= CONSTRAINT_SPLINEIK_BOUND; } |