diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-04-05 16:20:27 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-04-12 18:37:22 +0000 |
commit | 6cf41cf05ca8d1b6caddcdf54767d1926ccae323 (patch) | |
tree | e77c764b1aac87e21f029c738b1082d00fe02ad9 /src/animation/backend/fcurve.cpp | |
parent | 8c245b73cfacd78c664bc6dd8779b001fa769dfc (diff) |
Refactor clip loading and add support for loading from data
Change-Id: I5be059618f22676491e08aa2fc0252c806073b07
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/animation/backend/fcurve.cpp')
-rw-r--r-- | src/animation/backend/fcurve.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/animation/backend/fcurve.cpp b/src/animation/backend/fcurve.cpp index baa6fda41..809949472 100644 --- a/src/animation/backend/fcurve.cpp +++ b/src/animation/backend/fcurve.cpp @@ -121,12 +121,38 @@ void FCurve::read(const QJsonObject &json) // back so they do not interset. } +void FCurve::setFromQChannelComponent(const QChannelComponent &qcc) +{ + clearKeyframes(); + + for (const auto &frontendKeyFrame : qcc) { + // Extract the keyframe local time and value + const float localTime = frontendKeyFrame.coordinates()[0]; + + Keyframe keyFrame; + keyFrame.interpolation = frontendKeyFrame.interpolationType(); + keyFrame.value = frontendKeyFrame.coordinates()[1]; + keyFrame.leftControlPoint = frontendKeyFrame.leftControlPoint(); + keyFrame.rightControlPoint = frontendKeyFrame.rightControlPoint(); + appendKeyframe(localTime, keyFrame); + } + + // TODO: Ensure beziers have no loops or cusps by scaling the control points + // back so they do not interset. +} + void ChannelComponent::read(const QJsonObject &json) { name = json[QLatin1String("channelComponentName")].toString(); fcurve.read(json); } +void ChannelComponent::setFromQChannelComponent(const QChannelComponent &qcc) +{ + name = qcc.name(); + fcurve.setFromQChannelComponent(qcc); +} + void Channel::read(const QJsonObject &json) { name = json[QLatin1String("channelName")].toString(); @@ -140,6 +166,15 @@ void Channel::read(const QJsonObject &json) } } +void Channel::setFromQChannel(const QChannel &qch) +{ + name = qch.name(); + channelComponents.resize(qch.channelComponentCount()); + int i = 0; + for (const auto &frontendChannelComponent : qch) + channelComponents[i++].setFromQChannelComponent(frontendChannelComponent); +} + } // namespace Animation } // namespace Qt3DAnimation |