libnurbs - a C++ Non-Uniform Rational B-Splines Library

Non-Uniform Rational B-Splines (NURBS) curves and surface are very general mathematical surfaces widely used for representing complex three dimensional shapes in computer graphics.

The goal of libnurbs is to provide a clean, robust and powerful library with the ability to define, manipulate, and analyze NURBS curves and surfaces. We will be building off of the foundation provided by the openNURBS library, implementing functionality missing from that library and making changes as needed. The goal of the openNURBS effort is increased interoperabilty between various CAD systems, so they have no incentive to develop or release a more full-featured library (that's Rhino, their commercial platform) - hence the need for this project.

This project is distinct from the old NURBS++ project previously developed on this page - both the people and the code are different. The previous web content is available here and previous NURBS++ releases are still available from the files section of the project website. The license of the original NURBS++ code has not changed - it remains LGPL. The SVN repository contains the NURBS++ codebase (including some fixes for more modern compilers). The intent of the new libnurbs effort (at least for now) is to use the Modified BSD license, and thus the NURBS++ code won't be directly usable. (If the decision is made to switch to LGPL then merging in code becomes possible.) New development is being done in the Git repository.

Broad Project Goals

The overall plan is fairly vague at this stage, but the immediate steps are clear (development takes place on the project website):

Related projects

There are actually a number of other open source projects pertaining to NURBS, some of them quiet impressive. Most are incompatibly licensed for the purposes of libnurbs, but they deserve mention as possible resources for "end users" not constrained by licensing:

There are a number of other significant projects (libNurbana in Blender and Varkon, plus a number of other older/smaller efforts) - I'll try to provide writeups and links as time permits and this website gets more organized.