changed the json reader to take an array not a string for the flex targets

This commit is contained in:
amantley 2019-01-30 18:15:47 -08:00
parent d174fb1b5c
commit d547d5b854
4 changed files with 36 additions and 17 deletions

View file

@ -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": [
{

View file

@ -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<float> 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<float> midTargetFlexCoefficients;
for (const auto& midValue : midFlexCoefficientsArray) {
midTargetFlexCoefficients.push_back((float)midValue.toDouble());
}
auto node = std::make_shared<AnimSplineIK>(id, alpha, enabled, interpDuration,
baseJointName, midJointName, tipJointName,

View file

@ -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<float> tipTargetFlexCoefficients,
const std::vector<float> 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);
}

View file

@ -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<float> tipTargetFlexCoefficients,
const std::vector<float> midTargetFlexCoefficients);
virtual ~AnimSplineIK() override;
virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;