Table of Contents

NURBS Sharp

NuGet Version Build Status

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.

Japanese Readme

test

Table of Contents

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: TrimSurface is 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 generation
  • src/Intersection — intersection calculations (Ray-Box, Ray-Mesh, Curve-Curve, Curve-Surface, BVH structures)
  • src/IO — OBJExporter, STLExporter, BMPExporter, IGES import/export
  • src/Tesselation — tessellation (curve/surface)
  • src/Analysis - analyzers (curvature, curve length, etc.)

Contributing

Contributions are welcome. Typical workflow:

  1. Fork the repository
  2. Create a branch with a descriptive name
  3. Add tests for new behavior where appropriate
  4. 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.

License

MIT License