5
$\begingroup$

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)?

$\endgroup$
  • 1
    $\begingroup$ I am not very familiar with the topic. But have you checked OpenCascade? $\endgroup$ – nicoguaro Jun 25 '18 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 '18 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 '18 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 '18 at 1:24
1
+50
$\begingroup$

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.

$\endgroup$

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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