import { Bounds3D, Axis3DConfig } from './types'; /** Axis label info for text overlay rendering */ export interface AxisLabel3D { text: string; worldPosition: [number, number, number]; axis: 'x' | 'y' | 'z' | 'title'; color: [number, number, number]; } /** Full axis configuration with defaults applied */ export interface Axes3DOptions { /** X-axis configuration */ xAxis?: Axis3DConfig & { label?: string; tickFormat?: (v: number) => string; }; /** Y-axis configuration */ yAxis?: Axis3DConfig & { label?: string; tickFormat?: (v: number) => string; }; /** Z-axis configuration */ zAxis?: Axis3DConfig & { label?: string; tickFormat?: (v: number) => string; }; /** Show axis lines */ showAxes?: boolean; /** Show wall grids */ showWallGrids?: boolean; /** Show floor grid (XZ plane) */ showFloorGrid?: boolean; /** Grid line color */ gridColor?: [number, number, number]; /** Grid line opacity */ gridOpacity?: number; /** Wall grid opacity (slightly more transparent) */ wallGridOpacity?: number; /** Number of ticks per axis */ tickCount?: number; /** Axis line width */ lineWidth?: number; /** Box wireframe color */ boxColor?: [number, number, number]; /** Box wireframe opacity */ boxOpacity?: number; } export declare class Axes3D { private gl; private axisVAO; private axisPositionBuffer; private axisColorBuffer; private gridVAO; private gridPositionBuffer; private gridColorBuffer; private boxVAO; private boxPositionBuffer; private boxColorBuffer; private lineProgram; private lineUniforms; private axisVertexCount; private gridVertexCount; private boxVertexCount; private bounds; private labels; private options; constructor(gl: WebGL2RenderingContext, options?: Axes3DOptions); private initLineShader; private initBuffers; /** * Update axes geometry based on data bounds */ updateBounds(bounds: Bounds3D): void; private buildBoxGeometry; private buildGridGeometry; private buildAxisGeometry; private buildLabels; /** * Render axes and grid */ render(viewProjectionMatrix: Float32Array): void; private renderLines; /** * Get labels for 2D text overlay rendering. * Returns world positions that need to be projected to screen coordinates. */ getLabels(): AxisLabel3D[]; /** * Project a 3D world position to 2D screen coordinates. */ projectToScreen(worldPos: [number, number, number], viewProjectionMatrix: Float32Array, canvasWidth: number, canvasHeight: number): { x: number; y: number; visible: boolean; }; /** * Update options */ setOptions(options: Partial): void; /** * Cleanup resources */ destroy(): void; }