react-three-nurbs
Version:
A React component library for NURBS (Non-Uniform Rational B-Spline) curves, surfaces, and solids in Three.js. Built with React Three Fiber, zero external NURBS dependencies — all math implemented from scratch. Boolean operations powered by OpenCASCADE WAS
55 lines (54 loc) • 2.53 kB
TypeScript
/**
* Geometric construction: circles, arcs, revolved/extruded/swept surfaces.
* Implements algorithms from "The NURBS Book" Chapters 7-8.
*/
import type { CurveData, SurfaceData, SolidData } from "./types";
/**
* Create a NURBS arc (rational quadratic Bézier segments).
* Algorithm: split arc into segments of ≤90°, each a rational quadratic
* with weight = cos(halfAngle).
*/
export declare function createArc(center: number[], xaxis: number[], yaxis: number[], radius: number, startAngle: number, endAngle: number): CurveData;
/**
* Create a full NURBS circle.
*/
export declare function createCircle(center: number[], xaxis: number[], yaxis: number[], radius: number): CurveData;
/**
* Create a NURBS elliptical arc.
* xaxis and yaxis define the semi-axes (their lengths are the radii).
*/
export declare function createEllipseArc(center: number[], xaxis: number[], yaxis: number[], startAngle: number, endAngle: number): CurveData;
/**
* Create a full NURBS ellipse.
*/
export declare function createEllipse(center: number[], xaxis: number[], yaxis: number[]): CurveData;
/**
* Create a cylindrical surface.
*/
export declare function createCylindricalSurface(axis: number[], xaxis: number[], base: number[], height: number, radius: number): SurfaceData;
/**
* Create an extruded surface by translating a profile curve along a direction.
* Degree 1 in the extrusion direction.
*/
export declare function createExtrudedSurface(profile: CurveData, direction: number[]): SurfaceData;
/**
* Create a surface of revolution by rotating a profile curve around an axis.
*/
export declare function createRevolvedSurface(profile: CurveData, center: number[], axis: number[], angle: number): SurfaceData;
/**
* Create a swept surface by translating a profile along a rail.
* Simple translational sweep: at each rail point, place the profile.
*/
export declare function createSweptSurface(profile: CurveData, rail: CurveData): SurfaceData;
/**
* Create a box solid with 6 planar faces.
*/
export declare function createBoxSolid(dx: number, dy: number, dz: number, origin?: [number, number, number]): SolidData;
/**
* Create a cylinder solid: 1 cylindrical face + 2 circular disk caps.
*/
export declare function createCylinderSolid(radius: number, height: number, axis?: [number, number, number], origin?: [number, number, number]): SolidData;
/**
* Create a sphere solid: 1 revolved surface.
*/
export declare function createSphereSolid(radius: number, center?: [number, number, number]): SolidData;