import { ControlVector3, type ControlObject3DLike, type ControlPickMetadata, type Vector3Like } from "./NativeControlTypes";
export interface ThreeCompatPickResult {
    readonly object: ControlObject3DLike;
    readonly distance: number;
    readonly distanceAlongRay: number;
    readonly perpendicularDistance: number;
    readonly point: ControlVector3;
    readonly radius: number;
    readonly metadata?: ControlPickMetadata;
}
export interface PickingOptions {
    readonly near?: number;
    readonly far?: number;
    readonly tolerance?: number;
    readonly includeInvisible?: boolean;
    readonly includeNonRenderableMetadata?: boolean;
    readonly metadata?: (object: ControlObject3DLike) => ControlPickMetadata | undefined;
}
export interface PickingDiagnostics {
    readonly testedObjects: number;
    readonly candidateObjects: number;
    readonly hitCount: number;
    readonly skippedInvisible: number;
    readonly skippedNonPickable: number;
    readonly skippedDisabled: number;
    readonly skippedOutOfRange: number;
    readonly skippedMissedRadius: number;
    readonly nearestMissPerpendicularDistance: number | null;
    readonly nearestHitLabel: string | null;
}
export interface PickingReport {
    readonly hit: ThreeCompatPickResult | null;
    readonly hits: readonly ThreeCompatPickResult[];
    readonly diagnostics: PickingDiagnostics;
}
export declare class Picking {
    pick(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingOptions): ThreeCompatPickResult | null;
    pickAll(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingOptions): readonly ThreeCompatPickResult[];
    report(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingOptions): PickingReport;
}
//# sourceMappingURL=Picking.d.ts.map