import { Group, Vector2, Vector3 } from "three";
import type { ViralViewerApi } from "../../../viral-viewer-api";
export type AreaDrawMode = "polygon" | "rectangle";
export interface AreaPlacementResult {
    points: Vector2[];
    positions: Vector3[];
    spacing: number;
    groupId: string;
    drawMode: AreaDrawMode;
}
export declare class AreaPlacementTool {
    private _viralViewerApi;
    private _editorGroup;
    active: boolean;
    spacing: number;
    drawMode: AreaDrawMode;
    onFinish: ((result: AreaPlacementResult) => void) | null;
    private _catalogItemId;
    private _terrainMesh;
    private _points;
    private _previewGroup;
    private _previewLine;
    private _previewFill;
    private _pointMarkers;
    private _previewObjects;
    private _cursorMarker;
    private _nextGroupId;
    private _onMouseDown;
    private _onMouseMove;
    private _onKeyDown;
    constructor(_viralViewerApi: ViralViewerApi, _editorGroup: Group);
    start(catalogItemId: string, drawMode?: AreaDrawMode, spacing?: number): Promise<void>;
    startWithProfile(catalogItemId: string, points2D: Vector2[], spacing: number): Promise<void>;
    cancel(): void;
    finish(): AreaPlacementResult | null;
    setSpacing(spacing: number): void;
    private _finishRectangle;
    private _finishPolygon;
    private _distributeInPolygon;
    private _resolveTerrainY;
    private _pointInPolygon;
    private _bindListeners;
    private _bindRectListeners;
    private _bindPolygonListeners;
    private _unbindListeners;
    private _updatePreview;
    private _drawRectPreview;
    private _drawPolygonPreview;
    private _showPreviewObjects;
    private _updateCursor;
    private _clearPreview;
    private _clearAll;
}
