import type { PickingController } from '../picking/PickingController';
import type { Models } from '../procoregl/Models';
import type { SnapType } from './MeasureToolUtils';
import type { ViewerRenderer } from '../procoregl/ViewerRenderer';
import type { RenderController } from '../controllers/RenderController';
import { Vector3 } from '../types/Math';
export type WorldIntersectionSnapResult = {
    intersection: Vector3;
    snapType: SnapType;
    snapPosition: Vector3;
    snapEdge: {
        start: Vector3;
        end: Vector3;
    } | null;
    boundaryEdges: {
        start: Vector3;
        end: Vector3;
    }[];
    meshnodeIndex: number;
    cursorRotation: Vector3;
    snapScreenPosition: Vector3;
    relatedMeshnodeIndex?: number | null;
};
export declare class PointToPointController {
    private readonly pickingController;
    private readonly models;
    private readonly camera;
    private currentHoverMeshnodeIndex;
    private readonly meshTopologyCache;
    private _enabled;
    private readonly globalOffset;
    private prevLastWorldIntersectionSnapResult;
    private lastWorldIntersectionSnapResult;
    private readonly debugGui;
    private readonly viewerRenderer;
    private renderController;
    constructor(params: {
        pickingController: PickingController;
        renderController: RenderController;
        models: Models;
        camera: THREE.PerspectiveCamera;
        globalOffset: THREE.Vector3;
        viewerRenderer: ViewerRenderer;
    });
    get enabled(): boolean;
    set enabled(value: boolean);
    handleMouseClick(): void;
    handleMouseMove(event: MouseEvent): void;
    handleWheel(event: WheelEvent): Promise<void>;
    private computeIntersectionSnapResult;
    private getWorldIntersectionSnapResult;
    private publishIntersectionSnapResult;
    private getMeshTopology;
    private meshnodeTooComplex;
    private determineHoverState;
}
