NURBS Sharp
NURBS Sharp is a small, dependency-free NURBS (Non-Uniform Rational B-Spline) library for .NET. It provides data structures, evaluators, topology operators, I/O and tessellation utilities implemented using only the .NET standard library.
Table of Contents
- Features
- Limitations
- Installation
- Quick Start
- Examples
- Documentation
- Development
- Contributing
- Acknowledgements
- License
Features
- Generation and evaluation of NURBS curves, surfaces and volumes
- Topology operators: degree elevation/reduction, knot insertion/removal/refinement, join/split, parameter direction reversal, surface transpose (U/V exchange), sub-curve/sub-surface extraction (rectangular parameter ranges), linear reparameterization (parameter domain remapping)
- Generation capabilities: interpolation, least squares approximation, primitive shapes
- Analysis utilities: curve length, arc-length parameterization/sampling, closest points, curvature, normals and curve continuity
- Parameter domain queries for curves and surfaces (
NurbsCurve.Domain,NurbsSurface.DomainU/DomainV) - Transformations for curves, surfaces and volumes: translation, rotation, scaling and transformation matrices
- Intersection calculations: Ray-Box, Ray-Mesh, Ray-Surface, Curve-Curve, Curve-Surface, Surface-Surface, Surface-Plane, with reusable prepared surface snapshots for repeated queries
- IO helpers:
- Mesh only: OBJ/STL export, simple BMP export
- NURBS only: IGES import/export (Point, Curve, Surface entities supported)
- Tessellation utilities for curves and surfaces
- Targets: .NET 8 and .NET Standard 2.1
Limitations
- Viewer: This library does not include a 3D model viewer. To inspect model details, a 3D rendering library or file export is required.
- NURBS Surface:
TrimSurfaceis not yet implemented. - Knot Vector: Currently, only "Clamped" knot vectors are supported (multiplicity = degree + 1).
- IGES Support:
- Import: Only supports Entity Type 126 (Rational B-spline curve), and 128 (Rational B-spline surface).
- Export: Only supports Point and NURBS entities. Mesh export is not supported.
- Mesh Export (OBJ/STL): Only supports Mesh objects. Direct export from NURBS is not supported (tessellation required).
- Intersection Calculations:
- The current state may be unstable due to its dependence on initial conditions.
- Surface-plane intersection returns only transversal intersections as curves; isolated tangent contacts and coincident regions are not returned as curves.
Installation
Install via NuGet:
dotnet add package NurbsSharp
Or add the package reference to your project file.
Quick Start
Basic usage (C#):
using System;
using NurbsSharp.Core;
using NurbsSharp.Geometry;
// Create a NURBS surface and evaluate a point
int degreeU = 1, degreeV = 1;
var kvU = new KnotVector(new[] { 0.0, 0.0, 1.0, 1.0 }, degreeU);
var kvV = new KnotVector(new[] { 0.0, 0.0, 1.0, 1.0 }, degreeV);
// Build control points (u x v grid)
var controlPoints = new[] {
new[] {
new ControlPoint(0.0, 0.0, 0.0, 1.0),
new ControlPoint(0.0, 1.0, 0.0, 1.0)
},
new[] {
new ControlPoint(1.0, 0.0, 0.0, 1.0),
new ControlPoint(1.0, 1.0, 1.0, 1.0)
}
};
var surface = new NurbsSurface(degreeU, degreeV, kvU, kvV, controlPoints);
var point = surface.GetPos(0.5, 0.5);
Console.WriteLine(point);
Examples
tessellate a surface and export to STL:
int divideN = 20;
var mesh = SurfaceTessellator.Tessellate(surface, divideN, divideN);
using (var fs = new FileStream("test_output.stl", FileMode.Create, FileAccess.Write))
{
await STLExporter.ExportAsync(mesh, fs);
}
Examples Project: https://github.com/nyarurato/NurbsSharpSample
Github Wiki: https://github.com/nyarurato/NurbsSharp/wiki/Samples
Documentation
API Docs: https://nyarurato.github.io/NurbsSharp/
Development
Clone the repo and build locally:
dotnet restore
dotnet build -c Debug
Run unit tests:
dotnet test -c Debug
Project layout highlights:
src/Core— numeric helpers and core types (BoundingBox,Ray,KnotVector,LinAlg, etc.)src/Geometry—NurbsCurve,NurbsSurface,NurbsVolume,Mesh, etc.src/Evaluation— evaluators (curve/surface/volume)src/Operation— topology operators (degree, knot, join, split, curve/surface operators)src/Generation— interpolation, least squares approximation, primitive shape generationsrc/Intersection— intersection calculations (Ray-Box, Ray-Mesh, Curve-Curve, Curve-Surface, BVH structures)src/IO—OBJExporter,STLExporter,BMPExporter, IGES import/exportsrc/Tesselation— tessellation (curve/surface)src/Analysis- analyzers (curvature, curve length, etc.)
Contributing
Contributions are welcome. Typical workflow:
- Fork the repository
- Create a branch with a descriptive name
- Add tests for new behavior where appropriate
- Open a pull request against
master
Acknowledgements
This project was significantly influenced by Kodatuno and geomdl (NURBS-Python) during its early stages.
The design and algorithms of these projects provided substantial inspiration for the data structures and evaluation logic design of this library.
We extend our gratitude to the maintainers and contributors of both projects.
- Kodatuno: http://www-mm.hm.t.kanazawa-u.ac.jp/research/kodatuno/
- geomdl (NURBS-Python): https://github.com/orbingol/NURBS-Python
License
MIT License