[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