Woo hoo! Thanks Aligorith! :-D --Nathan V
On Fri, Apr 23, 2010 at 7:14 AM, Joshua Leung <[email protected]> wrote: > Revision: 28368 > > http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28368 > Author: aligorith > Date: 2010-04-23 07:14:00 +0200 (Fri, 23 Apr 2010) > > Log Message: > ----------- > Spline IK - Influence Control > > Made the 'Influence' slider work for Spline IK too, and made that setting > visible now that it works. > > Note that there is still some popping that can occur when going to/from > influence = 0.0. I'm not sure exactly what's causing this yet, but hopefully > it won't be too noticeable in practice. > > Modified Paths: > -------------- > trunk/blender/release/scripts/ui/properties_object_constraint.py > trunk/blender/source/blender/blenkernel/intern/armature.c > > Modified: trunk/blender/release/scripts/ui/properties_object_constraint.py > =================================================================== > --- trunk/blender/release/scripts/ui/properties_object_constraint.py > 2010-04-23 04:16:08 UTC (rev 28367) > +++ trunk/blender/release/scripts/ui/properties_object_constraint.py > 2010-04-23 05:14:00 UTC (rev 28368) > @@ -37,7 +37,7 @@ > # match enum type to our functions, avoids a lookup table. > getattr(self, con.type)(context, box, con, wide_ui) > > - if con.type not in ('RIGID_BODY_JOINT', 'SPLINE_IK', 'NULL'): > + if con.type not in ('RIGID_BODY_JOINT', 'NULL'): > box.prop(con, "influence") > > def space_template(self, layout, con, wide_ui, target=True, owner=True): > > Modified: trunk/blender/source/blender/blenkernel/intern/armature.c > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/armature.c 2010-04-23 > 04:16:08 UTC (rev 28367) > +++ trunk/blender/source/blender/blenkernel/intern/armature.c 2010-04-23 > 05:14:00 UTC (rev 28368) > @@ -2006,6 +2006,11 @@ > rangle= dot_v3v3(rmat[1], splineVec); > rangle= acos( MAX2(-1.0f, MIN2(1.0f, rangle)) ); > > + /* multiply the magnitude of the angle by the influence of > the constraint to > + * control the influence of the SplineIK effect > + */ > + rangle *= tree->con->enforce; > + > /* construct rotation matrix from the axis-angle rotation > found above > * - this call takes care to make sure that the axis > provided is a unit vector first > */ > @@ -2073,13 +2078,26 @@ > } > } > > - /* step 5: set the location of the bone in the matrix > - * - when the 'no-root' option is affected, the chain can retain > - * the shape but be moved elsewhere > - */ > + /* step 5: set the location of the bone in the matrix */ > if (ikData->flag & CONSTRAINT_SPLINEIK_NO_ROOT) { > + /* when the 'no-root' option is affected, the chain can retain > + * the shape but be moved elsewhere > + */ > VECCOPY(poseHead, pchan->pose_head); > } > + else if (tree->con->enforce < 1.0f) { > + /* when the influence is too low > + * - blend the positions for the 'root' bone > + * - stick to the parent for any other > + */ > + if (pchan->parent) { > + VECCOPY(poseHead, pchan->pose_head); > + } > + else { > + // FIXME: this introduces popping artifacts when we > reach 0.0 > + interp_v3_v3v3(poseHead, pchan->pose_head, poseHead, > tree->con->enforce); > + } > + } > VECCOPY(poseMat[3], poseHead); > > /* finally, store the new transform */ > > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
