import { Vector3 } from "three";
import { NurbsSurface } from "../core";
export interface UseNurbsSurfaceOptions {
    controlPoints: number[][][];
    weights: number[][];
    degreeU: number;
    degreeV: number;
    knotsU?: number[];
    knotsV?: number[];
    resolutionU?: number;
    resolutionV?: number;
}
export interface SurfaceGeometry {
    vertices: Float32Array;
    normals: Float32Array;
    uvs: Float32Array;
    indices: Uint32Array;
}
export interface UseNurbsSurfaceResult {
    surface: NurbsSurface | null;
    geometry: SurfaceGeometry | null;
    point: (u: number, v: number) => Vector3 | null;
    normal: (u: number, v: number) => Vector3 | null;
    closestParam: (point: Vector3) => [number, number] | null;
}
export declare function useNurbsSurface({ controlPoints, weights, degreeU, degreeV, knotsU, knotsV, resolutionU, resolutionV, }: UseNurbsSurfaceOptions): UseNurbsSurfaceResult;
