import { Ray, Vector3 } from '../loader/babylonjs-import';
import { BimApi } from '../BimApi';
import { Intersection } from '../loader/bim-format-types';
import { TrackCoordinate2D } from '../tools/CoordinateTracker';
export interface LabelUpdateEventData {
    readonly start: Vector3;
    readonly end: Vector3;
    readonly length: number;
}
export interface LabelUpdateHandler {
    (screenTrackCoordinate: TrackCoordinate2D, eventData: LabelUpdateEventData): void;
}
/**
 * Contains methods to add, remove and preview distance measurement.
 */
export declare class MeasureHandler {
    private _bimApi;
    private static _currentId;
    private static readonly _tmpPickOptionMousePosition;
    private static readonly _tmpPickOptionRay;
    private static readonly _tmp;
    private _coordinateTracker;
    private _geomTool;
    private _pointerMoveObserver;
    private _laserToolPreview;
    private _laserToolRootNode;
    private _id;
    /**
     * Constructor
     * @param _bimApi BIM Core API.
     */
    constructor(_bimApi: BimApi);
    /**
     * `true` if {@link activateLaserPreview} has been called.
     * `false` if not called or if either {@link deactivateLaserPreview} or {@link dispose}
     * is called.
     */
    get isLaserPreviewActive(): boolean;
    /**
     * This method adds a visual measurement to viewer from a intersection on the geometry.
     * @param id String for identifying a unique measurement.
     * @param laserOrigin The origin position of the measurement, including surface normal to project ray for finding endpoint of distance to measure.
     * @param labelDistanceFromOrigin Value between 0 and 1 to describe in percent distance from origin along the ray to use as label coordinate anchor. Default 0.75 (75%).
     * @param onLabelUpdate If this optional callback is provided it tracks the position calculated from labelDistanceFromOrigin and tells where the coordinate is in screen space.
     */
    createWallLaser(id: unknown, laserOrigin: Intersection, labelDistanceFromOrigin?: number, onLabelUpdate?: LabelUpdateHandler): Ray | undefined;
    /**
     * Removes a measurement by its ID.
     * @param id of measurement to be removed.
     * @returns `true` if wall laser was removed. ´false´ if it did not exist.
     */
    removeWallLaser(id: unknown): boolean;
    /**
     * Gets the pointer positions on screen and finds where the geometry is hit.
     * From that intersection on the geometry it creates a preview laser measurement.
     * This method can be run for every frame or activated using {@link activateLaserPreview}.
     */
    createOrUpdateLaserPreview(): Ray | undefined;
    /**
     * Creates and updates laser preview on canvas upon mouse move,
     * by means of {@link createOrUpdateLaserPreview}.
     */
    activateLaserPreview(): void;
    /**
     * Deactivates and removes laser preview on canvas upon mouse move.
     */
    deactivateLaserPreview(): void;
    /**
     * Removes all measurements and deactivates laser preview.
     * Also removes coordinate trackers for labels if present.
     */
    clear(): void;
    /**
     * Removes all measurements and deactivates laser preview.
     * Also removes coordinate trackers for labels if present.
     * @deprecated Use {@link clear} instead.
     * The naming convention for this method is incorrect as it does not
     * actually dispose the object but clears it.
     */
    dispose(): void;
}
//# sourceMappingURL=measure-handler.d.ts.map