import { Vector3, Line3, Box3 } from 'three'; export interface SelectionToolResult { changed: boolean; } declare abstract class SelectionBase { dragging: boolean; prevX: number; prevY: number; handlePointerDown(_e: PointerEvent): void; handlePointerUp(): void; handlePointerMove(_e: PointerEvent): SelectionToolResult; abstract get points(): number[]; static normalizePoint(element: HTMLElement, x: number, y: number): [number, number]; } export declare class LassoSelection extends SelectionBase { private lassoPoints; handlePointerDown(e: PointerEvent): void; handlePointerMove(e: PointerEvent): SelectionToolResult; get points(): number[]; } export declare class BoxSelection extends SelectionBase { private startX; private startY; private currentX; private currentY; handlePointerDown(e: PointerEvent): void; handlePointerMove(e: PointerEvent): SelectionToolResult; get points(): number[]; } export declare function convertTripletsToPoints(array: number[]): Vector3[]; export declare function connectPointsWithLines(points: Vector3[], target?: Line3[] | null): Line3[]; /** * Point-in-polygon test using ray casting to the right (+X direction). * Counts how many polygon segments the horizontal ray from `point` crosses. */ export declare function isPointInsidePolygon(point: Vector3, segments: Line3[]): boolean; /** * Tests whether two 2D line segments cross each other. */ export declare function lineCrossesLine(a: Line3, b: Line3): boolean; /** * Computes the 2D convex hull of a set of points (Andrew's monotone chain). * Only uses x, y components. */ export declare function getConvexHull(points: Vector3[]): Vector3[]; export declare function extractBoxVertices(box: Box3, target: Vector3[]): Vector3[]; export {};