import { type Intersection, type Object3D, type Plane, type Vector3 } from "three";
import type { ViewerModelRef } from "../types";
export declare const CLIPPING_PLANE_EPSILON = 0.000001;
export type CameraClippingSource = {
    getActive: () => boolean;
    getPlanes: () => Plane[];
};
export type CameraIntersectionOptions = {
    event?: MouseEvent | PointerEvent;
    filter?: (intersection: Intersection<Object3D>) => boolean;
    firstHitOnly?: boolean;
    object?: Object3D | Object3D[] | null;
    recursive?: boolean;
    respectClipping?: boolean;
};
export type ViewerCameraGetIntersection = {
    (first: true): Intersection<Object3D> | null;
    (first?: false): Intersection<Object3D>[];
};
export type CameraUtilsApi = {
    getActiveClippingPlanes: () => Plane[];
    getIntersection: {
        (first: true, options?: CameraIntersectionOptions): Intersection<Object3D> | null;
        (first?: false, options?: CameraIntersectionOptions): Intersection<Object3D>[];
    };
    setClippingSource: (source: CameraClippingSource | null) => void;
};
export declare function isPointVisibleByClippingPlanes(point: Vector3, planes: Plane[]): boolean;
export default function useCameraUtils(modelRef: ViewerModelRef): CameraUtilsApi;
