From ad9275ed4e60b7ca4874bbb2c80fef6e2606eb39 Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Mon, 15 Apr 2019 20:25:41 +0300 Subject: Spline IK: support changing individual bone length via Y scaling. Previously Spline IK provided only two choices: either scale the length of the bone chain to fit the length of the curve, or don't scale the bone in the Y dimension at all (ignoring effects of actually fitting to the curve due to curvature and curve object scale). This patch adds a new option to use the pre-IK Y scale of the bones to adjust their length when fitted to the curve, allowing individual posing control over the length of the segments. Reviewers: brecht Differential Revision: https://developer.blender.org/D4687 --- source/blender/blenloader/intern/versioning_280.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'source/blender/blenloader') diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 41b1627e873..528bfd2360f 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -3140,6 +3140,23 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } { + if (!DNA_struct_elem_find(fd->filesdna, "bSplineIKConstraint", "short", "yScaleMode")) { + for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) { + if (ob->pose) { + for (bPoseChannel *pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + for (bConstraint *con = pchan->constraints.first; con; con = con->next) { + if (con->type == CONSTRAINT_TYPE_SPLINEIK) { + bSplineIKConstraint *data = (bSplineIKConstraint *)con->data; + if ((data->flag & CONSTRAINT_SPLINEIK_SCALE_LIMITED) == 0) { + data->yScaleMode = CONSTRAINT_SPLINEIK_YS_FIT_CURVE; + } + } + } + } + } + } + } + /* Versioning code until next subversion bump goes here. */ } } -- cgit v1.2.3