Revision: 28413
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28413
Author:   campbellbarton
Date:     2010-04-25 15:27:52 +0200 (Sun, 25 Apr 2010)

Log Message:
-----------
bugfix [#22117] Memory Error messages with Spline IK
chainlen was initialized as 0

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c   2010-04-25 
12:53:39 UTC (rev 28412)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c   2010-04-25 
13:27:52 UTC (rev 28413)
@@ -1773,20 +1773,13 @@
        /* find the root bone and the chain of bones from the root to the tip 
         * NOTE: this assumes that the bones are connected, but that may not be 
true...
         */
-       for (pchan= pchan_tip; pchan; pchan= pchan->parent) {
+       for (pchan= pchan_tip; pchan && (segcount < ikData->chainlen); pchan= 
pchan->parent, segcount++) {
                /* store this segment in the chain */
                pchanChain[segcount]= pchan;
                
                /* if performing rebinding, calculate the length of the bone */
                boneLengths[segcount]= pchan->bone->length;
                totLength += boneLengths[segcount];
-               
-               /* check if we've gotten the number of bones required yet 
(after incrementing the count first)
-                * NOTE: the 255 limit here is rather ugly, but the standard IK 
does this too!
-                */
-               segcount++;
-               if ((segcount == ikData->chainlen) || (segcount > 255))
-                       break;
        }
        
        if (segcount == 0)

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c 2010-04-25 
12:53:39 UTC (rev 28412)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c 2010-04-25 
13:27:52 UTC (rev 28413)
@@ -3750,8 +3750,19 @@
        
        /* copy the binding array */
        dst->points= MEM_dupallocN(src->points);
+       dst->numpoints= src->numpoints;
+       dst->chainlen= src->chainlen;
+       dst->flag= src->flag;
+       dst->xzScaleMode= src->xzScaleMode;
 }
 
+static void splineik_new_data (void *cdata)
+{
+       bSplineIKConstraint *data= (bSplineIKConstraint *)cdata;
+
+       data->chainlen= 1;
+}
+
 static void splineik_id_looper (bConstraint *con, ConstraintIDFunc func, void 
*userdata)
 {
        bSplineIKConstraint *data= con->data;
@@ -3816,7 +3827,7 @@
        NULL, /* relink data */
        splineik_id_looper, /* id looper */
        splineik_copy, /* copy data */
-       NULL, /* new data */
+       splineik_new_data, /* new data */
        splineik_get_tars, /* get constraint targets */
        splineik_flush_tars, /* flush constraint targets */
        splineik_get_tarmat, /* get target matrix */


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to