import { OrbitCamera, OrbitCameraOptions } from './camera/OrbitCamera'; import { OrbitControllerOptions } from './controls/OrbitController'; import { Axes3DOptions } from './Axes3D'; import { Tooltip3DOptions } from './Tooltip3D'; import { Renderer3DOptions, RenderStats3D, Renderer3DEventCallback } from './types'; export interface Line3DData { /** X coordinates */ x: Float32Array; /** Y coordinates */ y: Float32Array; /** Z coordinates */ z: Float32Array; /** Color per vertex (optional, RGB) */ colors?: Float32Array; /** Single line color [r, g, b] (used if colors not provided) */ color?: [number, number, number]; } export interface Line3DRendererOptions extends Renderer3DOptions { camera?: OrbitCameraOptions; controls?: OrbitControllerOptions; axes?: Axes3DOptions; showAxes?: boolean; /** Line thickness in world units (default: 0.05) */ lineWidth?: number; /** Number of segments around the tube (default: 8) */ tubeSides?: number; /** Enable tooltips (default: true) */ enableTooltip?: boolean; tooltip?: Tooltip3DOptions; } export declare class Line3DRenderer { private canvas; private gl; private dpr; private programs; private camera; private controller; private axes; private vao; private positionBuffer; private normalBuffer; private colorBuffer; private indexBuffer; private indexCount; private backgroundColor; private showAxes; private lineWidth; private tubeSides; private lines; private bounds; private animationFrameId; private needsRender; private eventListeners; private tooltip; private enableTooltip; private lastHitIndex; private boundHandleMouseMove?; private boundHandleMouseLeave?; private lastFrameTime; private frameCount; private fps; private lastFpsUpdate; constructor(options: Line3DRendererOptions); private handleMouseMove; private handleMouseLeave; pickAtScreen(screenX: number, screenY: number): { seriesIndex: number; pointIndex: number; distance: number; point: [number, number, number]; } | null; private initBuffers; private handleResize; resize(): void; /** * Set line data (single line or array of lines) */ setData(lines: Line3DData | Line3DData[]): void; /** * Add a single line */ addLine(line: Line3DData): void; /** * Clear all lines */ clearLines(): void; private buildTubeGeometry; private calculateBounds; /** * Fit camera to show all data */ fitToData(): void; getCanvasSize(): { width: number; height: number; }; /** * Render a single frame */ render(): void; startRenderLoop(): void; stopRenderLoop(): void; getStats(): RenderStats3D; getCamera(): OrbitCamera; getAxisLabels(): import('./Axes3D').AxisLabel3D[]; getViewProjectionMatrix(): Float32Array; projectToScreen(worldPos: [number, number, number]): { x: number; y: number; visible: boolean; }; exportImage(format?: 'png' | 'jpeg' | 'webp', quality?: number, transparent?: boolean): string; on(event: string, callback: Renderer3DEventCallback): void; off(event: string, callback: Renderer3DEventCallback): void; private emitEvent; destroy(): void; }