Browse Source

Animation: added Track[View]::duration().

pull/191/head
Vladimír Vondruš 8 years ago
parent
commit
77f4558655
  1. 75
      src/Magnum/Animation/Test/TrackTest.cpp
  2. 40
      src/Magnum/Animation/Test/TrackViewTest.cpp
  3. 23
      src/Magnum/Animation/Track.h

75
src/Magnum/Animation/Test/TrackTest.cpp

@ -134,7 +134,7 @@ void TrackTest::constructEmpty() {
void TrackTest::constructArrayInterpolator() {
const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}}},
Math::select, Extrapolation::Extrapolated, Extrapolation::Constant};
@ -142,6 +142,7 @@ void TrackTest::constructArrayInterpolator() {
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.data().size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
@ -155,27 +156,28 @@ void TrackTest::constructArrayInterpolator() {
void TrackTest::constructArrayInterpolatorDefaults() {
const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,
{{0.0f, {3.0f, 1.0f, 0.1f}}}},
{{1.0f, {3.0f, 1.0f, 0.1f}}}},
Math::lerp, Extrapolation::DefaultConstructed};
CORRADE_COMPARE(a.interpolation(), Interpolation::Custom);
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 1.0f}));
CORRADE_COMPARE(a.size(), 1);
CORRADE_COMPARE(a.data().size(), 1);
CORRADE_COMPARE(a.keys().size(), 1);
CORRADE_COMPARE(a.values().size(), 1);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 0.0f);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 1.0f);
CORRADE_COMPARE(a.values()[0], (Vector3{3.0f, 1.0f, 0.1f}));
}
void TrackTest::constructArrayInterpolation() {
const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}}},
Interpolation::Linear, Extrapolation::Extrapolated, Extrapolation::Constant};
@ -183,6 +185,7 @@ void TrackTest::constructArrayInterpolation() {
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.data().size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
@ -196,20 +199,21 @@ void TrackTest::constructArrayInterpolation() {
void TrackTest::constructArrayInterpolationDefaults() {
const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,
{{0.0f, {3.0f, 1.0f, 0.1f}}}},
{{1.0f, {3.0f, 1.0f, 0.1f}}}},
Interpolation::Constant, Extrapolation::DefaultConstructed};
CORRADE_COMPARE(a.interpolation(), Interpolation::Constant);
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 1.0f}));
CORRADE_COMPARE(a.size(), 1);
CORRADE_COMPARE(a.data().size(), 1);
CORRADE_COMPARE(a.keys().size(), 1);
CORRADE_COMPARE(a.values().size(), 1);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 0.0f);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 1.0f);
CORRADE_COMPARE(a.values()[0], (Vector3{3.0f, 1.0f, 0.1f}));
}
@ -220,7 +224,7 @@ namespace {
void TrackTest::constructArrayInterpolationInterpolator() {
const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}}},
Interpolation::Linear, customLerp, Extrapolation::Extrapolated, Extrapolation::Constant};
@ -228,6 +232,7 @@ void TrackTest::constructArrayInterpolationInterpolator() {
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.data().size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
@ -241,26 +246,27 @@ void TrackTest::constructArrayInterpolationInterpolator() {
void TrackTest::constructArrayInterpolationInterpolationDefaults() {
const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,
{{0.0f, {3.0f, 1.0f, 0.1f}}}},
{{1.0f, {3.0f, 1.0f, 0.1f}}}},
Interpolation::Constant, customLerp, Extrapolation::DefaultConstructed};
CORRADE_COMPARE(a.interpolation(), Interpolation::Constant);
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 1.0f}));
CORRADE_COMPARE(a.size(), 1);
CORRADE_COMPARE(a.data().size(), 1);
CORRADE_COMPARE(a.keys().size(), 1);
CORRADE_COMPARE(a.values().size(), 1);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 0.0f);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 1.0f);
CORRADE_COMPARE(a.values()[0], (Vector3{3.0f, 1.0f, 0.1f}));
}
void TrackTest::constructInitializerListInterpolator() {
const Track<Float, Vector3> a{
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}},
Math::select, Extrapolation::Extrapolated, Extrapolation::DefaultConstructed};
@ -268,6 +274,7 @@ void TrackTest::constructInitializerListInterpolator() {
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.data().size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
@ -279,26 +286,27 @@ void TrackTest::constructInitializerListInterpolator() {
}
void TrackTest::constructInitializerListInterpolatorDefaults() {
const Track<Float, Vector3> a{{{0.0f, {3.0f, 1.0f, 0.1f}}},
const Track<Float, Vector3> a{{{1.0f, {3.0f, 1.0f, 0.1f}}},
Math::lerp, Extrapolation::Constant};
CORRADE_COMPARE(a.interpolation(), Interpolation::Custom);
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 1.0f}));
CORRADE_COMPARE(a.size(), 1);
CORRADE_COMPARE(a.data().size(), 1);
CORRADE_COMPARE(a.keys().size(), 1);
CORRADE_COMPARE(a.values().size(), 1);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 0.0f);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 1.0f);
CORRADE_COMPARE(a.values()[0], (Vector3{3.0f, 1.0f, 0.1f}));
}
void TrackTest::constructInitializerListInterpolation() {
const Track<Float, Vector3> a{
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}},
Interpolation::Linear, Extrapolation::Extrapolated, Extrapolation::DefaultConstructed};
@ -306,6 +314,7 @@ void TrackTest::constructInitializerListInterpolation() {
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.data().size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
@ -317,26 +326,27 @@ void TrackTest::constructInitializerListInterpolation() {
}
void TrackTest::constructInitializerListInterpolationDefaults() {
const Track<Float, Vector3> a{{{0.0f, {3.0f, 1.0f, 0.1f}}},
const Track<Float, Vector3> a{{{1.0f, {3.0f, 1.0f, 0.1f}}},
Interpolation::Constant, Extrapolation::Constant};
CORRADE_COMPARE(a.interpolation(), Interpolation::Constant);
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 1.0f}));
CORRADE_COMPARE(a.size(), 1);
CORRADE_COMPARE(a.data().size(), 1);
CORRADE_COMPARE(a.keys().size(), 1);
CORRADE_COMPARE(a.values().size(), 1);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 0.0f);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 1.0f);
CORRADE_COMPARE(a.values()[0], (Vector3{3.0f, 1.0f, 0.1f}));
}
void TrackTest::constructInitializerListInterpolationInterpolator() {
const Track<Float, Vector3> a{
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}},
Interpolation::Linear, customLerp, Extrapolation::Extrapolated, Extrapolation::DefaultConstructed};
@ -344,6 +354,7 @@ void TrackTest::constructInitializerListInterpolationInterpolator() {
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.data().size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
@ -355,26 +366,27 @@ void TrackTest::constructInitializerListInterpolationInterpolator() {
}
void TrackTest::constructInitializerListInterpolationInterpolatorDefaults() {
const Track<Float, Vector3> a{{{0.0f, {3.0f, 1.0f, 0.1f}}},
const Track<Float, Vector3> a{{{1.0f, {3.0f, 1.0f, 0.1f}}},
Interpolation::Constant, customLerp, Extrapolation::Constant};
CORRADE_COMPARE(a.interpolation(), Interpolation::Constant);
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 1.0f}));
CORRADE_COMPARE(a.size(), 1);
CORRADE_COMPARE(a.data().size(), 1);
CORRADE_COMPARE(a.keys().size(), 1);
CORRADE_COMPARE(a.values().size(), 1);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{0.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 0.0f);
CORRADE_COMPARE(a[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.data()[0], (std::pair<Float, Vector3>{1.0f, {3.0f, 1.0f, 0.1f}}));
CORRADE_COMPARE(a.keys()[0], 1.0f);
CORRADE_COMPARE(a.values()[0], (Vector3{3.0f, 1.0f, 0.1f}));
}
void TrackTest::convertView() {
const Track<Float, Vector3> a{
{{0.0f, {3.0f, 1.0f, 0.1f}},
{{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}},
Interpolation::Linear, customLerp, Extrapolation::Extrapolated, Extrapolation::DefaultConstructed};
const TrackView<Float, Vector3> av = a;
@ -383,6 +395,7 @@ void TrackTest::convertView() {
CORRADE_COMPARE(av.interpolator(), customLerp);
CORRADE_COMPARE(av.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(av.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(av.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(av.size(), 2);
CORRADE_COMPARE(av.keys().size(), 2);
CORRADE_COMPARE(av.values().size(), 2);

40
src/Magnum/Animation/Test/TrackViewTest.cpp

@ -125,6 +125,7 @@ void TrackViewTest::constructEmpty() {
const TrackView<Float, Vector3> a;
CORRADE_VERIFY(!a.interpolator());
CORRADE_COMPARE(a.duration(), Range1D{});
CORRADE_VERIFY(!a.size());
CORRADE_VERIFY(a.keys().empty());
CORRADE_VERIFY(a.values().empty());
@ -132,7 +133,7 @@ void TrackViewTest::constructEmpty() {
}
void TrackViewTest::constructInterpolator() {
constexpr Float keys[]{0.0f, 5.0f};
constexpr Float keys[]{1.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};
const TrackView<Float, Vector3> a{keys, values, Math::select,
@ -142,6 +143,7 @@ void TrackViewTest::constructInterpolator() {
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -149,7 +151,7 @@ void TrackViewTest::constructInterpolator() {
}
void TrackViewTest::constructInterpolatorDefaults() {
constexpr Float keys[]{0.0f, 5.0f};
constexpr Float keys[]{1.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};
const TrackView<Float, Vector3> a{keys, values, Math::lerp,
@ -159,6 +161,7 @@ void TrackViewTest::constructInterpolatorDefaults() {
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -166,7 +169,7 @@ void TrackViewTest::constructInterpolatorDefaults() {
}
void TrackViewTest::constructInterpolation() {
constexpr Float keys[]{0.0f, 5.0f};
constexpr Float keys[]{1.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};
const TrackView<Float, Vector3> a{keys, values, Interpolation::Linear,
@ -176,6 +179,7 @@ void TrackViewTest::constructInterpolation() {
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -183,7 +187,7 @@ void TrackViewTest::constructInterpolation() {
}
void TrackViewTest::constructInterpolationDefaults() {
constexpr Float keys[]{0.0f, 5.0f};
constexpr Float keys[]{1.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};
const TrackView<Float, Vector3> a{keys, values, Interpolation::Constant,
@ -193,6 +197,7 @@ void TrackViewTest::constructInterpolationDefaults() {
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -204,7 +209,7 @@ namespace {
}
void TrackViewTest::constructInterpolationInterpolator() {
constexpr Float keys[]{0.0f, 5.0f};
constexpr Float keys[]{1.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};
const TrackView<Float, Vector3> a{keys, values, Interpolation::Linear,
@ -214,6 +219,7 @@ void TrackViewTest::constructInterpolationInterpolator() {
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -221,7 +227,7 @@ void TrackViewTest::constructInterpolationInterpolator() {
}
void TrackViewTest::constructInterpolationInterpolatorDefaults() {
constexpr Float keys[]{0.0f, 5.0f};
constexpr Float keys[]{1.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};
const TrackView<Float, Vector3> a{keys, values, Interpolation::Constant,
@ -231,6 +237,7 @@ void TrackViewTest::constructInterpolationInterpolatorDefaults() {
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -239,7 +246,7 @@ void TrackViewTest::constructInterpolationInterpolatorDefaults() {
void TrackViewTest::constructSingleArrayInterpolator() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Math::select,
@ -249,6 +256,7 @@ void TrackViewTest::constructSingleArrayInterpolator() {
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -257,7 +265,7 @@ void TrackViewTest::constructSingleArrayInterpolator() {
void TrackViewTest::constructSingleArrayInterpolatorDefaults() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Math::lerp,
@ -267,6 +275,7 @@ void TrackViewTest::constructSingleArrayInterpolatorDefaults() {
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -275,7 +284,7 @@ void TrackViewTest::constructSingleArrayInterpolatorDefaults() {
void TrackViewTest::constructSingleArrayInterpolation() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Interpolation::Linear,
@ -285,6 +294,7 @@ void TrackViewTest::constructSingleArrayInterpolation() {
CORRADE_COMPARE(a.interpolator(), Math::lerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -293,7 +303,7 @@ void TrackViewTest::constructSingleArrayInterpolation() {
void TrackViewTest::constructSingleArrayInterpolationDefaults() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Interpolation::Constant,
@ -303,6 +313,7 @@ void TrackViewTest::constructSingleArrayInterpolationDefaults() {
CORRADE_COMPARE(a.interpolator(), Math::select);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -311,7 +322,7 @@ void TrackViewTest::constructSingleArrayInterpolationDefaults() {
void TrackViewTest::constructSingleArrayInterpolationInterpolator() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Interpolation::Linear, customLerp,
@ -321,6 +332,7 @@ void TrackViewTest::constructSingleArrayInterpolationInterpolator() {
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(a.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -329,7 +341,7 @@ void TrackViewTest::constructSingleArrayInterpolationInterpolator() {
void TrackViewTest::constructSingleArrayInterpolationInterpolatorDefaults() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Interpolation::Constant,
@ -339,6 +351,7 @@ void TrackViewTest::constructSingleArrayInterpolationInterpolatorDefaults() {
CORRADE_COMPARE(a.interpolator(), customLerp);
CORRADE_COMPARE(a.before(), Extrapolation::Constant);
CORRADE_COMPARE(a.after(), Extrapolation::Constant);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(a.size(), 2);
CORRADE_COMPARE(a.keys().size(), 2);
CORRADE_COMPARE(a.values().size(), 2);
@ -347,7 +360,7 @@ void TrackViewTest::constructSingleArrayInterpolationInterpolatorDefaults() {
void TrackViewTest::constructCopyStorage() {
const std::pair<Float, Vector3> data[]{
{0.0f, {3.0f, 1.0f, 0.1f}},
{1.0f, {3.0f, 1.0f, 0.1f}},
{5.0f, {0.3f, 0.6f, 1.0f}}};
const TrackView<Float, Vector3> a{data, Interpolation::Constant, customLerp,
@ -361,6 +374,7 @@ void TrackViewTest::constructCopyStorage() {
CORRADE_COMPARE(bv.interpolator(), customLerp);
CORRADE_COMPARE(bv.before(), Extrapolation::Extrapolated);
CORRADE_COMPARE(bv.after(), Extrapolation::DefaultConstructed);
CORRADE_COMPARE(a.duration(), (Range1D{1.0f, 5.0f}));
CORRADE_COMPARE(bv.size(), 2);
CORRADE_COMPARE(bv.keys().size(), 2);
CORRADE_COMPARE(bv.values().size(), 2);

23
src/Magnum/Animation/Track.h

@ -33,6 +33,7 @@
#include "Magnum/Animation/Animation.h"
#include "Magnum/Animation/Interpolation.h"
#include "Magnum/Math/Range.h"
namespace Magnum { namespace Animation {
@ -285,6 +286,17 @@ template<class K, class V, class R
*/
Extrapolation after() const { return _after; }
/**
* @brief Duration of the track
*
* Calculated from first and last keyframe. If there are no keyframes,
* a default-constructed value is returned. Use @ref Math::join() to
* calculate combined duration for a set of tracks.
*/
Math::Range1D<K> duration() const {
return _data.empty() ? Math::Range1D<K>{} : Math::Range1D<K>{_data.front().first, _data.back().first};
}
/** @brief Keyframe count */
std::size_t size() const { return _data.size(); }
@ -617,6 +629,17 @@ template<class K, class V, class R
*/
Extrapolation after() const { return _after; }
/**
* @brief Duration of the track
*
* Calculated from first and last keyframe. If there are no keyframes,
* a default-constructed value is returned. Use @ref Math::join() to
* calculate combined duration for a set of tracks.
*/
Math::Range1D<K> duration() const {
return _keys.empty() ? Math::Range1D<K>{} : Math::Range1D<K>{keys().front(), keys().back()};
}
/** @brief Keyframe count */
std::size_t size() const { return _keys.size(); }

Loading…
Cancel
Save