import * as THREE from 'three'; import type { PointCloudPlacement } from './pointCloudPlacement'; import type { PointCloudSource } from './pointCloudSource'; export interface PointCloudOctreeLike extends THREE.Object3D { dispose?: () => void; showBoundingBox?: boolean; updateBoundingBoxes?: () => void; } /** The rendering engine behind a cloud, injected so the registry can be tested without WebGL. */ export interface PointCloudEngine { pointBudget: number; load(fileName: string, baseUrl: string): Promise; update(clouds: PointCloudOctreeLike[], camera: THREE.Camera, renderer: unknown): { numVisiblePoints: number; streaming: boolean; }; pick(clouds: PointCloudOctreeLike[], camera: THREE.Camera, renderer: unknown, ray: THREE.Ray, pickWindowSize: number): THREE.Vector3 | null; dispose(): void; } export interface LoadedPointCloud { id: string; name?: string; root: THREE.Group; octree: PointCloudOctreeLike; placement: PointCloudPlacement; } export declare function pointCloudRootName(id: string): string; export declare class PointCloudRegistry { private readonly scene; private readonly engine; private readonly source; private readonly clouds; private readonly pending; constructor(deps: { scene: THREE.Object3D; engine: PointCloudEngine; source: PointCloudSource; }); add(id: string, placement?: PointCloudPlacement): Promise; private loadCloud; list(): LoadedPointCloud[]; get(id: string): LoadedPointCloud | undefined; setPlacement(id: string, placement: PointCloudPlacement): void; setVisible(id: string, visible: boolean): void; remove(id: string): void; dispose(): void; private applyPlacement; } //# sourceMappingURL=pointCloudRegistry.d.ts.map