import * as THREE from 'three/webgpu'; export type GLTFCurveCoordinate = readonly [x: number, y: number, z: number]; export interface GLTFBezierPoint { co: GLTFCurveCoordinate; handle_left: GLTFCurveCoordinate; handle_right: GLTFCurveCoordinate; } export interface GLTFNURBSPoint { co: GLTFCurveCoordinate; w?: number; } export interface GLTFPolyPoint { co: GLTFCurveCoordinate; } interface GLTFCurveSplineBase { resolution_u: number; use_cyclic_u: boolean; } export interface GLTFBezierSpline extends GLTFCurveSplineBase { type: 'BEZIER'; points: GLTFBezierPoint[]; } export interface GLTFNURBSSpline extends GLTFCurveSplineBase { type: 'NURBS'; order_u: number; knots?: number[]; points: GLTFNURBSPoint[]; } export interface GLTFPolySpline extends GLTFCurveSplineBase { type: 'POLY'; points: GLTFPolyPoint[]; } export type GLTFCurveSpline = GLTFBezierSpline | GLTFNURBSSpline | GLTFPolySpline; export interface GLTFCurveData { splines: [GLTFCurveSpline, ...GLTFCurveSpline[]]; } export interface GLTFCurveNodeExtensions { UTSUBO_curve_extension?: GLTFCurveData; } export interface GLTFCurveNodeDefinition { name?: string; children?: number[]; extensions?: GLTFCurveNodeExtensions; matrix?: THREE.Matrix4Tuple; translation?: THREE.Vector3Tuple; rotation?: THREE.QuaternionTuple; scale?: THREE.Vector3Tuple; } export interface GLTFCurveNodeWithData extends GLTFCurveNodeDefinition { extensions: GLTFCurveNodeExtensions & { UTSUBO_curve_extension: GLTFCurveData; }; } export interface GLTFCurveAssociation { nodes?: number; } export interface GLTFCurveAssociationStore { has(object: THREE.Object3D): boolean; set(object: THREE.Object3D, association: GLTFCurveAssociation): unknown; get(object: THREE.Object3D): GLTFCurveAssociation | undefined; } export interface GLTFCurveParser { json: { nodes?: GLTFCurveNodeDefinition[]; }; associations: GLTFCurveAssociationStore; getDependencies(type: 'node'): Promise; } export interface GLTFCurveResult { scene: Pick; } export type GLTFCurveObject = THREE.Line; declare class GLTFCurveExtension { readonly parser: GLTFCurveParser; readonly name = "UTSUBO_curve_extension"; constructor(parser: GLTFCurveParser); /** The loader ignores the fulfillment value; direct callers historically receive created curves. */ afterRoot(result: GLTFCurveResult): Promise | null; /** Compatibility overload for Three.js' narrower `GLTFLoaderPlugin.afterRoot` contract. */ afterRoot(result: GLTFCurveResult): Promise | null; createCurves(nodeDefs: GLTFCurveNodeDefinition[], result: GLTFCurveResult, loadedNodes: THREE.Object3D[]): Promise; private hasCurveExtension; createCurve(nodeDef: GLTFCurveNodeWithData, result: GLTFCurveResult, nodeIndex: number, loadedNode: THREE.Object3D | undefined): Promise; convertBlenderToThreeCoordinates(coord: GLTFCurveCoordinate): THREE.Vector3; applyNodeTransform(object: THREE.Object3D, nodeDef: GLTFCurveNodeDefinition): void; replaceCurveInScene(result: GLTFCurveResult, curveObject: GLTFCurveObject, originalNode: THREE.Object3D | undefined): void; createNURBSCurvePath(nurbsData: GLTFNURBSSpline): THREE.CurvePath; generateKnots(numPoints: number, degree: number, cyclic: boolean): number[]; } export { GLTFCurveExtension };