import { Viewer } from '../../viewer';
import * as THREE from 'three';
import { Marker } from './gizmoMarker';
/**
 * API for adding and managing sprite markers in the scene.
 * Uses THREE.InstancedMesh for performance.
 */
export declare class GizmoMarkers {
    private _viewer;
    private _markers;
    private _mesh;
    private _reusableMatrix;
    /**
     * Constructs the marker manager and sets up an initial instanced mesh.
     * @param viewer - The rendering context this marker system belongs to.
     */
    constructor(viewer: Viewer);
    /**
     * Returns the marker at the given index.
     * @param index - The marker index.
     * @returns The Marker instance or undefined.
     */
    getMarkerFromIndex(index: number): Marker | undefined;
    /**
     * Creates a new instanced mesh with given capacity, optionally reusing geometry/material.
     * @param previous - Optional mesh to reuse properties from.
     * @param capacity - Number of instances the mesh should support.
     * @returns A new THREE.InstancedMesh.
     */
    private createMesh;
    /**
     * Doubles the mesh capacity and copies over all instance data and marker bindings.
     */
    private resizeMesh;
    /**
     * Adds a sprite marker at the specified position.
     * Resizes mesh if capacity is reached.
     * @param position - The world position to add the marker at.
     * @returns The newly created Marker.
     */
    add(position: THREE.Vector3): Marker;
    /**
     * Removes the specified marker from the scene.
     * Uses swap-and-pop to maintain dense storage.
     * @param marker - The marker to remove.
     */
    remove(marker: Marker): void;
    /**
     * Removes all markers from the scene and resets mesh count.
     */
    clear(): void;
}
