import SpeckleRenderer from '../../SpeckleRenderer';
import { IViewer } from '../../../IViewer';
import { Plane, Raycaster, Vector3 } from 'three';
import { Measurement } from './Measurement';
import { ExtendedIntersection } from '../../objects/SpeckleRaycaster';
import { Extension } from '../core-extensions/Extension';
import { ICameraProvider } from '../core-extensions/Providers';
export declare enum MeasurementType {
    PERPENDICULAR = 0,
    POINTTOPOINT = 1
}
export interface MeasurementOptions {
    visible: boolean;
    type?: MeasurementType;
    vertexSnap?: boolean;
    units?: string;
    precision?: number;
}
export declare class MeasurementsExtension extends Extension {
    protected cameraProvider: ICameraProvider;
    get inject(): string[];
    protected renderer: SpeckleRenderer;
    protected measurements: Measurement[];
    protected measurement: Measurement;
    protected selectedMeasurement: Measurement;
    protected raycaster: Raycaster;
    protected _options: MeasurementOptions;
    private _frameLock;
    private _enabled;
    private _paused;
    private _sceneHit;
    private pointBuff;
    private normalBuff;
    private screenBuff0;
    private screenBuff1;
    get enabled(): boolean;
    get visible(): boolean;
    set enabled(value: boolean);
    set paused(value: boolean);
    set options(options: MeasurementOptions);
    constructor(viewer: IViewer, cameraProvider: ICameraProvider);
    onLateUpdate(deltaTime: number): void;
    onResize(): void;
    protected onPointerMove(data: any): void;
    protected onPointerClick(data: any): void;
    protected onPointerDoubleClick(data: any): void;
    protected autoLazerMeasure(data: any): void;
    protected startMeasurement(): void;
    protected cancelMeasurement(): void;
    protected finishMeasurement(): void;
    removeMeasurement(): void;
    clearMeasurements(): void;
    protected flashMeasurement(): void;
    protected pickMeasurement(data: any): Measurement;
    protected selectMeasurement(measurement: Measurement, value: boolean): void;
    protected snap(intersection: ExtendedIntersection, outPoint: Vector3, outNormal: Vector3): void;
    protected updateClippingPlanes(planes: Plane[]): void;
    protected applyOptions(): void;
    fromMeasurementData(startPoint: Vector3, endPoint: Vector3): void;
}
