Recently, I started to develop some codes that use NURBS (general things I intend to use/already using: spline generation, interpolation, grids, isolines, closest-point find, and many others), both for curves and surfaces.

The first practical problem I want to solve is to find a NURBS surface given a set of B-splines (Bezier patches, etc) in 3-D.

In one of the classic books about B-splines, L. Piegl and W. Tiller, The NURBS Book, Springer, 1995, Chapter 10 "Advanced Surface Construction techniques" describes a lot of computational algorithms, possibly including the ones I need (judging by the intro paragraph). However, I definitely do not want to invent the bicycle and would like to re-use as much as I can (provided the library development is not completely dead and has some userbase). I have no intention to write yet another NURBS library.

Right now, I am using openNURBS as a basic IO and storage format, but this library supports only very basic operations – and I am very reluctant to go into "full Rhino mode" to get access to the required functionality.

I already looked into:

  • SISL, not entirely sure how I feel about the GNU license in this particular case.
  • libnurbs++ or libnurbs++ GitHub, the development seems to have stopped at least in 2013, possibly 2011.
  • Nurbana, the development seemed to stop in 2003 (!)
  • verb, that I doubt I am the target audience of.
  • and several other projects that lack any sort of documentation/development/user base.

So, I wonder, what are right now the common grounds for integrating NURBS-related calculations into your codes? Is there a widely used library that I missed (being relatively new to this topic)?

  • 1
    $\begingroup$ I am not very familiar with the topic. But have you checked OpenCascade? $\endgroup$
    – nicoguaro
    Jun 25, 2018 at 22:15
  • $\begingroup$ @nicoguaro That’s one of the things I am looking into now. It’s just such a beast, I am reluctant to settle for it until I hear from other people with similar needs or I don’t have other more specific options. But that is a very good point, nicoguaro. $\endgroup$
    – Anton Menshov
    Jun 26, 2018 at 10:43
  • 1
    $\begingroup$ I would also check microelly's work on NURBS for FreeCAD (github.com/microelly2/freecad-nurbs), according to his demos in YouTube it seems useful. $\endgroup$
    – nicoguaro
    Jun 26, 2018 at 16:45
  • $\begingroup$ @nicoguaro you want to briefly summarize OpenCascade + looking into FreeCAD's way of dealing with OpenCASCADE / NURBS as an answer? Don't want the bounty go to waste, and I think OpenCascade is the way to go... $\endgroup$
    – Anton Menshov
    Jun 30, 2018 at 1:24
  • 1
    $\begingroup$ @nicoguaro actually, I have not! thanks for the link, I have to take a very close look at it. $\endgroup$
    – Anton Menshov
    Sep 19, 2019 at 2:10

1 Answer 1


I think that you should take a look to OpenCascade. It provides with Spline surfaces, and NURBS particularly. It is written in C++ and it is released under LGPL license.

Regarding FreeCAD, I don't think that they officially support NURBS, although you can import them (?). But there is a module in development (see also the Forum). The developer has published several examples already.

I would also suggest to look at Blender since it also supports NURBS.

Both, FreeCAD and Blender have rich Python API, that might be useful if you are a Python user.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.