Simplio3D

Animations

Define looping animations applied to 3D objects for presentations. Supports 6 animation types with configurable speed, amplitude, easing, and loop modes.

Animation Types

move — Linear translation along an axis
rotation — Continuous rotation around an axis
float — Gentle floating motion (bobbing)
scale-pulse — Rhythmic scale breathing effect
swing — Pendulum-like swinging motion
orbit — Circular orbit around a center point

List Animation Blocks

GET/projects/:id/animation-blocks
const response = await fetch(BASE_URL + '/projects/proj_123/animation-blocks', {
  headers: { 'Authorization': 'Bearer ' + accessToken }
});

const data = await response.json();
// {
//   "success": true,
//   "blocks": [
//     {
//       "id": "anim_1",
//       "type": "rotation",
//       "name": "Turntable",
//       "enabled": true,
//       "targetObjectId": "all",
//       "targetPartNames": [],
//       "axis": "y",
//       "speed": 0.2,
//       "amplitude": 360,
//       "easing": "linear",
//       "loopMode": "loop",
//       "delay": 0
//     },
//     {
//       "id": "anim_2",
//       "type": "float",
//       "name": "Hover Effect",
//       "enabled": true,
//       "targetPartNames": ["product_body"],
//       "axis": "y",
//       "speed": 0.4,
//       "amplitude": 0.3,
//       "easing": "ease-in-out",
//       "loopMode": "ping-pong",
//       "delay": 0.5
//     }
//   ]
// }

Create Animation Block

POST/projects/:id/animation-blocks
// Create an orbit animation for a satellite object
const response = await fetch(BASE_URL + '/projects/proj_123/animation-blocks', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    type: 'orbit',
    name: 'Orbiting Camera Target',
    targetPartNames: ['highlight_ring'],
    axis: 'y',
    speed: 0.15,
    amplitude: 1,
    easing: 'linear',
    loopMode: 'loop',
    orbitRadius: 2.5,
    orbitCenter: [0, 0, 0],
    orbitPlane: 'xz'
  })
});

Update Animation Block

PUT/projects/:id/animation-blocks/:blockId
const response = await fetch(BASE_URL + '/projects/proj_123/animation-blocks/anim_1', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    speed: 0.1,
    enabled: false
  })
});

Delete Animation Block

DELETE/projects/:id/animation-blocks/:blockId
const response = await fetch(BASE_URL + '/projects/proj_123/animation-blocks/anim_2', {
  method: 'DELETE',
  headers: { 'Authorization': 'Bearer ' + accessToken }
});

Continue reading