summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-03-24 11:16:36 +0000
committerSean Harmer <sean.harmer@kdab.com>2017-03-25 14:24:03 +0000
commit14538a90120d7d1e8f37c0740d8a6a669389caad (patch)
tree6bb1dfe9dbb6dbf2306450543e112e12f457b959 /tests
parent1482fe88f1e6a42add57fbe6900ed71b3972261d (diff)
Update animation-keyframe-blendtree example
To use new json format and blend tree node API. Now wondering if we should drop the "clip" suffix from blend tree node properties as they can be other sub-trees not just values (clips). Change-Id: I96e83a84722a983c2929aa2bbfc4b41c3c2c7dd1 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/manual/animation-keyframe-blendtree/cubeanimation.json87
-rw-r--r--tests/manual/animation-keyframe-blendtree/main.qml203
-rw-r--r--tests/manual/animation-keyframe-blendtree/main.qrc5
-rw-r--r--tests/manual/animation-keyframe-blendtree/pulsing-cube-additive.json84
-rw-r--r--tests/manual/animation-keyframe-blendtree/pulsing-moving-cube.json114
-rw-r--r--tests/manual/animation-keyframe-blendtree/sliding-cube.json469
-rw-r--r--tests/manual/animation-keyframe-blendtree/sliding-pulsing-cube.json469
7 files changed, 949 insertions, 482 deletions
diff --git a/tests/manual/animation-keyframe-blendtree/cubeanimation.json b/tests/manual/animation-keyframe-blendtree/cubeanimation.json
deleted file mode 100644
index addf92907..000000000
--- a/tests/manual/animation-keyframe-blendtree/cubeanimation.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "animations": [
- { "object": "Cube",
- "action": "CubeAction",
- "range": [0.0, 60.0],
- "groups": [
- { "group": "Location",
- "channels": [
- { "name": "x",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.4717472394307454, 0.0],
- "handle_right": [0.4717472394307454, 0.0]}
- ,{ "co": [1.2083333333333333, 2.430499792098999],
- "handle_left": [0.7365860939025879, 1.4711904525756836],
- "handle_right": [1.696347713470459, 3.42288875579834]}
- ,{ "co": [2.4583333333333335, 5.0],
- "handle_left": [1.9703189531962078, 5.0],
- "handle_right": [2.9463475545247397, 5.0]}
- ]}
- ,{ "name": "z",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.4717472394307454, 0.0],
- "handle_right": [0.4717472394307454, 0.0]}
- ,{ "co": [1.2083333333333333, 0.0],
- "handle_left": [0.7365860939025879, 0.0],
- "handle_right": [1.696347713470459, 0.0]}
- ,{ "co": [2.4583333333333335, 0.0],
- "handle_left": [1.9703189531962078, 0.0],
- "handle_right": [2.9463475545247397, 0.0]}
- ]}
- ,{ "name": "y",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.4717472394307454, 0.0],
- "handle_right": [0.4717472394307454, 0.0]}
- ,{ "co": [1.2083333333333333, 3.0],
- "handle_left": [0.7365860939025879, 3.0],
- "handle_right": [1.696347713470459, 3.0]}
- ,{ "co": [2.4583333333333335, 0.0],
- "handle_left": [1.9703189531962078, 0.0],
- "handle_right": [2.9463475545247397, 0.0]}
- ]}
- ]}
- ,{ "group": "Rotation",
- "channels": [
- { "name": "w",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.9597616195678711, 1.0],
- "handle_right": [0.9597616195678711, 1.0]}
- ,{ "co": [2.4583333333333335, -4.371138828673793e-08],
- "handle_left": [1.4985717137654622, -4.371138828673793e-08],
- "handle_right": [3.4180949529012046, -4.371138828673793e-08]}
- ]}
- ,{ "name": "x",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.9597616195678711, 0.0],
- "handle_right": [0.9597616195678711, 0.0]}
- ,{ "co": [2.4583333333333335, 0.0],
- "handle_left": [1.4985717137654622, 0.0],
- "handle_right": [3.4180949529012046, 0.0]}
- ]}
- ,{ "name": "z",
- "keyframes": [
- { "co": [0.0, -0.0],
- "handle_left": [-0.9597616195678711, -0.0],
- "handle_right": [0.9597616195678711, -0.0]}
- ,{ "co": [2.4583333333333335, -1.0],
- "handle_left": [1.4985717137654622, -1.0],
- "handle_right": [3.4180949529012046, -1.0]}
- ]}
- ,{ "name": "y",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.9597616195678711, 0.0],
- "handle_right": [0.9597616195678711, 0.0]}
- ,{ "co": [2.4583333333333335, 0.0],
- "handle_left": [1.4985717137654622, 0.0],
- "handle_right": [3.4180949529012046, 0.0]}
- ]}
- ]}
- ]}
- ]
-}
diff --git a/tests/manual/animation-keyframe-blendtree/main.qml b/tests/manual/animation-keyframe-blendtree/main.qml
index 2c7be6879..0c28b8fd3 100644
--- a/tests/manual/animation-keyframe-blendtree/main.qml
+++ b/tests/manual/animation-keyframe-blendtree/main.qml
@@ -22,7 +22,7 @@ DefaultSceneEntity {
components: [
Transform {
id: cubeTransform
-
+ translation: Qt.vector3d(5, 0, 0)
onTranslationChanged: console.log("t = " + translation)
},
CuboidMesh {
@@ -30,52 +30,6 @@ DefaultSceneEntity {
PhongMaterial {
id: cubeMaterial
ambient: Qt.rgba(0.02, 0.02, 0.02, 1.0)
- diffuse: "blue"
- shininess: 50
- },
- ObjectPicker {
- onClicked: animator.running = true
- },
- ClipAnimator {
- id: animator
- loops: 3
- onRunningChanged: console.log("running = " + running)
-
- clip: AnimationClip {
- source: "cubeanimation.json"
- onDurationChanged: console.log("duration = " + duration)
- }
-
- // By default introspect parent Entity and try
- // to map fcurve groups to properties of QTransform
- // mapping: AutomaticAnimationMapping {}
-
- // To do more, we can be explicit
- channelMapper: ChannelMapper {
- mappings: [
- ChannelMapping { channelName: "Location"; target: cubeTransform; property: "translation" },
- ChannelMapping { channelName: "Rotation"; target: cubeTransform; property: "rotation" },
- ChannelMapping { channelName: "Diffuse Color"; target: cubeMaterial; property: "diffuse" }
- ]
- }
- }
- ]
- }
-
- Entity {
- id: sphere
-
- components: [
- Transform {
- id: sphereTransform
- translation: Qt.vector3d(5, 0, 0)
- onTranslationChanged: console.log("t = " + translation)
- },
- SphereMesh {
- },
- PhongMaterial {
- id: sphereMaterial
- ambient: Qt.rgba(0.02, 0.02, 0.02, 1.0)
diffuse: "red"
shininess: 50
},
@@ -88,165 +42,26 @@ DefaultSceneEntity {
onRunningChanged: console.log("running = " + running)
- blendTree: LerpBlend {
- blendFactor: 0.5
- clips: [
- AnimationClip {
- source: "cubeanimation.json"
- onDurationChanged: console.log("duration = " + duration)
- },
- AnimationClip {
- source: "pulsing-moving-cube.json"
- onDurationChanged: console.log("duration = " + duration)
- }]
- }
-
-
- // By default introspect parent Entity and try
- // to map fcurve groups to properties of QTransform
- // mapping: AutomaticAnimationMapping {}
-
- // To do more, we can be explicit
- channelMapper: ChannelMapper {
- mappings: [
- ChannelMapping { channelName: "Location"; target: sphereTransform; property: "translation" },
- ChannelMapping { channelName: "Rotation"; target: sphereTransform; property: "rotation" },
- ChannelMapping { channelName: "Scaling"; target: sphereTransform; property: "scale3D" },
- ChannelMapping { channelName: "Diffuse Color"; target: sphereMaterial; property: "diffuse" }
- ]
- }
- }
- ]
- }
-
- Entity {
- id: cube2
-
- components: [
- Transform {
- id: cube2Transform
- translation: Qt.vector3d(2.5, 0, 0)
- onTranslationChanged: console.log("t = " + translation)
- },
- CuboidMesh {
- },
- PhongMaterial {
- id: cube2Material
- ambient: Qt.rgba(0.8, 0.8, 0.8, 1.0)
- diffuse: Qt.rgba(0.7, 0.7, 0.7, 1.0)
- shininess: 50
- },
- ObjectPicker {
- onClicked: blendedAnimator2.running = true
- },
- BlendedClipAnimator {
- id: blendedAnimator2
- loops: 2
-
- onRunningChanged: console.log("running = " + running)
-
- blendTree: AdditiveBlend {
- blendFactor: 0.5
- clips: [
- AnimationClip {
- source: "pulsing-moving-cube.json"
- onDurationChanged: console.log("duration = " + duration)
- },
- AnimationClip {
- source: "pulsing-cube-additive.json"
- onDurationChanged: console.log("duration = " + duration)
- }]
- }
-
- // By default introspect parent Entity and try
- // to map fcurve groups to properties of QTransform
- // mapping: AutomaticAnimationMapping {}
-
- // To do more, we can be explicit
- channelMapper: ChannelMapper {
- mappings: [
- ChannelMapping { channelName: "Location"; target: cube2Transform; property: "translation" },
- ChannelMapping { channelName: "Rotation"; target: cube2Transform; property: "rotation" },
- ChannelMapping { channelName: "Scaling"; target: cube2Transform; property: "scale3D" },
- ChannelMapping { channelName: "Diffuse Color"; target: cube2Transform; property: "diffuse" }
- ]
- }
- }
- ]
- }
-
- Entity {
- id: cube3
-
- components: [
- Transform {
- id: cube3Transform
- translation: Qt.vector3d(2.5, 0, 2)
- onTranslationChanged: console.log("t = " + translation)
- },
- CuboidMesh {
- },
- PhongMaterial {
- id: cube3Material
- ambient: Qt.rgba(0.8, 0.8, 0.8, 1.0)
- diffuse: "green"
- shininess: 50
- },
- ObjectPicker {
- onClicked: blendedAnimator3.running = true
- },
- BlendedClipAnimator {
- id: blendedAnimator3
- loops: 2
-
- onRunningChanged: console.log("running = " + running)
-
- blendTree: LerpBlend {
- blendFactor: 0.5
- AdditiveBlend {
- blendFactor: 0.5
- clips: [
- AnimationClip {
- source: "pulsing-moving-cube.json"
- onDurationChanged: console.log("duration = " + duration)
- },
- AnimationClip {
- source: "pulsing-cube-additive.json"
- onDurationChanged: console.log("duration = " + duration)
- }]
+ blendTree: LerpClipBlend {
+ blendFactor: 0.2
+ startClip: ClipBlendValue {
+ clip: AnimationClip { source: "sliding-cube.json" }
}
- LerpBlend {
- blendFactor: 0.5
- clips: [
- AnimationClip {
- source: "cubeanimation.json"
- onDurationChanged: console.log("duration = " + duration)
- },
- AnimationClip {
- source: "pulsing-moving-cube.json"
- onDurationChanged: console.log("duration = " + duration)
- }]
+ endClip: ClipBlendValue {
+ clip: AnimationClip { source: "sliding-pulsing-cube.json" }
}
}
- // By default introspect parent Entity and try
- // to map fcurve groups to properties of QTransform
- // mapping: AutomaticAnimationMapping {}
-
- // To do more, we can be explicit
channelMapper: ChannelMapper {
mappings: [
- ChannelMapping { channelName: "Location"; target: cube3Transform; property: "translation" },
- ChannelMapping { channelName: "Rotation"; target: cube3Transform; property: "rotation" },
- ChannelMapping { channelName: "Scaling"; target: cube3Transform; property: "scale3D" },
- ChannelMapping { channelName: "Diffuse Color"; target: cube3Transform; property: "diffuse" }
+ ChannelMapping { channelName: "Location"; target: cubeTransform; property: "translation" },
+ ChannelMapping { channelName: "Scale"; target: cubeTransform; property: "scale3D" }
]
}
}
]
}
-
camera: Camera {
position: Qt.vector3d(10, 3, 15)
viewCenter: Qt.vector3d(2.5, 1, 0)
diff --git a/tests/manual/animation-keyframe-blendtree/main.qrc b/tests/manual/animation-keyframe-blendtree/main.qrc
index b59429895..4422a677e 100644
--- a/tests/manual/animation-keyframe-blendtree/main.qrc
+++ b/tests/manual/animation-keyframe-blendtree/main.qrc
@@ -2,8 +2,7 @@
<qresource prefix="/">
<file>main.qml</file>
<file>DefaultSceneEntity.qml</file>
- <file>cubeanimation.json</file>
- <file>pulsing-moving-cube.json</file>
- <file>pulsing-cube-additive.json</file>
+ <file>sliding-cube.json</file>
+ <file>sliding-pulsing-cube.json</file>
</qresource>
</RCC>
diff --git a/tests/manual/animation-keyframe-blendtree/pulsing-cube-additive.json b/tests/manual/animation-keyframe-blendtree/pulsing-cube-additive.json
deleted file mode 100644
index 1373a5002..000000000
--- a/tests/manual/animation-keyframe-blendtree/pulsing-cube-additive.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
- "animations": [
- { "object": "Cube",
- "action": "CubeAction",
- "range": [0.0, 60.0],
- "groups": [
- { "group": "Scaling",
- "channels": [
- { "name": "x",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.1464043160279592, 1.0],
- "handle_right": [0.14640430609385172, 1.0]}
- ,{ "co": [0.375, 0.5],
- "handle_left": [0.22859569390614828, 0.5],
- "handle_right": [0.5376714468002319, 0.5]}
- ,{ "co": [0.7916666666666666, 1.0],
- "handle_left": [0.6289951801300049, 1.0],
- "handle_right": [0.9543381532033285, 1.0]}
- ,{ "co": [1.2083333333333333, 0.5],
- "handle_left": [1.0456619262695312, 0.5],
- "handle_right": [1.371035893758138, 0.5]}
- ,{ "co": [1.625, 1.0],
- "handle_left": [1.462328592936198, 1.0],
- "handle_right": [1.787671407063802, 1.0]}
- ,{ "co": [2.0416666666666665, 0.5],
- "handle_left": [1.8789952596028645, 0.5],
- "handle_right": [2.2043380737304688, 0.5]}
- ,{ "co": [2.4583333333333335, 1.0],
- "handle_left": [2.2956619262695312, 1.0],
- "handle_right": [2.6210047403971353, 1.0]}
- ]}
- ,{ "name": "z",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.1464043160279592, 1.0],
- "handle_right": [0.14640430609385172, 1.0]}
- ,{ "co": [0.375, 0.5],
- "handle_left": [0.22859569390614828, 0.5],
- "handle_right": [0.5376714468002319, 0.5]}
- ,{ "co": [0.7916666666666666, 1.0],
- "handle_left": [0.6289951801300049, 1.0],
- "handle_right": [0.9543381532033285, 1.0]}
- ,{ "co": [1.2083333333333333, 0.5],
- "handle_left": [1.0456618467966716, 0.5],
- "handle_right": [1.3710047403971355, 0.5]}
- ,{ "co": [1.625, 1.0],
- "handle_left": [1.462328592936198, 1.0],
- "handle_right": [1.787671407063802, 1.0]}
- ,{ "co": [2.0416666666666665, 0.5],
- "handle_left": [1.8789952596028645, 0.5],
- "handle_right": [2.2043380737304688, 0.5]}
- ,{ "co": [2.4583333333333335, 1.0],
- "handle_left": [2.2956619262695312, 1.0],
- "handle_right": [2.6210047403971353, 1.0]}
- ]}
- ,{ "name": "y",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.1464043160279592, 1.0],
- "handle_right": [0.14640430609385172, 1.0]}
- ,{ "co": [0.375, 0.5],
- "handle_left": [0.22859569390614828, 0.5],
- "handle_right": [0.5376714468002319, 0.5]}
- ,{ "co": [0.7916666666666666, 1.0],
- "handle_left": [0.6289951801300049, 1.0],
- "handle_right": [0.9543381532033285, 1.0]}
- ,{ "co": [1.2083333333333333, 0.5441937446594238],
- "handle_left": [1.0456618467966716, 0.5441937446594238],
- "handle_right": [1.3710047403971355, 0.5441937446594238]}
- ,{ "co": [1.625, 1.0],
- "handle_left": [1.462328592936198, 1.0],
- "handle_right": [1.787671407063802, 1.0]}
- ,{ "co": [2.0416666666666665, 0.5771476030349731],
- "handle_left": [1.8789952596028645, 0.5771476030349731],
- "handle_right": [2.2043380737304688, 0.5771476030349731]}
- ,{ "co": [2.4583333333333335, 1.0],
- "handle_left": [2.2956619262695312, 1.0],
- "handle_right": [2.6210047403971353, 1.0]}
- ]}
- ]}
- ]}
- ]
-}
diff --git a/tests/manual/animation-keyframe-blendtree/pulsing-moving-cube.json b/tests/manual/animation-keyframe-blendtree/pulsing-moving-cube.json
deleted file mode 100644
index 147c31e76..000000000
--- a/tests/manual/animation-keyframe-blendtree/pulsing-moving-cube.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
- "animations": [
- { "object": "Cube",
- "action": "CubeAction",
- "range": [0.0, 60.0],
- "groups": [
- { "group": "Location",
- "channels": [
- { "name": "x",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.9597616195678711, 0.0],
- "handle_right": [0.9597616195678711, 0.0]}
- ,{ "co": [2.4583333333333335, 5.0],
- "handle_left": [1.4985717137654622, 5.0],
- "handle_right": [3.4180949529012046, 5.0]}
- ]}
- ,{ "name": "z",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.9597616195678711, 0.0],
- "handle_right": [0.9597616195678711, 0.0]}
- ,{ "co": [2.4583333333333335, 0.0],
- "handle_left": [1.4985717137654622, 0.0],
- "handle_right": [3.4180949529012046, 0.0]}
- ]}
- ,{ "name": "y",
- "keyframes": [
- { "co": [0.0, 0.0],
- "handle_left": [-0.9597616195678711, 0.0],
- "handle_right": [0.9597616195678711, 0.0]}
- ,{ "co": [2.4583333333333335, 0.0],
- "handle_left": [1.4985717137654622, 0.0],
- "handle_right": [3.4180949529012046, 0.0]}
- ]}
- ]}
- ,{ "group": "Scaling",
- "channels": [
- { "name": "x",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.1464043160279592, 1.0],
- "handle_right": [0.14640430609385172, 1.0]}
- ,{ "co": [0.375, 0.5],
- "handle_left": [0.22859569390614828, 0.5],
- "handle_right": [0.5376714468002319, 0.5]}
- ,{ "co": [0.7916666666666666, 1.0],
- "handle_left": [0.6289951801300049, 1.0],
- "handle_right": [0.9543381532033285, 1.0]}
- ,{ "co": [1.2083333333333333, 0.5],
- "handle_left": [1.0456619262695312, 0.5],
- "handle_right": [1.371035893758138, 0.5]}
- ,{ "co": [1.625, 1.0],
- "handle_left": [1.462328592936198, 1.0],
- "handle_right": [1.787671407063802, 1.0]}
- ,{ "co": [2.0416666666666665, 0.5],
- "handle_left": [1.8789952596028645, 0.5],
- "handle_right": [2.2043380737304688, 0.5]}
- ,{ "co": [2.4583333333333335, 1.0],
- "handle_left": [2.2956619262695312, 1.0],
- "handle_right": [2.6210047403971353, 1.0]}
- ]}
- ,{ "name": "z",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.1464043160279592, 1.0],
- "handle_right": [0.14640430609385172, 1.0]}
- ,{ "co": [0.375, 0.5],
- "handle_left": [0.22859569390614828, 0.5],
- "handle_right": [0.5376714468002319, 0.5]}
- ,{ "co": [0.7916666666666666, 1.0],
- "handle_left": [0.6289951801300049, 1.0],
- "handle_right": [0.9543381532033285, 1.0]}
- ,{ "co": [1.2083333333333333, 0.5],
- "handle_left": [1.0456618467966716, 0.5],
- "handle_right": [1.3710047403971355, 0.5]}
- ,{ "co": [1.625, 1.0],
- "handle_left": [1.462328592936198, 1.0],
- "handle_right": [1.787671407063802, 1.0]}
- ,{ "co": [2.0416666666666665, 0.5],
- "handle_left": [1.8789952596028645, 0.5],
- "handle_right": [2.2043380737304688, 0.5]}
- ,{ "co": [2.4583333333333335, 1.0],
- "handle_left": [2.2956619262695312, 1.0],
- "handle_right": [2.6210047403971353, 1.0]}
- ]}
- ,{ "name": "y",
- "keyframes": [
- { "co": [0.0, 1.0],
- "handle_left": [-0.1464043160279592, 1.0],
- "handle_right": [0.14640430609385172, 1.0]}
- ,{ "co": [0.375, 0.5],
- "handle_left": [0.22859569390614828, 0.5],
- "handle_right": [0.5376714468002319, 0.5]}
- ,{ "co": [0.7916666666666666, 1.0],
- "handle_left": [0.6289951801300049, 1.0],
- "handle_right": [0.9543381532033285, 1.0]}
- ,{ "co": [1.2083333333333333, 0.5441937446594238],
- "handle_left": [1.0456618467966716, 0.5441937446594238],
- "handle_right": [1.3710047403971355, 0.5441937446594238]}
- ,{ "co": [1.625, 1.0],
- "handle_left": [1.462328592936198, 1.0],
- "handle_right": [1.787671407063802, 1.0]}
- ,{ "co": [2.0416666666666665, 0.5771476030349731],
- "handle_left": [1.8789952596028645, 0.5771476030349731],
- "handle_right": [2.2043380737304688, 0.5771476030349731]}
- ,{ "co": [2.4583333333333335, 1.0],
- "handle_left": [2.2956619262695312, 1.0],
- "handle_right": [2.6210047403971353, 1.0]}
- ]}
- ]}
- ]}
- ]
-}
diff --git a/tests/manual/animation-keyframe-blendtree/sliding-cube.json b/tests/manual/animation-keyframe-blendtree/sliding-cube.json
new file mode 100644
index 000000000..2404ea325
--- /dev/null
+++ b/tests/manual/animation-keyframe-blendtree/sliding-cube.json
@@ -0,0 +1,469 @@
+{
+ "animations": [
+ {
+ "animationName": "PulsingSlidingCube",
+ "channels": [
+ {
+ "channelComponents": [
+ {
+ "channelComponentName": "Location X",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 0.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.6238380670547485
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.20872697234153748
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 1.0685999393463135
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 2.2338662147521973
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.5640573501586914
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 2.903675079345703
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 4.0551347732543945
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 3.515169620513916
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 4.595099925994873
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 5.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 5.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 5.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Location Z",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 0.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 0.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 0.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 0.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Location Y",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 0.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 0.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 0.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 0.0
+ ]
+ }
+ ]
+ }
+ ],
+ "channelName": "Location"
+ },
+ {
+ "channelComponents": [
+ {
+ "channelComponentName": "Scale X",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 1.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 1.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 1.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Scale Y",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 1.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 1.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 1.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Scale Z",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 1.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 1.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 1.0
+ ]
+ }
+ ]
+ }
+ ],
+ "channelName": "Scale"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/manual/animation-keyframe-blendtree/sliding-pulsing-cube.json b/tests/manual/animation-keyframe-blendtree/sliding-pulsing-cube.json
new file mode 100644
index 000000000..9d6a8c7b8
--- /dev/null
+++ b/tests/manual/animation-keyframe-blendtree/sliding-pulsing-cube.json
@@ -0,0 +1,469 @@
+{
+ "animations": [
+ {
+ "animationName": "PulsingSlidingCube",
+ "channels": [
+ {
+ "channelComponents": [
+ {
+ "channelComponentName": "Location X",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 0.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.6238380670547485
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.20872697234153748
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 1.0685999393463135
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 2.2338662147521973
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.5640573501586914
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 2.903675079345703
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 4.0551347732543945
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 3.515169620513916
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 4.595099925994873
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 5.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 5.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 5.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Location Z",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 0.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 0.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 0.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 0.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Location Y",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 0.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.0
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 0.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.0
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.0
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 0.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 0.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 0.0
+ ]
+ }
+ ]
+ }
+ ],
+ "channelName": "Location"
+ },
+ {
+ "channelComponents": [
+ {
+ "channelComponentName": "Scale X",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 1.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.5
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.5
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.5
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.5
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.5
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.5
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 1.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 1.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Scale Y",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 1.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.5
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.5
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.5
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.5
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.5
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.5
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 1.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 1.0
+ ]
+ }
+ ]
+ },
+ {
+ "channelComponentName": "Scale Z",
+ "keyFrames": [
+ {
+ "coords": [
+ 0.0,
+ 1.0
+ ],
+ "leftHandle": [
+ -0.22774004936218262,
+ 1.0
+ ],
+ "rightHandle": [
+ 0.22774004936218262,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 0.5833333333333334,
+ 0.5
+ ],
+ "leftHandle": [
+ 0.3555932839711507,
+ 0.5
+ ],
+ "rightHandle": [
+ 0.8273405234018961,
+ 0.5
+ ]
+ },
+ {
+ "coords": [
+ 1.2083333333333333,
+ 1.0
+ ],
+ "leftHandle": [
+ 0.9643261432647705,
+ 1.0
+ ],
+ "rightHandle": [
+ 1.4523404439290364,
+ 1.0
+ ]
+ },
+ {
+ "coords": [
+ 1.8333333333333333,
+ 0.5
+ ],
+ "leftHandle": [
+ 1.5893262227376301,
+ 0.5
+ ],
+ "rightHandle": [
+ 2.0773404439290366,
+ 0.5
+ ]
+ },
+ {
+ "coords": [
+ 2.4583333333333335,
+ 1.0
+ ],
+ "leftHandle": [
+ 2.2143262227376304,
+ 1.0
+ ],
+ "rightHandle": [
+ 2.7023404439290366,
+ 1.0
+ ]
+ }
+ ]
+ }
+ ],
+ "channelName": "Scale"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file