UNPKG

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
/** * 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;