/**
 * @module viw-webgl-viewer/gizmos/measure
 */
import * as THREE from 'three';
import { InputAction } from '../../raycaster';
import { Viewer } from '../../viewer';
import { MeasureStage } from './measureFlow';
/**
 * Interacts with the measure tool.
 */
export interface IMeasure {
    /**
     * Start point of the current measure or undefined if no active measure.
     */
    get startPoint(): THREE.Vector3 | undefined;
    /**
     * End point of the current measure or undefined if no active measure.
     */
    get endPoint(): THREE.Vector3 | undefined;
    /**
     * Vector from start to end of the current measure or undefined if no active measure.
     */
    get measurement(): THREE.Vector3 | undefined;
    /**
     * Stage of the current measure or undefined if no active measure.
     */
    get stage(): MeasureStage | undefined;
    /**
     * Starts a new measure flow where the two next click are overriden.
     * Currently running flow if any will be aborted.
     * Promise is resolved if flow is succesfully completed, rejected otherwise.
     * Do not override viewer.onMouseClick while this flow is active.
     */
    start(onProgress?: () => void): Promise<void>;
    /**
     * Aborts the current measure flow, fails the related promise.
     */
    abort(): void;
    /**
     * Clears meshes.
     */
    clear(): void;
}
/**
 * Manages measure flow and gizmos
 */
export declare class Measure implements IMeasure {
    private _viewer;
    private _meshes;
    private _startPos;
    private _endPos;
    private _measurement;
    private _flow;
    private _previousScheme;
    /**
     * Start point of the current measure or undefined if no active measure.
     */
    get startPoint(): THREE.Vector3;
    /**
     * End point of the current measure or undefined if no active measure.
     */
    get endPoint(): THREE.Vector3;
    /**
     * Vector from start to end of the current measure or undefined if no active measure.
     */
    get measurement(): THREE.Vector3;
    /**
     * Stage of the current measure or undefined if no active measure.
     */
    get stage(): MeasureStage | undefined;
    constructor(viewer: Viewer);
    /**
     * Starts a new measure flow where the two next click are overriden.
     * Currently running flow if any will be aborted.
     * Promise is resolved if flow is succesfully completed, rejected otherwise.
     * Do not override viewer.onMouseClick while this flow is active.
     */
    start(onProgress?: () => void): Promise<void>;
    /**
     * Should be private.
     */
    onFirstClick(action: InputAction): void;
    /**
     * Should be private.
     */
    onMouseMove(): void;
    /**
     * Should be private.
     */
    onMouseIdle(action: InputAction): void;
    /**
     * Should be private.
     */
    onSecondClick(action: InputAction): boolean;
    /**
     * Aborts the current measure flow, fails the related promise.
     */
    abort(): void;
    /**
     * Clears meshes.
     */
    clear(): void;
}
