summaryrefslogtreecommitdiffstats
path: root/src/animation/backend/fcurve.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-04-05 16:20:27 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-04-12 18:37:22 +0000
commit6cf41cf05ca8d1b6caddcdf54767d1926ccae323 (patch)
treee77c764b1aac87e21f029c738b1082d00fe02ad9 /src/animation/backend/fcurve.cpp
parent8c245b73cfacd78c664bc6dd8779b001fa769dfc (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.cpp35
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