[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28413] trunk/blender/source/blender/ blenkernel/intern: bugfix [#22117] Memory Error messages with Spline IK
Campbell Barton
ideasman42 at gmail.com
Sun Apr 25 15:27:52 CEST 2010
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 */
More information about the Bf-blender-cvs
mailing list