From d547d5b854af84dcab4ff2311d646f2eaf47a895 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 30 Jan 2019 18:15:47 -0800 Subject: [PATCH] changed the json reader to take an array not a string for the flex targets --- .../avatar-animation_withSplineIKNode.json | 4 ++-- libraries/animation/src/AnimNodeLoader.cpp | 24 +++++++++++++++++-- libraries/animation/src/AnimSplineIK.cpp | 21 ++++++++-------- libraries/animation/src/AnimSplineIK.h | 4 ++-- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/interface/resources/avatar/avatar-animation_withSplineIKNode.json b/interface/resources/avatar/avatar-animation_withSplineIKNode.json index a6283f0771..fa67b6b24b 100644 --- a/interface/resources/avatar/avatar-animation_withSplineIKNode.json +++ b/interface/resources/avatar/avatar-animation_withSplineIKNode.json @@ -192,8 +192,8 @@ "tipRotationVar": "headRotation", "alphaVar": "splineIKAlpha", "enabledVar": "splineIKEnabled", - "tipTargetFlexCoefficients": "1.0, 1.0, 1.0, 1.0, 1.0", - "midTargetFlexCoefficients": "1.0, 1.0, 1.0" + "tipTargetFlexCoefficients": [ 1.0, 1.0, 1.0, 1.0, 1.0 ], + "midTargetFlexCoefficients": [ 1.0, 1.0, 1.0 ] }, "children": [ { diff --git a/libraries/animation/src/AnimNodeLoader.cpp b/libraries/animation/src/AnimNodeLoader.cpp index 62e848872b..b637d131f8 100644 --- a/libraries/animation/src/AnimNodeLoader.cpp +++ b/libraries/animation/src/AnimNodeLoader.cpp @@ -594,8 +594,28 @@ static AnimNode::Pointer loadSplineIKNode(const QJsonObject& jsonObj, const QStr READ_STRING(tipRotationVar, jsonObj, id, jsonUrl, nullptr); READ_STRING(alphaVar, jsonObj, id, jsonUrl, nullptr); READ_STRING(enabledVar, jsonObj, id, jsonUrl, nullptr); - READ_STRING(tipTargetFlexCoefficients, jsonObj, id, jsonUrl, nullptr); - READ_STRING(midTargetFlexCoefficients, jsonObj, id, jsonUrl, nullptr); + + auto tipFlexCoefficientsValue = jsonObj.value("tipTargetFlexCoefficients"); + if (!tipFlexCoefficientsValue.isArray()) { + qCCritical(animation) << "AnimNodeLoader, bad or missing tip flex array"; + return nullptr; + } + auto tipFlexCoefficientsArray = tipFlexCoefficientsValue.toArray(); + std::vector tipTargetFlexCoefficients; + for (const auto& value : tipFlexCoefficientsArray) { + tipTargetFlexCoefficients.push_back((float)value.toDouble()); + } + + auto midFlexCoefficientsValue = jsonObj.value("midTargetFlexCoefficients"); + if (!midFlexCoefficientsValue.isArray()) { + qCCritical(animation) << "AnimNodeLoader, bad or missing mid flex array"; + return nullptr; + } + auto midFlexCoefficientsArray = midFlexCoefficientsValue.toArray(); + std::vector midTargetFlexCoefficients; + for (const auto& midValue : midFlexCoefficientsArray) { + midTargetFlexCoefficients.push_back((float)midValue.toDouble()); + } auto node = std::make_shared(id, alpha, enabled, interpDuration, baseJointName, midJointName, tipJointName, diff --git a/libraries/animation/src/AnimSplineIK.cpp b/libraries/animation/src/AnimSplineIK.cpp index e204a8f2d6..8b44ef4478 100644 --- a/libraries/animation/src/AnimSplineIK.cpp +++ b/libraries/animation/src/AnimSplineIK.cpp @@ -29,8 +29,8 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i const QString& tipRotationVar, const QString& alphaVar, const QString& enabledVar, - const QString& tipTargetFlexCoefficients, - const QString& midTargetFlexCoefficients) : + const std::vector tipTargetFlexCoefficients, + const std::vector midTargetFlexCoefficients) : AnimNode(AnimNode::Type::SplineIK, id), _alpha(alpha), _enabled(enabled), @@ -48,21 +48,20 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i _enabledVar(enabledVar) { - QStringList tipTargetFlexCoefficientsValues = tipTargetFlexCoefficients.split(',', QString::SkipEmptyParts); - for (int i = 0; i < tipTargetFlexCoefficientsValues.size(); i++) { + for (int i = 0; i < tipTargetFlexCoefficients.size(); i++) { if (i < MAX_NUMBER_FLEX_VARIABLES) { - _tipTargetFlexCoefficients[i] = (float)tipTargetFlexCoefficientsValues[i].toDouble(); + _tipTargetFlexCoefficients[i] = tipTargetFlexCoefficients[i]; } - } - _numTipTargetFlexCoefficients = std::min(tipTargetFlexCoefficientsValues.size(), MAX_NUMBER_FLEX_VARIABLES); + + } + _numTipTargetFlexCoefficients = std::min((int)tipTargetFlexCoefficients.size(), MAX_NUMBER_FLEX_VARIABLES); - QStringList midTargetFlexCoefficientsValues = midTargetFlexCoefficients.split(',', QString::SkipEmptyParts); - for (int i = 0; i < midTargetFlexCoefficientsValues.size(); i++) { + for (int i = 0; i < midTargetFlexCoefficients.size(); i++) { if (i < MAX_NUMBER_FLEX_VARIABLES) { - _midTargetFlexCoefficients[i] = (float)midTargetFlexCoefficientsValues[i].toDouble(); + _midTargetFlexCoefficients[i] = midTargetFlexCoefficients[i]; } } - _numMidTargetFlexCoefficients = std::min(midTargetFlexCoefficientsValues.size(), MAX_NUMBER_FLEX_VARIABLES); + _numMidTargetFlexCoefficients = std::min((int)midTargetFlexCoefficients.size(), MAX_NUMBER_FLEX_VARIABLES); } diff --git a/libraries/animation/src/AnimSplineIK.h b/libraries/animation/src/AnimSplineIK.h index ee3f29d6df..6a07ec5565 100644 --- a/libraries/animation/src/AnimSplineIK.h +++ b/libraries/animation/src/AnimSplineIK.h @@ -24,8 +24,8 @@ public: const QString& midPositionVar, const QString& midRotationVar, const QString& tipPositionVar, const QString& tipRotationVar, const QString& alphaVar, const QString& enabledVar, - const QString& tipTargetFlexCoefficients, - const QString& midTargetFlexCoefficients); + const std::vector tipTargetFlexCoefficients, + const std::vector midTargetFlexCoefficients); virtual ~AnimSplineIK() override; virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;