Fix T42367: Spline-ik offset evaluating curve
authorCampbell Barton <ideasman42@gmail.com>
Thu, 23 Oct 2014 14:29:40 +0000 (16:29 +0200)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 23 Oct 2014 14:33:28 +0000 (16:33 +0200)
source/blender/blenkernel/intern/anim.c
source/blender/blenkernel/intern/armature.c

index aff99d3e1bfeed80cffa0996ff7e6415ebad89bd..b878dbe1f39b2bab6e1a846e5feeff377848935b 100644 (file)
@@ -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);
index a6681360251888ec2dfbeb975824a0ad394f1971..875815d755086f2466ab8b2b3ba9ed015db011d6 100644 (file)
@@ -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;
        }