import { Box3, Camera, Object3D, Plane, Raycaster, Vector2, Vector3, Vector4, type Intersection } from 'three';
export declare enum MeasurementState {
    HIDDEN = 0,
    DANGLING_START = 1,
    DANGLING_END = 2,
    COMPLETE = 3
}
export declare abstract class Measurement extends Object3D {
    startPoint: Vector3;
    endPoint: Vector3;
    startNormal: Vector3;
    flipStartNormal: boolean;
    endNormal: Vector3;
    flipEndNormal: boolean;
    startLineLength: number;
    endLineLength: number;
    value: number;
    units: string;
    precision: number;
    protected static vec3Buff0: Vector3;
    protected static vec3Buff1: Vector3;
    protected static vec3Buff2: Vector3;
    protected static vec3Buff3: Vector3;
    protected static vec3Buff4: Vector3;
    protected static vec4Buff0: Vector4;
    protected static vec4Buff1: Vector4;
    protected static vec4Buff2: Vector4;
    protected static vec2Buff0: Vector2;
    protected _state: MeasurementState;
    protected renderingCamera: Camera | null;
    protected renderingSize: Vector2;
    set state(value: MeasurementState);
    get state(): MeasurementState;
    abstract set isVisible(value: boolean);
    get bounds(): Box3;
    frameUpdate(camera: Camera | null, size: Vector2, _bounds: Box3): void;
    abstract update(): Promise<void>;
    abstract raycast(_raycaster: Raycaster, _intersects: Array<Intersection>): void;
    abstract highlight(_value: boolean): void;
    abstract updateClippingPlanes(_planes: Plane[]): void;
}
