/libnurbs

Primary LanguageC++OtherNOASSERTION

libnurbs is a C++ library implementing routines for creating, manipulating and converting
Non-Uniform Rational BSplines (NURBS) curves and surfaces.


(eventually this file will get more coherent - for now it's more or less a scratchpad)


There are several other open source libraries and programs that can be examined for useful
features, which is probably the second step after architecting the overall API.  Their
utility will depend on the eventual license selected for libnurbs - if we wish to use
Modified BSD, the options are much more restricted.  GPL is definitely a no-go due to
projected use of libnurbs in non-GPL projects.

BSD licensed:
Ayam  (by far the most likely to have new and useful features - Ayam is a nurbs modeler)
http://ayam.sourceforge.net/

LGPL:
varkon
http://varkon.sourceforge.net/

Nurbana (the original, not clear if Blender's modifications are still LGPL)
http://sourceforge.net/projects/nurbana/

gul (need to check whether individual parts are GPL or LGPL...)
http://sourceforge.net/projects/gul/

NOT USABLE (due to GPL licensing):

SISL   (appear to be very specific commercial reasons for use of GPL)
http://www.sintef.no/Informasjons--og-kommunikasjonsteknologi-IKT/Anvendt-matematikk/Fagomrader/Geometri/Prosjekter/The-SISL-Nurbs-Library/SISL-Homepage/
(note however that the grouping of functions they outline may still be of use in terms of guilding API design conceptually, even if we can't use code directly:
http://www.sintef.no/Informasjons--og-kommunikasjonsteknologi-IKT/Anvendt-matematikk/Fagomrader/Geometri/Prosjekter/The-SISL-Nurbs-Library/SISL-Functionality/ )

libSNL (contacted author, prefers to remain GPL)


Need to check license:

snurbs
(included in gul - can't seem to find another online source for this one)

dcnurbs
http://www.axlen.com/ , specifically http://axlen.com/dc/dcnurbs-0.0.0.tar.gz



*******************************************************************************************
           
	   Structure and Historical Background - a.k.a Why libnurbs?

*******************************************************************************************

libnurbs uses as its foundation the openNURBS library from Robert McNeel & Associates,
who also develop the Rhino modeling software.  Because the openNURBS code is used in Rhino
it benefits from the testing and debugging required to produce a quality commercial modeler.
Rather than attempt to re-invent the wheel or build from the less extensively tested 
NURBS++ code as a foundation, libnurbs will build on the abilities openNURBS.

openNURBS itself does not include the more complex geometric manipulation routines required
for general NURBS editing and conversion - those are features of the commercial Rhino SDK.
The primary purpose of the openNURBS toolkit is to improve generally the ability of
software to reliably transfer 3-D geometry (per http://www.opennurbs.org/faq.htm).  The
Rhino developers already have the more advanced capabilities they need, and advanced editing
abilities are out of scope for the openNURBS project itself.  Since new features related
to a broader range of NURBS capabilities don't fit in the openNURBS project, a new project
is required - libnurbs.

The current libnurbs effort diverges from the original NURBS++ library associated with the
libnurbs sourceforge project in its use of openNURBS, although the overall goal remains 
essentially the same.  After the basic framework has been built, abilities implmented in 
NURBS++ but not present in openNURBS will be migrated/re-implemented as appropriate
into libnurbs (if we decide to not use LGPL, the original NURBS++ code will not be used as
the current developer does not have permission to re-license the code - if the original
devs can be reached we might inquire but so far they have not been reachable.)