/** * Types for animation scene structure */ /** * 3D vector representing position, rotation, or scale */ export type Vector3 = [number, number, number]; /** * Material definition for scene objects */ export interface Material { type: 'standard' | 'line' | 'phong' | 'lambert'; color?: string; linewidth?: number; opacity?: number; transparent?: boolean; } /** * Base scene object */ export interface SceneObject { id: string; type: 'Mesh' | 'Line' | 'Points' | 'Group'; name: string; position?: Vector3; rotation?: Vector3; scale?: Vector3; material?: Material; } /** * Mesh object with geometry */ export interface MeshObject extends SceneObject { type: 'Mesh'; geometry?: { type: string; parameters?: Record; }; } /** * Line object with vertices */ export interface LineObject extends SceneObject { type: 'Line'; vertices: number[]; } /** * Camera configuration */ export interface Camera { position: Vector3; target: Vector3; fov?: number; near?: number; far?: number; } /** * Scene definition */ export interface Scene { objects: (MeshObject | LineObject | SceneObject)[]; camera: Camera; lights?: Array<{ type: string; position?: Vector3; intensity?: number; color?: string; }>; } /** * Animation keyframe */ export interface Keyframe { time: number; value: any; easing?: string; tangentIn?: number; tangentOut?: number; } /** * Animation action */ export interface Action { id: string; name: string; type: 'position' | 'rotation' | 'scale' | 'color' | 'opacity' | 'custom'; target: string; property: string; keyframes?: Keyframe[]; from?: any; to?: any; duration: number; enabled: boolean; loop?: 'none' | 'repeat' | 'pingpong'; loopCount?: number; easing?: string; } /** * Node definition for parametric computation */ export interface Node { id: string; type: string; inputs?: Record; outputs?: Record; parameters?: Record; } /** * Complete animation document structure */ export interface AnimationDocument { scene: Scene; actions: Action[]; nodes?: Record; timeline?: { duration: number; fps: number; currentTime?: number; }; metadata?: { version: string; created: string; author?: string; description?: string; }; } /** * Property accessor for array slicing * Supports syntax like "vertices[0:3]" or "colors[6:9]" */ export interface PropertyAccessor { path: string; indices?: { start: number; end: number; }; } /** * Helper function to parse property accessor strings */ export declare function parsePropertyAccessor(property: string): PropertyAccessor; /** * Helper function to apply value to array slice */ export declare function applyToArraySlice(array: number[], start: number, end: number, values: number[]): number[]; /** * Interpolation helper for different value types */ export declare function interpolateValue(from: any, to: any, t: number, easing?: (t: number) => number): any;