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