NLib Introduction & Installation

NLib Introduction

NLib has its origins in code developed by Wayne Tiller and Les Piegel, based on their reference work “The Nurbs Book”. NLib has an established reputation, and a long maintenance history so that it is a thoroughly tested product. The exclusive rights for maintenance, distribution and development were acquired by Solid Modeling Solutions.

SMS has updated and improved NLib over the years, without losing the logic or the rigor of the original NLib. Consequently NLib is much more user friendly. NLib is a NURBS curve and surface library delivered as “C” functions that can be linked and referenced by your application. NLib does not have topological structures and does not perform intersections.  NLib remains the foundation upon which SMLib and TSNLib are built.

NLib Installation

NLib is distributed as a compiled library on Windows, Windows64, Linux, or Mac.  If your application has special building requirements, source code distributions and also possible in some cases. For the purposes of this manual we will use Windows instructions as an example. After installing NLib, please refer to our documentation available for download from our FTP site. In addition, we provide examples and release notes on our web site at smlib.com. If any questions remain, please contact support@smlib.com.

Upon receiving the download instructions, unzip the distributed zip file with the given password into a folder called SMLib.

Directory Structure

  • SMLib
    • NLib
      • inc (include files)
      • src (source code distribution only)
      • Project files (.sln, .vcxproj ) (source code distribution only)
    • Winlibs/Winlibs64
      • Release (resulting dlls and license file)

General Usage

Representation of Various Entities

Index is used for array subscripts.

  • Index starts at zero (0).
  • An array index of ‘4’ means that there are ‘5’ items in the array.
  • This is standard ‘C’ practice, but is also the cause of many errors by users.

Point: is always a 3-D entity (x,y,z)

Control Points are always weighted. The following cases are distinguished

  • 2-D non-rational (x, y, NL_NOZ, NL_NOW)
  • 2-D rational (wx, wy, NL_NOZ, w)
  • 3-D non-rational (x, y, z, NL_NOW)
  • 3-D rational (wx, wy, wz, w)

where NL_NOZ and NL_NOW are predefined identifiers telling NLib that no z and/or no w component(s) are to be considered.

Knot Vector is always “clamped”, that is:

  • U = {a(0),…,a(p), u(p+1),…,u(m-p-1),b(m-p),…,b(m)}

where p is the degree of the curve. There are routines to clamp or unclamp knot vectors if the need so arises.

Curve is always in a Bezier-like form, i.e. with end point interpolation. Curves are mostly created by the system. However, they can be input from a file. The form of the file is explained by the following degree-three curve example:

5 <— Highest index of control points (n)
3 <— Degree (p)
1 <— Rational (1) or non-rational (0) flag
2 <— Dimension (2 or 3)
0.100000 0.300000 1.000000 <— Pw(0)
0.700000 0.600000 2.000000 <— Pw(1)
0.350000 0.600000 1.000000 <— Pw(2)
0.650000 0.600000 1.000000 <— Pw(3)
0.975000 0.450000 1.500000 <— Pw(4)
0.900000 0.300000 1.000000 <— Pw(5)
0.000000 <— u(0)
0.000000 <— u(1)
0.000000 <— u(2)
0.000000 <— u(3)
0.300000 <— u(4)
0.700000 <— u(5)
1.000000 <— u(6)
1.000000 <— u(7)
1.000000 <— u(8)
1.000000 <— u(9)

The relationship m=n+p+1 must always hold, where m is the highest index of knots (in the above example have 9 = 5 + 3 + 1).

Surface is always in a Bezier-like form, i.e. with corner point interpolation. As in the case of curves, surfaces are mostly created by the system. However, they too can be input from a file. The form of the file is explained by the following degree 3 x 2 surface example:

4 3 <— Highest indexes in u- and v-directions (n, m)
3 2 <— Degrees in u- and v-directions (p, q)
1 <— Rational (1) or non-rational (0) flag

8.000000 -8.000000 4.000000 1.000000 <— Pw(0,0)
4.000000 -8.000000 0.000000 1.000000 <— Pw(0,1)
-4.000000 -8.000000 0.000000 1.000000 <— Pw(0,2)
-8.000000 -8.000000 6.000000 1.000000 <— Pw(0,3)

8.000000 -3.000000 0.000000 1.000000 <— Pw(1,0)
8.000000 -6.000000 0.000000 2.000000 <— Pw(1,1)
-4.000000 -3.000000 0.000000 1.000000 <— Pw(1,2)
-8.000000 -3.000000 2.000000 1.000000 <— Pw(1,3)

8.000000 0.000000 0.000000 1.000000 <— Pw(2,0)
6.000000 0.000000 3.000000 1.500000 <— Pw(2,1)
-4.000000 0.000000 2.000000 1.000000 <— Pw(2,2)
-8.000000 0.000000 4.000000 1.000000 <— Pw(2,3)

8.000000 3.000000 2.000000 1.000000 <— Pw(3,0)
4.000000 3.000000 0.000000 1.000000 <— Pw(3,1)
-8.000000 6.000000 0.000000 2.000000 <— Pw(3,2)
-8.000000 3.000000 0.000000 1.000000 <— Pw(3,3)

8.000000 8.000000 -2.000000 1.000000 <— Pw(4,0)
4.000000 8.000000 0.000000 1.000000 <— Pw(4,1)
-4.000000 8.000000 -2.000000 1.000000 <— Pw(4,2)
-8.000000 8.000000 6.000000 1.000000 <— Pw(4,3)

0.000000 <— u(0)
0.000000 <— u(1)
0.000000 <— u(2)
0.000000 <— u(3)
0.500000 <— u(4)
1.000000 <— u(5)
1.000000 <— u(6)
1.000000 <— u(7)
1.000000 <— u(8)

0.000000 <— v(0)
0.000000 <— v(1)
0.000000 <— v(2)
0.500000 <— v(3)
1.000000 <— v(4)
1.000000 <— v(5)
1.000000 <— v(6)

The relationships r=n+p+1 and s=m+q+1 must always hold, where r and s are the highest indexes of knots in the u- and v-directions, respectively (in the above example we have 8=4+3+1 and 6=3+2+1).

Program Design

We explain the major ingredients of a typical NLib application program using a simple example below. The program reads in a NURBS curve, elevates its degree by one in three different ways, and writes the last result out to a file. The names of the input and output files are command line arguments.

#include “nurbs.h”
#include “NL_Globals.h”

main( int argc, char *argv[] )
{
NL_FLAG error;
NL_INDEX n, m, s;
NL_DEGREE p;
NL_CURVE curP, curQ, curR;
NL_KNOTVECTOR *knt
NL_STACKS S;

/* Start NURBS */
N_InitNurbs(&S);

/* Input curve */
N_CrvInitArrays(&curP);
error = N_CrvReadFromFile(&curP,argv[1],NL_YES,&S);
if ( error EQ NL_YES ) NL_PRINT_ERROR;

/***************************/
/* Elevate degree call 1 */
/***************************/
N_CrvInitArrays(&curQ);
error = N_CrvElevateDegree(&curP,1,&curQ,&S,&S);
if ( error EQ NL_YES ) NL_PRINT_ERROR;

/***************************/
/* Elevate degree call 2 */
/***************************/
/* Get knot vector, highest indexes and degree */
N_CrvGetKnotVector(&curP,&knt);
N_CrvGetArraySizes(&curP,&n,&m);
N_CrvGetDegree(&curP,&p);

/* Compute highest indexes of degree elevated curve */
N_BasisGetSpanCount(knt,p,&s);
n = n+s;
p = p+1;
m = m+s+1;

/* Allocate memory for new curve */
error = N_CrvAllocArrays(&curR,n,p,m,&S);
if ( error EQ NL_YES ) NL_PRINT_ERROR;

/* Now degree elevate */
error = N_CrvElevateDegree(&curP,1,&curR,&S,&S);
if ( error EQ NL_YES ) NL_PRINT_ERROR;

/***************************/
/* Elevate degree call 3 */
/***************************/
error = N_CrvElevateDegree(&curP,1,&curP,&S,&S);
if ( error EQ NL_YES ) NL_PRINT_ERROR;

/* Output last curve */
error = N_CrvWriteToFile(&curP,argv[2]);
if ( error EQ NL_YES ) NL_PRINT_ERROR;

/* End NURBS */
N_EndNurbs(&S);
}

There are several important points:

  • Each routine that calls NLib functions must include the file nurbs.h.
    This header file contains all function prototypes, and includes the headers NL_Nurbsdef.h, NL_Geom.h and NL_DataStruct.h.
  • The top level application routine must also include NL_Globals.h.
    This file contains global parameters and constants, including important tolerances (see below).
  • NLib functions work on predefined data types, e.g. NL_FLAG, NL_INDEX, NL_DEGREE, NL_KNOTVECTOR, NL_CURVE and NL_STACKS. These data types act like any other standard data type such as int or double. That is, when one writes NL_CURVE curP, the system allocates memory for a curve object and tags this memory with the name curP.
  • NLib routines start and end with two special functions N_InitNurbs and N_EndNurbs. The first one initializes memory stacks to NULL, and the second one traverses these stacks, deallocates all dynamically allocated memory, and kills the stacks.
  • The calling mechanism of each NLib function is explained in detail in the documentation and its header.

As an example, here is the explanation of how to call N_CrvElevateDegree (as extracted from its header):

A typical calling example is:

NL_CURVE curP, curQ;
NL_INDEX t;
NL_STACKS SP, SQ;

(define curP, get t);

N_CrvInitArrays(&curQ);
N_CrvElevateDegree(&curP,t,&curQ,&SP,&SQ);
N_CrvElevateDegree(&curP,t,&curP,&SP,&SP);

The header explains

  • how to declare variables;
  • how to pass them to the routine (by value or by reference).
  • how to manage memory (which stack is used for input and output

We shall now walk through the sample program

Various parameters and objects are defined. Note that three curve objects are defined, however, only a knot vector pointer is needed.

The NURBS program is initialized by N_InitNurbs

curP is initialized to NULL telling the N_CrvReadFromFile routine to allocate memory, copy the curve data into curP, and place memory pointers on to the stacks.

Call 1 curQ is initialized to NULL telling the degree elevation routine to:

  • find out how much memory is needed to store the output curve, and to allocate this memory;
  • degree elevate curP and to place the result in curQ; and
  • place memory pointers on to the stacks S.

This is the most convenient way of calling NLib routines that return a new curve or surface.

Call 2 the new degree and the highest indexes of control points and knots are computed first. Then memory is allocated by the N_CrvAllocArrays routine. When calling the degree elevation routine with curR, the routine does the following:

  • Sees that curR is not NULL and checks if sufficient memory is passed in using curR’s memory stacks (the same as curP’s in this example). If yes, it continues. If not, it sets t error flag, and returns control to the calling routine.
  • Degree elevates curP and places the output curve in curR,

Call 3 when calling the degree elevation routine with the same curve pointer, the routine sees that degree elevation is to be done in-place, and does the following:

  • kills curP.
  • allocates new memory for curP; and
  • places the degree elevated curve in the new curP.

curP is saved on a file by the N_CrvWriteToFile routine.

The program is ended by N_EndNurbs that deallocates all dynamically allocated memory.

The three calls show that there is a lot of flexibility in how to create new geometric entities. For simple operations calls 1 or 3 are recommended. If degree elevation is to be done repeatedly, call 2 is recommended, i.e. allocate enough memory, only once, for all types of degree elevations, and pass this memory to the routine.

Array Arguments

In general, it is safe to say that we never have arrays of points ( ie point data laid out contiguously). What we have is an array of pointers to points…..so the points can be, for example, along either the row or column of an array. We gather the address of each successive point we are interested in and add the address into an array of pointers……

NL_POINT **Pnt

We do not have to rearrange the input if we switch from row to column. …just select the addresses differently.

Similarly with other objects, such as the curves in N_CrvDecomposeBez.

The argument ” ***CurQ ” means ” the address of an array of pointers to Curves”.

You have:

NL_CURVE *cur as a pointer to a curve

NL_CURVE **curQ as an array of curve pointers

( do not confuse this with a two dimensional array )

You call N_CrvDecomposeBez with (…….&curQ…..)

But N_CrvDecomposeBez receives it as (………NL_CURVE ***curQ……..) and internally builds a set list of curve pointers to newly allocated curves

NL_CURVE **curA; ….

build curA[i]; ……

*curQ= curA;

” take the address of the new curve list curA and put it into the location where curQ is pointing to (if there was no *curQ…but only curQ it would just locally change the address of curQ and not update the one that was sent).

After returning, the calling routine now has the address of the list of curve pointers ( NL_CURVE **CurQ).

Dynamic Memory Allocation

Memory in NLib routines is allocated by special purpose routines that can be found in the space subdirectory and have the prefix S_. These routines require a memory stack to save pointers of allocated memory. The user can work with an entire hierarchy of stacks, each one of them is local to one or global to many routines. These stacks can control when and where memory is needed. Each NURBS routine has its local stack which is killed, along with all memory residing on it, upon leaving the routine. In addition to this local stack, the routine can take, as arguments, a number of global stacks that can hold memory needed when the routine in no longer active. As an example, let us look at the structure of the degree elevation routine used above.

NL_FLAG N_CrvElevateDegree( NL_CURVE *curP, NL_INDEX t, NL_CURVE *curQ, NL_STACKS *SP, NL_STACKS *SQ )
{
NL_FLAG error = NL_NO;

NL_STACKS SL;
N_InitNurbs(&SL);

alfs = N_AllocReal1dArray(p,&SL);
if ( alfs EQ NULL ) NL_QUIT;

N_EndNurbs(&SL);
}

N_CrvElevateDegree is given two global stacks, SP and SQ; one for curP and one for curQ. In addition to this, it has its local stack SL. If the degree is elevated in-place, the new curve curP is placed on to SP. Otherwise, the new curve curQ is placed on to SQ. Any local memory, like alfs, is stored on the local stack SL, and is released upon leaving the routine.

Tolerances and Constants

NLib has two types of tolerances public and private. Public tolerances are declared and initialized in globals.h. Some examples follow:

  • NL_MTOL models space tolerance, i.e. if two points are closer than NL_MTOL, they are considered the same. The current setting is1.0e-7.
  • NL_PTOL parameter space tolerance, i.e. if two parameters are closer than NL_PTOL, they are considered the same. The current setting is 1.0e-12.
  • NL_LTOL line tolerance, i.e. if the magnitude of the cross product of two lines’ unit direction vectors is less then NL_LTOL, the lines are considered parallel. The current setting is 1.0e-12.
  • NL_LUDT LU-decomposition tolerance. It will not allow the computation of LU-decomposed matrices (with or without pivoting) with huge numbers even if the divisions can be performed within the available range of the floating point processor. The current setting is 1.0e-9.

Private tolerances are declared in individual routines. These tolerances are used to perform numerical computations within the scope of the individual routine. Even though they are NL_PRIVATE, they are never hard coded. They are defined on top of the routine, and adjusted in the body based on the length of the knot vector, the bounding box of the curve/surface, etc. Their initial settings are based on extensive experiments, and can be altered easily as the user sees fit.

There are a number of constants and predefined entities NLib relies on. All of them are defined in globals.h. A few examples follow:

  • NL_WMIN and NL_WMAX minimum and maximum allowable weights. Current settings 1.0e-2 and 10, respectively.
  • NL_DMAX highest degree. Currently 28. Warning NL_DMAX cannot be modified without considering the definition of NL_INDEX and NL_INTEGER data types. The binomial coefficients are represented for efficiency reason as integers. The current definition of NL_INDEX and NL_INTEGER is long, which may have different maximum values on different systems. The ANSI standard requires long to be at least 2,147,483,647.
  • NL_ITLIM iteration limit. Currently 50 (if iterations, such as Newton, do not converge within 50 steps, they probably never will).

Floating Point Operations

Floating point operations are performed in double precision. There are two types of error checks:

  • Certain numbers are checked against predefined tolerances before any crucial operation, such as division, occurs. For example, if a number is to be divided by the distance between two points, then even if the division could be done, it is not done if the distance is less than the model space tolerance.
  • When no specific tolerances are involved, operation checks are performed by the N_FloatOpIsBad routine. It’s calling mechanism is:

NL_REAL x, y;

if ( N_FloatOpIsBad(x,y,NL_ADDITION) ) NL_ERROR(NL_NUM_ERR);
if ( N_FloatOpIsBad(x,y,NL_SUBTRACTION) ) NL_ERROR(NL_NUM_ERR);
if ( N_FloatOpIsBad(x,y,MULTIPLICATION) ) NL_ERROR(NL_NUM_ERR);
if ( N_FloatOpIsBad(x,y,NL_DIVISION) ) NL_ERROR(NL_NUM_ERR);

Utilities

NLib has an extensive set of utilities to perform such tasks as making objects, input/output, converting objects, etc. One of the most important tasks performed by these functions is to hide the definition of various objects while providing access to their components. For example, to get the highest indexes of control points and knots of a curve object, one could write:

NL_INDEX n, m;
NL_CURVE *cur;

n = cur->pol->n;
m = cur->knt->m;

This requires knowledge of the NL_CURVE object. It also requires that the entire library be searched and modified if any change is made to its definition. In order to avoid this, NLib has an extensive set of utility routines to create objects from their individual components, and to break them into the many constituents. In the above example, one should write:

INDEX n, m;
NL_CURVE *cur;

N_CrvGetArraySizes(cur,&n,&m);

Each category of routines where objects are dealt with, e.g. NURBS, geometry and mathematics, has its own constructors and destructors. We strongly recommend that the application programmer use these routines. They have the following advantages:

  • they are easier to understand;
  • they are less prone to errors (the compiler catches the error if the are called incorrectly); and
  • they allow changes to be made to the definitions of the objects.

Error Checking

NLib has a set of routines to check errors. They are in the error directory and have the prefix E_. We strongly recommend that these routines be used to make sure that curves and surfaces are correct before entering NURBS routines. The general philosophy is: Whenever an object is passed into a function, it is assumed that its definition is correct.

Usage Tips

Please refer to Examples/NLib for additional examples. Maybe provide FTP link.

The curve/surface evaluators use some fixed- length arrays declared with dimensions NL_MAXDEG and NL_MAXDER. The current settings (in NL_Nurbsdef.h) for these evaluators are NL_MAXDEG=28 (maximum degree) and NL_MAXDER=5 (maximum derivative order). If you need to change these, you should do so before compiling NLib (you must also change NL_DMAX in NL_Globals.h to be the same as NL_MAXDEG).

“The NURBS Book” (Springer-Verlag, ISBN 3-540-61545-8), by Les Piegl and Wayne Tiller is excellent documentation for NLib. The first 12 chapters describe the underlying mathematics and algorithms, and Chapter 13 describes the system architecture (data structures, memory management, error handling, utilities, example programs, etc). We suggest you buy it.

A few tips for using NLib (see “The NURBS Book” for more detail)

  1. NLib requires NURBS curves/surfaces to have “clamped”, or “nonperiodic” knot vectors; i.e. end multiplicities equal to degree plus 1. Furthermore, internal knots may not have multiplicity greater than degree.
  2. There are functions to “clamp” curves/surfaces (specifically: N_Iges126Crv and N_Iges128Srf), and knot removal can be used where internal knots have multiplicities greater than degree.
  3. When importing curves/surfaces from other systems, it is advisable to use the functions N_Iges126Crv and N_Iges128Srf. These check if the NURBs definitions are compatible with NLib.
  4. A main program must include the files nurbs.h and NL_Globals.h (see example programs).
  5. Any program should start with a call to N_InitNurbs and end with a call to N_EndNurbs (see example programs).
  6. Generally, if an array is passed into a function, and if an integer> (say n) is also passed, then n will usually indicate the highest valid index of the array, not the number of elements in the array. Since array indices start at 0, n+1 is the actual number of array elements. This may seem unnatural for some users, but it corresponds to the notation and algorithm descriptions of “The NURBS Book
  7. All angles are to be expressed in degrees, not radians.

References

The NLib products are based on solid research in NURBS technology. The publications below by Les Piegl and/or Wayne Tiller are examples of key papers providing a scientific basis for major NLib routines.

  • Rational B-splines for curve and surface representation, IEEE Computer Graphics and Applications, Vol. 3, No. 6, 1983, pp 61-69.
  • The NURBS Book, Second Revised Edition, Springer-Verlag, 1997.
  • Curve and surface constructions using rational B-splines, Computer-Aided Design, Vol. 19, No. 9, 1987, 485-498.
  • A menagerie of rational B-spline circles, IEEE Computer Graphics and Applications, Vol. 9, September, 1989, pp 48-56.
  • Modifying the shape of rational B-splines. Part 1: curves, Computer-Aided Design, Vol. 21, No. 8, 1989, pp 509-518.
  • Modifying the shape of rational B-splines. Part 2: surfaces, Computer-Aided Design, Vol. 21, No. 9, 1989, pp 538-546.
  • Data reduction using cubic rational B-spline, IEEE Computer Graphics and Applications, May, pp 60-68, 1992.
  • Knot-removal algorithms for NURBS curves and surfaces, Computer-Aided Design, Vol. 24, No. 8, 1992, pp 445-453.
  • Delaunay triangulation using a uniform grid, IEEE Computer Graphics and Applications, May, 1993, pp 36-47.
  • Software engineering approach to degree elevation of B-spline curves, Computer-Aided Design, Vol. 26, No. 1, pp 17-28 , 1994.
  • Algorithm for degree reduction of B-spline curves, Computer-Aided Design, Vol. 27, No. 2, pp 101-110, 1995.
  • Algorithm for approximate NURBS skinning, Computer-Aided Design, Vol. 28, No. 9, pp 699-706, 1996.
  • Symbolic operators for NURBS, Computer-Aided Design, Vol. 29, No. 5, pp 361-368, 1997
  • Algorithm for computing the product of two B-splines, in A. Le Mehaute, C. Rabut and L. L. Schumaker (eds.) Curves and surfaces with applications in CAGD, Vanderbilt University Press, Nashville, TN, 1997, pp 337-344.
  • Geometry-based triangulation of trimmed NURBS surfaces, Computer-Aided Design, Vol. 30, No 1, pp 11-18, 1998.
  • Computing the derivatives of NURBS with respect to a knot, Computer Aided Geometric Design, Vol. 15, No. 9, pp 925-934, 1998.
  • Approximation of offsets of NURBS curves and surfaces, Computer-Aided Design, Vol. 31, No. 2, pp 147-156, 1999.
  • Cross-sectional design with boundary constraints, Engineering with Computers, Vol. 15, 1999, pp 171-180.
  • Filling n-sided regions with NURBS patches, The Visual Computer, Vol. 15, No. 2, pp 77-89, 1999.
  • Reducing control points in surface interpolation, IEEE Computer Graphics and Applications, Vol. 20, No. 5, 2000, pp 70-74.
  • Surface approximation to scanned data, The Visual Computer, Vol. 16, No. 7, 2000, pp 386-395.
  • Curve interpolation with arbitrary end derivatives, Engineering with computers, Vol. 16, 2000, pp 73-79.
  • Least-squares NURBS curve approximation with arbitrary end derivatives, Engineering with computers, Vol. 16, 2000, pp 109-116.
  • Parametrization for surface fitting in reverse engineering, Computer-Aided Design, Vol. 33, No. 8, 2001, pp 593-603.

Functions

Creation of Common Curves

  1. Circles and circular arcs

N_CreateCircArc – Create a circle/circular arc
N_CreateQuadraticArc – Create a quadratic circle/circular arc
N_CreateQuarticArc – Create a quartic degree 4 circle/circular arc
N_CreateQuinticArc – Create a quintic circle/circular arc
N_CreateCubicSemiCircle – Create a cubic semi-circle
N_CreateBoundedCircArc – Create Bezier cubic/quartic circular arc <=180 degrees
N_ApproxCircArcWithCrv – Approximate circle full or arc with non-rational curve

  1. Conics and conic arcs

N_CreateEllipticalArc – Create a ellipse/elliptical arc
N_CreateConicArc – Create a conic arc

  1. Straight line segments

N_CrvLineFromPtAndVector – Create a line as a curve

  1. Degenerate point curve

N_CrvDegenFromPt – Create point as a degenerate curve

Creation of Common Surfaces

  1. Bilinear surfaces and planes

N_CreateSrfCornerPts – Create bilinear surface

  1. Cones and cylinders full or patches

N_CreateCylCone – Create a cylinder/cone surface/patch

  1. Spheres and tori full or patches

N_CreateSphere – Create a sphere/spherical patch
N_CreateTorus – Create a torus/toroidal patch
N_FitSphereToPtsGlobal – Best fitting sphere to a set of points
N_FitSphereToPtsLocal – Best fitting sphere to a set of points
N_ApproxRevolvedSrfWithSrf – Non-rational approximation of surface of revolution
N_ApproxSphereWithSrf – Non-rational approximation of sphere
N_ApproxTorusWithSrf – Non-rational approximation of a torus

  1. General extruded surfaces TABCYL

N_CreateSrfExtrudeCrv – Create a generalized cylinder

  1. Ruled surfaces

N_CreateRuledSrf – Create a ruled surface between two arbitrary curves
N_CreateRuledSrfFromBoundaryCrvs – Ruled surface of two curves using symbolic operators

  1. Surfaces of revolution full or partial

N_CreateRevolvedSrf – Create surface of revolution

  1. Ellipsoids, elliptic paraboloids and hyperboloids of one sheet full or patches

N_CreateEllipsoid – Create a ellipsoid/patch
N_CreateHyperboloid – Create a hyperboloid of one sheet/hyperbolic patch
N_CreateParaboloid – Create a elliptic paraboloid/patch

Advanced Surface Construction Methods

  1. Swung surfaces

N_CreateSwungSrf – Create a swung surface

  1. Interpolative skinning, with or without a spine curve

N_CreateSkinSpine – General spine curve-based surface skinning

  1. Approximative skinning with error bound specified yields impressive data reduction

N_CreateSkinSrf – General surface skinning
N_CreateSkinSrfApproxTol – Approximative surface skinning with error bound
N_CreateSkinSrfApprox – Approximative surface skinning
N_CreateSkinSrfApproxParams – Approximate surface skinning with given knot vector
N_CreateSkinSrfParams – Surface skinning with given parameters and knot vector

  1. Interpolative and approximative skinning with rail curves and cross-boundary continuity constraints

N_CreateSkinSrfBoundaryContinuity – Approximate skinning with boundary conditions and rails

  1. Translational swept surface

N_CreateTransSweepSrf – Create a translational sweep surface

  1. Swept surface, arbitrary trajectory curve, interpolative or approximative to within specified error bound

N_CreateSweepSrf – Create a swept surface
N_CreateSweepScale – Swept NURBS surface with boundary conditions

  1. Gordon surface through a compatible curve network

N_CreateGordonSrf – Gordon surface through compatible non-rational curves

  1. Bilinear Coons surface

N_CreateCoonsSrf – Bilinear Coons surface through four boundary curves

  1. Bicubic Coons surface

N_CreateCoonsBoundaryCrvs – Bicubic Coons surface through boundary and derivatives
N_CreateCoonsSrfTwist – Bicubic Coons surface through four boundary curves

  1. N-sided patch

N_FillNSidedHole – N-sided patch construction to boundary and derivatives

  1. Join surfaces

N_SrfJoin – Join two surfaces at a common boundary

Creation of Curves and Surfaces by Data Fitting

  1. Global curve interpolation to point data arbitrary degree

N_FitCrvInterp – Global curve interpolation with arbitrary degree
N_FitCrvInterpGivenParams – Curve interpolation with specified knot vector

  1. Global curve interpolation to point and end derivative data arbitrary degree

N_FitCrvDerivs – Curve interpolation with end derivatives specified
N_FitCrvTangents – Curve interpolation with end tangents specified
N_FitCrvDerivsMatrix – Curve interpolation with end derivatives and matrix
N_FitCrvDerivMatrix – Curve interpolation with end derivative and matrix
N_FitCrvFirstDeriv – Curve interpolation with first derivatives specified
N_FitCrvFirstDerivAndKnots – Curve interpolation with first derivatives & knot vector
N_FitCrvKnotsAndDerivs – Curve interpolation with end derivatives and knot vector
N_FitCrvLstSqEnds – Least Squares Curve Fit to Points, with End Conditions
N_FitCrvKnotsAndDeriv – Curve interpolation with end derivative and knot vector

  1. Cubic spline curve interpolation

N_FitCubicSplineInterp – Cubic spline interpolation

  1. Global least squares curve approximation to point data arbitrary degree

N_FitCrvWeightedLstSq – Weighted & constrained least-squares curve approximation
N_FitCrvWeightedLstSqPeriodic – Weighted/constrained least-squares periodic with knot vector
N_FitCrvWeightedLstSqKnots – Weighted/constrained least-squares with knot vector
N_FitCrvApprox – Curve approximation with error bound specified
N_FitCrvApproxKnots – Curve approximation with specified knot vector
N_FitCrvCubicApprox – Data approximation with piecewise cubic segments
N_FitCrvApproxKnotsAndTangentsTol – Curve approximation with error bound & end constraints
N_ApproxConeWithSrf – Non-rational approximation of cylinder or cone
N_ApproxArcWithCrv – Non-rational approximation of a circle or arc
N_FitArcToPts – Best fitting circle or circular arc to a set of points
N_FitCrvCubicTangents – Local NL_C1 cubic curve interpolation with end tangents
N_FitHermite – Fit Hermite curve to end kth and (k+1)th derivatives
N_FitLineToPts – Best fitting line segment to a set of random points
N_FitPlaneToPts – Best fitting plane to random points
N_FitCrvLstSqEnds – Least squares curve fit to points

  1. Approximation of the offset of a curve

N_CrvOffset – Offset of NLib curve
N_CrvOffsetFuncVariableDir – Functional offset of NLib curve using point sampling
N_CrvOffsetApprox – Approximate offset of NLib curve with nonrational curve
N_CrvOffsetPtSampling – Offset of NLib curve using point sampling

  1. Offset of a connected set of curves with trimming and filleting
  2. Approximation of procedurally defined curves to within tolerance

N_ApproxProcCrvWithCrv – Approximate procedural curve with error bound specified

  1. Mapping of a uv-domain curve onto its surface

N_ApproxCrvOnSrfWithCrv – Approximate curve on surface from uv-curve

  1. Approximation of a curve with a nonrational curve of specified degree

N_ApproxNurbsWithNonRatCrv – Approximate curve with non-rational curve
N_ApproxG1CrvWithCrv – Approximate any NL_G1 NLib curve with nonrational curve
N_ApproxCrvWithPolyline – Piecewise linear polygonal approximation of a curve

  1. Global surface interpolation to point data arbitrary degrees

N_FitSrfToPts – Global surface interpolation with arbitrary degrees
N_FitSrfInterpTangents – Surface interpolation with tangent constraints
N_FitSrfToPtsKnots – Surface interpolation with given knot vectors

  1. Global least squares surface approximation to point data arbitrary degrees

N_FitSrfLstSqApprox – Global surface approximation with arbitrary degree
N_FitSrfApproxTol – Surface approximation with error bound specified
N_FitSrfApproxTangentsTol – Surface approximation with error bounds and tangents
N_FitSrfLstSqKnots – Surface approximation with given knot vectors
N_FitSrfLstSqBoundary – Least squares surface approximation to random points
N_FitSrfLstSqPeriodic – Periodic Least squares approximation to random points
N_fitRandomPN – Surface fit to random Points and Normals
N_FitPtsNormals – Surface fit to array of Points, Normals

  1. Approximation of the offset of a surface

N_SrfOffsetFunc – Functional offset Surface using point sampling
N_SrfOffset – Offset of surface using point sampling

  1. Approximation of a surface with a nonrational surface of specified degree

N_ApproxNurbsWithNonRatSrf – Approximate surface with non-rational surface

  1. Global weighted and constrained least squares curve approximation arbitrary degree
  2. Local NL_C1-continuous non-rational cubic curve interpolation

N_FitCrvCubic – Curve interpolation with NL_C1 non-rational cubic curves

  1. Local NL_G1- or NL_C1-continuous parabolic curve interpolation

N_FitCrvParabArcs – Curve interpolation with piecewise parabolic arcs

  1. Local NL_G1-continuous rational quadratic curve interpolation

N_FitCrvConics – Curve interpolation with piecewise conic arcs

  1. NL_G1-continous bi-arc curve interpolation

N_FitCrvArcs – Curve interpolation with piecewise circular arcs

  1. Local data approximation with NL_G1-continuous quadratic curves

N_FitCrvConicsApprox – Data approximation with piecewise conic segments

  1. Local data approximation with NL_G1-continuous cubic curves
  2. Global curve approximation / data reduction with error bound specified arbitrary degree
  3. Local NL_C1,1-continuous non-rational bicubic surface interpolation

N_FitSrfInterpBicubic – Surface interpolation with C11 bicubic surfaces

  1. Global surface approximation / data reduction with error bound specified arbitrary degree
  2. Curve/surface interpolation and approximation functions that allow specification of boundary constraints, including tangent/derivative vectors

Evaluation of Curves and Surfaces

  1. Compute point and derivatives of arbitrary order on a curve

N_CrvEval – Compute a point on a curve
N_CrvDerivs – Compute derivatives of a curve
N_CrvEvalTangent – Unit tangent and point of a curve

  1. Compute the Frenet frame on a curve at a given point

N_CrvEvalFrenetFrame – Compute the Frenet frame of a curve at a given point

  1. Compute point and partial derivatives of arbitrary order on a NURBS surface

N_SrfEvalPt – Compute a point on a surface
N_SrfDerivs – Compute derivatives of a surface

  1. Compute the surface normal vector at a given point

N_SrfEvalPtPtDerivNormal – Compute the surface normal at given parameter values
N_SrfEvalPtNormalDeriv – Compute 1st and 2nd derivatives of UNIT surface normal

  1. Compute curvature on curves and surfaces

N_CrvGetCurvatureDeriv – Compute derivative of curvature of curve
N_CrvEvalCurvature – Compute curvature and osculating circle of a curve
N_SrfEvalPtCurvature – Compute Gaussian, mean and principal curvatures
N_SrfEvalPtDerivCPt – Derivative of a NURBS surface wrt a control point

  1. Cross boundary derivatives

N_CreateDerivField – Cross-boundary derivative from surface, end twists and derivatives
N_CrossBoundaryDerivsVectorField Cross-boundary derivative data from vector field

Transformations, Projections and Interactive Shaping Tools

  1. Translation, rotation and scaling of curves and surfaces

N_CrvTranslate – Translate a curve N_CrvFromCrvTranslation Translate a curve, but not in place
N_CrvRotateAboutAxis – Rotate a curve about a general axis
N_CrvScale – Scale a curve with respect to a point
N_CrvTransform – Transform a curve given a 4×4 matrix
N_SrfTranslate – Translate a surface
N_SrfRotateAtPt – Rotate a surface about a general axis
N_SrfScale – Scale a surface with respect to a point
N_SrfTransform – Transform a surface given a 4×4 matrix

  1. Parallel and perspective projection of curves and surfaces onto a plane

N_CrvProjectOntoPlane – Project a curve onto a plane
N_SrfProjectOntoPlane – Project a surface onto a plane

  1. Reposition curve/surface control points to obtain desired translational changes

N_CrvShapeModifyCPts – Reposition curve control points
N_SrfShapeModifyCPts – Reposition surface control points

  1. Modify curve/surface weights to obtain desired perspective changes
  2. Curve warping

N_CrvShapeWarp – Warp curve
N_CrvShapeApproxPts – Shape curve to approximate given points
N_CrvShapeApproxPtsUpdate – Shape curve to approximate given points
N_CrvShapeInterp – Shape curve to interpolate given points
N_CrvShapeDerivConstraintsOver – Constraint-based curve shaping with interp or approx
N_FitCrvShape – Interpolate points based on curve shaping

  1. Surface region warping and polyline warping

N_SrfShapeRegionWarp – Surface region warp
N_SrfShapePolylineWarp – Surface polyline warp

  1. Curve flattening

N_CrvShapeFlatten – Flatten a curve

  1. Surface modification

N_SrfShapeFlatten – Flatten a surface
N_SrfShapeApproxPts – Shape surface to approximate given points
N_SrfShapeDerivConstraints – Constraint-based surface shaping with interp or approx
N_SrfShapeInterp – Shape surface to interpolate given points

  1. Curve bending

N_CrvShapeBend – Bend a curve

  1. Surface axial and central bending

N_SrfShapeAxialBend – Surface axial bending
N_SrfShapeCentralBend – Surface central bending

  1. Curve axial deformations: pinch, taper, twist and shear

N_CrvShapeAxialDeform – Axial deformations of curves

  1. Surface axial deformations: pinch, taper, twist and shear

N_SrfShapeAxialDeform – Axial deformations of surfaces
N_FitSrfApproxShape – Approximatte random points based on surface shaping
N_FitSrfInterpShape – Interpolate points based on surface shaping

  1. Constraint-based curve modification via control point repositioning

N_CrvShapeDerivConstraints – Constraint-based curve modification

  1. Constraint-based surface modification via control point repositioning

Geometric Tools

  1. Knot insertion and knot refinement curves and surfaces

N_CrvInsertKnot – Insert a knot into a curve
N_CrvRefine – Refine a curve with a given knot vector
N_tooCrvCleanSpans – Curve remove excessive knots and control points
N_SrfInsertKnot – Insert a new knot into a surface
N_SrfReplaceKnotVector. -Refine a surface with a given knot vector
N_BasisSplitLongestSpan – Add knots to knot vector
N_BasisIncreaseKnotMult – Increase multiplicity of internal knots
N_BasisInsertKnots – Refine knot vector
N_BasisSplitNLongestSpans – Refine knot interval

  1. Inverse knot insertion curves and surfaces

N_CrvInverseKnotInsert – Curve inverse knot insertion
N_SrfInsertKnotPt – Surface inverse knot insertion

  1. Decomposition into piecewise Bezier form curves and surfaces

N_CrvDecomposeBez – Decompose a curve into Bezier pieces
N_SrfDecomposeToBez – Decompose a surface into Bezier patches

  1. Knot removal curves and surfaces, including “cleaning” routines data reduction with boundary constraints

N_CrvRemoveKnots – Remove all removable knots from a curve
N_CrvRemoveAllKnotsConstraints – Remove all removable knots from curve with constraints
N_CrvRemoveKnot – Remove one knot multiple times from a curve
N_CrvShapeRemoveKnots – Remove all removable knots from a curve being shaped
N_SrfRemoveAllKnots – Remove all removable knots from a surface
N_SrfRemoveKnotConditional – Remove one knot from a surface multiple times
N_SrfRemoveKnotsKeepBoundaries – Remove knots from surface with boundary constraints
N_SrfShapeRemoveKnots – Remove all removable knots from a surface being shaped

  1. Degree elevation curves and surfaces

N_CrvElevateDegree – Elevate the degree of a curve
N_SrfElevateDegree – Elevate the degree of a surface

  1. Degree reduction curves and surfacesN_CrvReduceDegreeOnce – Reduce the degree of a curve
    N_CrvReduceDegree – Reduce the degree of a curve as much as possible
    N_SrfReduceDegree – Reduce the degree of a surface
    N_SrfReduceDegreeToTol – Reduce the degree of a surface as much as possible
  2. Subcurve and subsurface extraction

N_CrvExtractCrvSeg – Extract a curve segment from a curve
N_SrfExtractPatch – Extract a segment patch from a surface
N_SrfExtractBoundaryCrvs – Extract boundary curves from surface

  1. Curve and surface splitting

N_CrvSplit – Split a curve at a given parameter
N_SrfSplit – Split a surface at a given parameter

  1. Extraction of isoparametric curves from surfaces

N_SrfExtractIsoCrv – Extract iso-curve from surface

  1. Reparameterize a curve

N_SrfReparamMultKnots – Reparameterize curves with respect to arc length
N_SrfReparamFunc – Reparameterize a curve with a B-spline function
N_CrvReparamRat – Curve reparameterization with linear rational function

  1. Make curve end weights equal
  2. Reparameterize a surface

N_SrfReparamArcLength – Reparameterize surfaces with respect to arc length
N_SrfReparmRat – Surface reparameterization with linear rational function

Triangular Tessellation of Trimmed Surfaces

N_TessTrimmedSrf – Tessellate a trimmed surface
ST_TessRegionOfRectangles – Triangulate a trimmed region bounded by many outer loops

Conversion between Forms

  1. Conversion from NURBS to piecewise Bezier or polynomial spline form

N_CrvNurbsToPiecewise – Convert curve into piecewise power basis form
N_ConvertNurbsToPowerBasis – Convert surface into piecewise power basis form

  1. Conversion from piecewise Bezier or polynomial form to NURBS form

N_CrvPiecewiseToNurbs – Convert a piecewise power basis curve to form
N_ConvertPiecesToNurbs – Convert a piecewise power basis surface to form

  1. An extensive set of routines to support the evaluation and processing of Bezier and polynomial curves and surfaces

Conversion fo NL_IGES Curves and Surfaces

N_Iges100Arc – Create circular arc from NL_IGES Entity 100 data
N_Iges102CompositeCrv – Create composite curve from NL_IGES Entity 102 data
N_Iges104ConicArc – Create conic arc from NL_IGES Entity 104 data
N_Iges106LinearCrv – Create degree 1 curve from NL_IGES Entity 106 data
N_Iges108Plane – Create bounded plane from NL_IGES Entity 108 data
N_Iges100Line – Create bounded line from NL_IGES Entity 110 data
N_Iges112CrvNonRat – Create curve from NL_IGES Entity 112 data
N_Iges114NonRatSrf – Create surface from NL_IGES Entity 114 data
N_Iges118RuledSrf – Create ruled surface from NL_IGES Entity 118 data
N_Iges120RevolvedSrf – Create revolved surface from NL_IGES Entity 120 data
N_Iges122ExtrudedSrf – Create extruded surface from NL_IGES Entity 122 data
N_Iges124Matrix – 4×4 transformation matrix from NL_IGES Entity 124 data
N_Iges126Crv – Create curve from NL_IGES Entity 126 data
N_Iges128Srf – Create surface from NL_IGES Entity 128 data

Curve and Surface Extensions and Boundary Modifications, with continuity control

N_CrvExtendByDist – Extend a curve a given distance
N_CrvExtendToPt – Extend a curve to a point
N_SrfModifyBoundaryCrv – Modify surface to assume new boundary curve
N_SrfExtendByDist – Extend a surface a given distance
N_SrfExtendToCrv – Extend a surface to a curve

Miscellaneous Curve and Surface Routines

  1. Arc length of a curve segment

N_CrvArcLength – Compute arc length of segment of curve

  1. Project a point to a curve or surface closest point projection, given a point on a curve/surface, to determine the corresponding parameter space value

N_CrvClosestPtMultiple – Global curve point inversion/projection
N_CrvClosestPt – Curve point inversion/projection using Newton’s method
N_SrfGetClosestPt – Surface point inversion/projection using Newton’s method

  1. Given a tangent direction on a surface, determine the corresponding direction in parameter space

N_InvertTangentSrfCrv – Surface curve tangent vector inversion

  1. Reverse parameter direction of a curve or surface

N_CrvReverse – Reverse a curve
N_SrfReverse – Reverse a surface

  1. Unclamp a clamped curve or surface
  2. Scale/translate the parameter domains of a curve or surface
  3. Various conic utilities; e.g. determine type of conic, implicit equation of conic, and geometric characteristics of a conic vertex, radii, axes, etc

N_ConicCalcGeomDef – Compute geometric definition of conic
N_CalcConicImplicitEq – Compute the implicit equation of a conic curve
N_CalcConicShapeFactor – Compute conic shape invariance
N_ConicGetType – Determine the type of conic

  1. Computation of minmax box of curves and surfaces

N_CrvGetBBox – Compute min-max box of a curve
N_SrfGetBBox – Compute min-max box of a surface

  1. Make a set of curves or surfaces compatible same degrees and knots

N_CrvsMakeCompatible – Make curves compatible
N_CrvsMakeCompatibleAdjKnots – Make curves compatible using knot adjustment
N_CrvsMakeCompatibleApprox – Make curves compatible using approximation
N_CrvsMakeCompatibleConstraints – Make curves compatible with approximation & constraints
N_MakeSrfsCompatibleUV – Make surfaces compatible

  1. Analyze curves for cusps, straight line segments, and degeneracy’s.
  2. Curve and surface cleaning, with reparameterization for enhanced cleaning of piecewise Bezier curves and surfaces

N_CrvRemoveAllKnotsArcLen – Clean curve
N_CrvRemoveKnotsTangentConstraints – Clean curve with end tangent control
N_CrvRemoveDegenSegs – Remove degenerate segments of a curve
N_SrfRemoveAllKnotsArcLen – Clean surface
N_SrfReparmAndRemoveKnotsKeepBoundaries – Clean surface with boundary constraints

  1. Approximately equally spaced points on a curve
  2. Points on a surface

N_SrfEvalPtGrid – Compute a grid of points on a surface
N_SrfEvenSpacedPts – Compute equally spaced points on a surface

Scalar-valued Functions of One or Two Variables

  1. Creation of scalar-valued NURBS
  2. Functions of 1 or 2 parameters
  3. Evaluation of scalar-valued functions, including derivatives of any order

A Complete Set of Functions to Process Bezier Curves and Surfaces

B-spline and Basis Functions

Evaluation of rational and non-rational basis functions.

For curves:

N_SrfNonRatBasisDerivs, N_BasisEvalArray, N_CrvRatBasisDerivs, N_BasisDerivs, N_BasisDerivsArray, N_BasisEval, N_BasisIDerivs, N_BasisIEval, N_CrvBasisDerivs, N_CrvBasisIEval, N_CrvRatBasisIEval, N_CrvRatBasisIDerivs

For surfaces:

N_SrfRatBasisDerivs, N_SrfRatBasisIEval, N_SrfRatBasisIDerivs, N_SrfBasisDerivs, N_SrfBasisIEval

Differentiation of Curves, Surfaces, and Basis Functions with Respect to a Knot

N_SrfDerivKnot – Compute derivatives of a surface wrt a knot
N_CrvEvalFirstDerivKnot – First derivative of a curve with respect to a knot

also see: N_BasisKnotDerivs, N_CrvRatBasisKnotDeriv, N_BiBasisKnotDeriv N_SrfRatBasisKnotDeriv, N_BasisIKnotDeriv N_CrvRatBasisIKnotDeriv, N_SrfRatBasisIKnotDeriv

Symbolic Operators

  • Extract derivative curves and surfaces
  • Compute maximum bounds on magnitudes of curve/surface derivatives
  • Form linear combinations of curves/surfaces
  • Extract the surface of normal vectors to a surface
    N_ApproxNormalSrfWithSrf – Approximate unit normal surface of NLib surface
  • Compute various products of curves, surfaces, and functions

Basic Geometric Computations and Constructions

An extensive set of functions to perform basic geometric operations on vectors, lines, polygons, and planes; this includes distances, projections, intersections, bounding boxes, transformations, closure, and containment tests

Basic Math Routines

An extensive set of functions to perform basic mathematical and numerical operations such as matrix algebra, solution to linear systems of equations, Horner evaluation of polynomials, polynomial root finding, and computation of the binomial coefficients

Other Utilities

A very large set of low-level curve and surface utilities; e.g. copy a curve or surface, input/output a curve or surface from/to an ASCII or NL_IGES file, inquire curve or surface attributes closed?, rational?, etc

Curve and Surface Error Handling

An extensive set of functions to check validate object data and set error flags; e.g. validate the data defining a curve or surface object, and check if a parameter is within valid bound

Fitting to Points

Point fitting in NLib is supported with a bag of tools to be used appropriately depending on what is known about the point sets.

The components of a point fitting include the point set, the output surface, the surface properties, the constraints, and the uv-mapping as described in the following.

  1. The point set. A collection of 3d points in to be used to define the shape of a surface. The points within the point set are called sample points.
  2. The output surface. The surface can be computed to either approximate or interpolate the points. In NLib fitting all output surfaces are non-rational BSplines.
  3. The surface properties. The output surface properties include the surface’s U and V-direction degrees, knot vectors, and control point counts. Various functions in the NLib fitting tool allow various combinations of surface properties to be specified by the calling function or to be computed by the algorithm.
  4. The constraints. A set of geometric properties that must be interpolated by the output surface in addition to fitting the point set. Different fitting tools support different constraints allowing the user to select the effects desired. Constraints which are supported include:
    • no constraints.
    • boundary curve shape constraints.
    • boundary curve cross-tangent constraints
    • boundary curve higher-order cross-tangent curve constraints.
    • internal point position constraints.
    • internal point normal constraints.
    • internal point cross-tangent constraints.
  5. The uv-mapping. An assignment of a surface UV-point to every point in the input point set. This is the hard part of point fitting. A good uv-mapping of a point set will yield a good fitted surface and a bad uv-mapping will yield a mangled surface. There is not general algorithm that will find the best uv-mapping for an arbitrary set of sample points. As such, the NLib fitting package supports several different schemes for computing uv-mappings and allows uv-mapping to be passed as input when the calling functions can compute a good uv-mapping on their own.

Point fitting works well when enough sample points are known to characterize the desired surface and a good uv-mapping is found.

Point Sets

The more known about the shape of the points set, the more likely it is to find a good uv-mapping. As such, the NLib fitting functions support three different kinds of point sets.

  1. Grid-of-Points point sets. A grid-of-points point set is a set of elevation values measured on some regular sampling interval. It’s easiest to think of an array of of sample points on the XY plane each lifted in the Z axis to the height of the surface to be defined. In NLib, the grid-of-points point set does not have to be oriented on the XY plane but may be arbitrarily oriented. Since the points are ordered they can be indexed by their location in the grid as Point[i][j]. The connectivity between every sample point and it’s neighbors is known from the sample points index in the sample grid, e.g. Point[i][j] is connected in the u direction to points Point[i-1][j] and Point[i+1][j] and is connected in the v direction to points Point[i][j-1] and Point[i][j+1].
  2. Rows-of-Points point sets. A column-of-Points point set is similar to the grid-of-points, but the number of points in each row of the sample grid may vary. This is useful if an original shape was measured as a sequence of cross-sections sampled at regular intervals and due to the shape of the surface, the number of sample points in each cross-section varies. Points can still be index in an array but the connectivity of points is only known in one direction from the indexing, that is Point[i][j] is connected in the u direction to points Point[i-1][j] and Point[i+1][j].
  3. Cloud-of-Points point sets. A cloud-of-points points set is an arbitrary collection of 3d points. The are indexed in a 1d vector as Point[0], Point[1], …, Point[n] and no information about the connectivity between points is known. Building uv-mappings for cloud-of-points point sets is problematic.

Building UV-Mappings

Different uv-map construction techniques are used for different point sets attempting to take advantage of as much of the connectivity information as possible to make a good uv-mapping.

UV-Map construction for Grid-of-Points. Each row and column of the grid-of-points point set is mapped to a iso-parameter curve. Two knot vectors are computed for the U and the V directions and the knot spacing in those knot vectors are computed from the 3d properties of the sample points.

Three methods are supported:

  1. Indexing: A uniform step in the u and v directions is associated with the indices of the grid-of-points arrays and each sample point uv-value is assigned from its indes values as: Point[i][j].u = i * u_step. Point[i][j].v = i * v_step.
  2. Chordlength: The step size for each index increment is computed as the average distance between sample points as:

    u[i+1] – u[i] = Avg( Dist(Point[i+1][j], Point[i][j])) for all j values,

    and v[j+1] – v[j] = Avg( Dist(Point[i][j+1], Point[i][j])) for all i values.

  3. Centripetal: the step size for each index increment is computed as the average of the square-root of the distance between sample points as:

        u[i+1] – u[i] = Avg( SquareRootDist(Point[i+1][j], Point[i][j])) for all j values,

    and v[j+1] – v[j] = Avg( SquareRootDist(Point[i][j+1], Point[i][j])) for all i values.

The method which produces the best uv-mapping for the best fit-surface depends on the sample points. If little is known about the sample points it seems the most generally robust approach is the Chordlength approach.

UV-Map Construction for Rows-of-Points

Each row (not the columns) of a Column-of-Points points set is mapped to an isoparameter curve. Within each row of the point set the sample points are examined to assign v values based on one of the 3 methods described above.

UV-Map Construction for Cloud-of-Points

All uv-maps made for Clouds-of-Points point sets are constructed by projecting the sample points to a target surface. The surface can be supplied by the calling function or constructed in one of the following manners.

  1. Project to a plane. The plane may be specified by a normal vector or can be computed from the point set by finding the best fit plane to the sample points.
  2. Project to a sphere. The sphere may be specified by a center point or can be computed from the point set by finding the best fit sphere to the sample points. Currently, no single function exports the project to a sphere feature.

    This must be coded up as a sequence of find the sphere with

    N_FitSphereToPtsGlobal(),

    then project to the sphere with

    N_FitCalcSrfParamsBoundarySrf().

  3. Project to Nurbs surface. The nurbs surface can be specified by the calling function or may be computed as a blended coons patch. The surface used for projection is called the base surface.

Interpolations

Some of the fitting routines create interpolating surfaces, that is every point in the point set is interpolated exactly by the surface. The advantage of such surfaces is accuracy. The disadvantage is that the fitted surface will have large control point counts and will reflect any noise in the data set as bumpy surfaces. In addition to interpolating the position of the sample points it’s possible to force the interpolation of the cross-tangents of the sample points.

Approximations

Some of the fitting routines create approximating surfaces, that is every point int the point set is approximated. The error for a sample point is the distance between the sample point and the associated surface point for the sample point’s uv value, computed from the uv-mapping. Some of the approximating routines support constraints so an approximating surface can be forced to interpolate some of the sample points. Constraints support boundary curve interpolation, boundary curve cross-derivative interpolation and internal point cross-tangent interpolation.

There are two major types of approximation algorithms: Point fill followed by knot removal and least squares fitting.

In the point fill algorithm, a surface is created with a large number of control points that interpolate the points and then as many knots are removed as possible while maintaining the error at the sample points below a given tolerance value.

In the least squares fitting algorithm, the control point positions for a surface with specified degrees and knot-vectors and a given uv-mapping are computed to minimize the square root of the sum of errors at all sample points. This basic computation is placed inside a loop where a sequence of higher and higher control point count surfaces are fitted to the sample points until a surface is found whose error in the least squares sense is less than a tolerance. The least square algorithm can be made to support the same set of constraints as the point fill approach.

UV-Map and Knot Vector Building

N_FitCalcSrfParamValues compute grid-of-points uv-mapping using a uniform, chordlength, or centripetal rule.

N_FitSrfInterpParams compute u or v param values for grid-of-points using equal spacing, chordlength, or centripetal rule.

N_FitSrfCalcParams compute cloud-of-points uv-mapping by projecting points to a best-fit or input plane.

N_FitCalcSrfParamsBoundary compute cloud-of-points uv-mapping by mapping to a base surface made as a blended coons patch from given boundary curves.

N_FitCalcSrfParamsBoundarySrf compute cloud-of-points uv-mapping by mapping to a base surface. Base surface can be given or computed from boundary curves.

N_FitSrfCalcKnotVectors set knot values of sized knot vectors based on a cloud of points parameter data.

Knot Removal

N_FitSrfTangentError test whether the removal of one knot will change a surface shape at specifed uv params by more than specified tolerance.

N_FitSrfRemovalBoundary removes one knot from a surface and updates error bound to a set of sample points.

N_FitSrfApproxRemoveKnots removes max number of knots from surface while keeping surface within tolerance of a given set of sample points.

N_FitSrfInterpRemoveKnots remove knots while interpolating positions at given parameter points.

N_FitSrfApproxRemoveKnotsTangents remove knots while preserving position tolerances at given parameter points and opt tangent constraints on boundaries.

Interpolate Functions

N_FitSrfToPtsKnots interpolate grid-of-points with given uv-mapping to a nurbs surface with one control point for each grid point.

N_FitSrfInterpBicubic interpolate grid-of-points with a C11 bicubic nurbs fill of the data.

N_FitSrfFuncInterp interpolate grid-of-points with given uv-mapping to a nurbs surface function with one control point for each grid point.

N_FitSrfInterpVariablePts interpolate rows-of-points with nurbs surface of specified degree and a param that trades off interpolant quality with number of control points

N_FitSrfInterpBoundary interpolate cloud-of-points and boundary curves and optional uv-mapping with nurbs surface.

N_FitSrfInterpShape interpolate cloud-of-points, boundary curves, and optional cross-tangent boundary constraints to a tolerance with a nurbs surface algorithm finds uv-mapping, knot vectors, and control points using input boundary curve properties as a start.

Approximating Functions

N_FitSrfToPts fit grid-of-points to a nurbs surface of specified degrees. The algorithm finds the uv-mapping, knotVectors, and ControlPoint counts.

N_FitSrfApproxTol fit grid-of-points to given tolerance with nurb surface of specified degrees. The algorithm finds uv-mapping, knotVectors, and ControlPoint counts.

N_FitSrfLstSqApprox fit grid-of-points to a nurbs surface of specified degrees and ControlPoint counts. The algorithm finds the uv-mapping and knot vectors.

N_FitSrfLstSqKnots fit grid-of-points with given uv-mapping to a nurbs surface of specified degrees, knotVectors, and ControlPoint counts.

N_FitSrfInterpTangents fit grid-of-points with optional boundary cross-tangent direction or vector constraints (i.e. magnitude either free or fixed) with a nurbs surface. The uv-mapping may be given or computed by the algorithm. The knotVectors may be given or computed by the algorithm. The ControlPoint counts are found by the algorithm.

N_FitSrfApproxTangentsTol; fit grid-of-points with optional boundary cross-tangent constraints with a nurbs surface of specified degrees. The algorithm finds the uv-mapping and ControlPoint counts.

N_FitSrfToPtsAndBoundary; fit grid-of-points with nurbs surface defined by given boundary curves, optionally allow extra knots to tighten fit

N_FitSrfToVariablePts fit rows-of-points with a dense nurbs surface of specified degree followed by knot removal algorithm finds uv-mapping, knotVectors, and ControlPoint counts

N_FitSrfApproxShape fit cloud-of-points, boundary curves, and optional cross-tangent boundary constraints to a tolerance with a nurbs surface algorithm finds uv-mapping, knot vectors, and ControlPoints using input boundary curve values as a start.

MISC

N_FitArcToEndPtsAndTangents find ControlPoint nurbs biarc positions to fit given start and end point positions and tangents

N_FitPlaneToPts; fit cloud-of-points to best fitting planar patch

N_FitSphereToPtsGlobal fit cloud-of-points to best fitting sphere or planar patch, sphere segmented globally

N_FitSphereToPtsLocal fit cloud-of-points to best fitting sphere or planar patch, sphere segmented locally

Arithmetic

  1. N_Combine4CPts Compute combination of four control points
  2. N_Combine4Pts Compute combination of four points
  3. N_TranslateSum2CPts Translate combination of two control points
  4. N_TranslateSum2Pts Translate combination of two points
  5. N_Combine2CPts Compute combination of two control points
  6. N_Combine2Pts Compute combination of two points
  7. N_CPtToPt Map control point to w = 0 hyperspace
  8. N_Cross2CPts Cross product of two control points
  9. N_Diff2CPts Compute the difference of two control points
  10. N_DiffCPtPt Compute the difference of control point and point
  11. N_Diff2Pts Compute the difference of two points
  12. N_Dot2CPts Dot product of two control points in Euclidean space
  13. N_Dot2CPtsIn4D Dot product of two control points in homogeneous space
  14. N_Dot2Pts Dot product of two points
  15. N_CPtToPtNow Map homogeneous control point to Euclidean control point
  16. N_CPtToPtEuclid Compute Euclidean point from homogeneous coordinates
  17. N_CPtToWxWyWz Extract coordinates of a control point
  18. N_CPtToXYZ Extract Euclidean coordinates of a control point
  19. N_PtToXYZ Extract coordinates of a point
  20. N_CPtGetW Extract the weight of a control point
  21. N_CPtGetZ Extract the z coordinate of a control point
  22. N_CPtFromWxWyWz Create control point object from coordinates
  23. N_PtFromXYZ Create point object from coordinates
  24. N_CopyCPt Initialize control point
  25. N_CopyPt Initialize point
  26. N_CPtMagnitude Compute magnitude of control point
  27. N_PtMagnitude Compute magnitude of point
  28. N_CPtToPtAndW Map control point to Euclidean space
  29. N_PtToCPt Convert point to control point
  30. N_CPtRatDeriv Compute rational derivative from Euclidean derivative
  31. N_CPtResetW Re-weight control point
  32. N_ScaleCPtXYZ Scale first three coordinates of a control point
  33. N_ScaleCPt Scale control point
  34. N_ScalePt Scale a point
  35. N_ScaleCPtWithPtAndVector Scale control point with respect to a point
  36. N_CPtSetW Set w component of control point
  37. N_CPtSetX Set x component of control point
  38. N_CPtSetY Set y component of control point
  39. N_CPtSetZ Set z component of control point
  40. N_Sum2CPts Compute the sum of two control points
  41. N_SumCPtAndPt Compute the sum of control point and point
  42. N_Sum2Pts Compute the sum of two points
  43. N_TransformCPt Transform control point given a 4×4 matrix
  44. N_TransformPt Transform point given a 4×4 matrix
  45. N_TranslateCPt Translate control point by a given vector
  46. N_VectorBlendCPt Update control point by adding a term to it
  47. N_VectorBlendPt Update a point by adding a term to it
  48. N_VectorCombineCPts Compute vector combination of two control points
  49. N_VectorCombinePts Compute vector combination of two points
  50. N_Weight Compute weighted control point

Bezier

  1. N_BezEvalBasis Compute all Bernstein polynomials at a given parameter
  2. N_BezCalcLength Compute arc length of Bezier curve
  3. N_BezEvalOneBasis Evaluate a Bernstein polynomial at a given parameter
  4. N_BezToPowerBasis Convert Bezier curve to power basis form
  5. N_BezElevateDegree Elevate the degree of a Bezier curve
  6. N_BezReduceDegree Reduce the degree of a Bezier curve
  7. N_BezGetDegreeElevationMatrix Compute Bezier curve degree elevation matrix
  8. N_BezCrvExtend Extend Bezier curve to share same derivatives
  9. N_BezFuncMultiplyBezCrv4D Product of Bezier function and Bezier curve in 4-D
  10. N_BezFuncMultiplyBezCrv Product of Bezier function and Bezier curve
  11. N_BezFuncEvalPt Compute a point on a Bezier curve function
  12. N_BezFuncMultiplyBezFunc Product of two Bezier functions
  13. N_BezCircArcFrom3Pts Compute weighted control points of Bezier circle
  14. N_BezCenterRadiusFrom3CPts Center, radius, start/end angles of 2-D Bezier circle
  15. B_PowerBasisToBez Convert power basis curve to Bezier form
  16. N_BezFuncMultiplyBezCrvMatrix Compute Bezier product matrix
  17. N_BezReparam Reparameterize a Bezier curve with a Bezier function
  18. N_BezSplit Split a Bezier curve at a given parameter
  19. N_BezCubicFromPtsAndTangents Least-squares cubic to end points and end tangents
  20. N_BezCrossProduct Cross product of two Bezier curves
  21. N_BezCrvEvalPt Compute a point on a Bezier curve
  22. N_BezCrvDotProduct Dot product of two Bezier curves
  23. N_BezDegreeReduceCoefs Compute Bezier degree reduction coefficients
  24. N_BezFuncDegreeElevate Elevate the degree of a Bezier function
  25. N_BezInterp4Pts Global cubic curve interpolation
  26. N_BezInterpNPts Global curve interpolation
  27. N_BezSetConicWeight Compute weight of conic arc closest to that of circle
  28. N_BezInversePowerMatrix Inverse of power basis conversion matrix
  29. N_BezInverseReparamMatrix Non-zero elements of inverse of reparameterization matrix
  30. N_BezCircArcFromPtsAndTangents Compute circular arc to given end points and tangents
  31. N_BezConicArcFromPtsAndTangents Create a Bezier conic arc
  32. N_BezGetPowerConversionMatrix Non-zero elements of power basis conversion matrix
  33. N_BezCalcArcLength Recursive procedure for Bezier arc lenth computation
  34. N_BezGetReparamMatrix Non-zero elements of reparameterzation matrix
  35. N_BezSrfToPower Convert Bezier surface to power basis form
  36. N_BezSrfElevateDegree Elevate the degree of a Bezier surface for a row/column
  37. N_BezSrfReduceDegree Reduce the degree of a Bezier surface
  38. N_BezSrfExtend4D Extend Bezier surface strip to share same derivatives
  39. N_BezSrfFuncElevateDegree Elevate the degree of a Bezier surface function
  40. N_BezSrfFuncEvalPt Compute a point on a Bezier surface function
  41. N_BezSrfFuncMultiply Product of bivariate Bezier functions
  42. N_BezSrfMultiplySrfFunc Product of bivariate Bezier function and Bezier surface
  43. N_BezConicSplit Split a Bezier conic arc
  44. N_BezSrfPowerToBez Convert power basis surface to Bezier form
  45. N_BezSrfCrossProduct Cross product of two Bezier surfaces
  46. N_BezSrfEvalPt Compute a point on a Bezier surface
  47. N_BezSrfDotProduct Dot product of two Bezier surfaces

Error Checking

  1. N_CrvIsFuncSized Check for sufficient storage in curve function structure
  2. N_ErrClear Clear error handle
  3. N_CheckCPtMatStorage Storage check in control point matrix structure
  4. N_CrvHasEqualCPts check curve control points equal
  5. N_CrvReplaceEqualCPts: Replace (near-) equal curve control points
  6. N_CrvCountsAreValid Check curve definition
  7. N_CrvIsValid A complete curve check
  8. N_CrvIsNotReversed Check curve control points for direction reversal at ends
  9. N_CrvIsSized Check for sufficient storage in curve structure
  10. N_CrvWeightsAreValid Check whether curve weights are within range
  11. N_KnotVectorIsEndParam Check if parameter <= first knot or >= last knot
  12. N_ErrGetType Return type of error
  13. N_CheckIntMatStorage Check for sufficient storage in integer matrix structure
  14. N_KnotVectorIsValid Check knot vector definition
  15. N_KnotVectorIsParamOutOfBounds Check if parameter is out of range
  16. N_CheckPtMatStorage Check for sufficient storage in point matrix structure
  17. N_CheckRealMatStorage Check for sufficient storage in real matrix structure
  18. N_ErrSet Set error handle
  19. N_SrfIsFuncSized Check storage in surface function structure
  20. N_SrfCountsAreValid Check surface definition
  21. N_SrfIsValid A complete surface check
  22. N_SrfIsSized Check for sufficient storage in surface structure
  23. N_SrfWeightsAreValid Check whether surface weights are within range

Geometrical

  1. N_AreaSpherePolygon Compute Area Of Spherical polygon
  2. N_AreaSpherePatch Compute Area of rectangular spherical patch
  3. N_CPtsAreColinear Are three control points collinear?
  4. N_PtsAreEqual Are points the same?
  5. N_PtsAreColinear Are 3 points colinear
  6. N_VectorsAreParallel Are vectors point to the same direction?
  7. N_GetBBoxData Break min-max box object down to its components
  8. N_BBoxGetCenter Compute the center of a box
  9. N_BBoxDefine Define bounding box
  10. N_BBoxGetDiagonal Compute the diagonal of a box
  11. N_BBoxGetDimensions Compute the dimensions of a box
  12. N_BBox2dCalcOverlap Compute area of 2-D box overlap
  13. N_CalcCircCenterAndRadius Compute center and readius of a circle given by 3 points
  14. N_CalcCircArcDerivs Derivatives of a circle given in trigonometric form
  15. N_PolygonSetIndex Set index in polgon definition
  16. N_DistCPolygon Compute the length of a control polygon
  17. N_DistCptCptHomo Compute homogeneous distance between two control points
  18. N_DistCptCpt Compute the distance between two control points
  19. N_DistCPolygonHomo Compute the length of a control polygon in 4-D
  20. N_DistPtLineSeg Distance between point and line segment
  21. N_DistPtArc Distance between a point and a circular arc
  22. N_DistPtInfLine Compute distance of point from line
  23. N_DistSignedPtLine Distance of point from line given in implicit form
  24. N_DistSignedPtPlane Distance of point from plane given in implicit form
  25. N_DistPolygon Compute the length of a polygon given by the vertices
  26. N_DistPtPt Compute the distance between two points
  27. N_DistPtPt2d Compute the distance between two points in 2-D
  28. N_DistPtPlane Compute distance of point from plane
  29. N_DistPerpPtLineSeg Distance between point and line segment
  30. N_DistSqPtPt2d Compute the squared distance between two points in 2-D
  31. N_DistSqPtPt Compute the squared distance between two points
  32. N_IsectLineSegs Do line segments intersect?
  33. N_CPtCalcWeightColinear Get weight of one control point to ensure collinearity
  34. N_LineImplicitToPtVector Implicit equation of line to point-vector form
  35. N_PlaneImplicitToPtNormal Implicit equation of plane to point-normal form
  36. N_LineIsectPolygon Intersect closed convex polygon with line segment
  37. N_IsectLineLine Intersect two lines
  38. N_IsectLinePlane Intersect line and plane
  39. N_IsectLineSegs Intersect two line segments
  40. N_IsectPlanePlane Intersect two planes
  41. N_ENetIsClosed Is point net closed?
  42. N_PtsAreInPolygonGravityField Point grid-in-polygon gravity field test
  43. N_PtsAreInPolygon Point grid-in-polygon test
  44. N_EPolygonIsClosed Is polygon closed?
  45. N_PtIsContainedByEPolygon Point-in-polygon test
  46. N_IntervalGetData Break interval object down to its components
  47. N_LineCalcBBox Compute extended bounding box of line segment
  48. N_LineGetData Break line object down to its components
  49. N_LineGetDir Get direction vector of line
  50. N_LineSetBoundingFlag Set bounding flag of line
  51. N_PtGetSideOfLine Line-point side test
  52. N_LinePtVectorToImplicit Point-vector definition of 2D line to implicit form
  53. N_CreateCircFrom2dPts Least-squares circle to a set of 2D points
  54. N_LineFitPts Best fitting line to scattered points
  55. N_PlaneFit3dPts Best fitting plane to scattered points
  56. N_LineFit2dPts Least-squares line to a set of 2D points
  57. N_LineFit3dPts Least-squares line to a set of 3D points
  58. N_FitPlanePts Best-fit plane to a set of 3D points
  59. N_SphereFit3dPts Leas-squares sphere to a set of 3D points
  60. N_CreateInterval Make interval object
  61. N_CreateLinePtPt Make line object from end points
  62. N_CreateLineStartDirVector Make line object from start point and direction vector
  63. N_ENetFromPts Make point net object
  64. N_CreatePlanePtNormal Make plane object from point and normal vector
  65. N_EPolygonFromPts Make polgon object
  66. N_CreateRectangle Make rectangle object
  67. N_MaxAreaPlane3dPts Maximum area plane to grid of points
  68. N_ENetGetBBox Compute bounding box of point net
  69. N_NetGetClosestLegIndex Find index of control net leg closest to a given point
  70. N_ENetGetPts Break net object down to its components
  71. N_PlaneGetData Break plane object down to its components
  72. N_PlanePtNormalToImplicit Point-normal definition of plane to implicit form
  73. N_PlaneGetNormal Get normal vector of plane
  74. N_PtGetSideOfPlane Plane-point side test
  75. N_Pts1dCalcBBox Compute the min-max box of a 1-D point array
  76. N_Pts1dGetMaxExtent Compute maximum extent of 1-D point array
  77. N_Pts2dCalcBBox Compute the min-max box of a 2-D point array
  78. N_Pts2dGetMaxExtent Compute maximum extent of 2-D point array
  79. N_PairSelected2dPts Find k closest points to given point in 2-D point set
  80. N_Order3dPts Order points along a 3-D curve
  81. N_BoundRect2dPts Bounding Rectangle of a 2D point set
  82. N_PolygonGetBBox Compute bounding box of polygon
  83. N_PolygonGetClosestLegIndex Find index of polygon leg closest to a given point
  84. N_PolygonOffset Compute the offset of a polygon
  85. N_PlaneFitOrdered3dPts Plane fit to 3D polyline points
  86. N_ProjectPtClosePolyPt Get parameter of point based om polygonal approximation
  87. N_EPolygonGetPts Break polygon object down to its components
  88. N_ProjectPtLineParam Project point onto line segment
  89. N_ProjectPtQuad Project point onto a quadrilateral
  90. N_ProjectPtLine Project point onto a line
  91. N_ProjectPtPlane Project point onto a plane
  92. N_PolygonGetArea Area and orientation of a closed 2D polygon
  93. N_RectangleGetData Break rectangle object down to its components
  94. N_RectToTwoIntervals Convert rectangle into two intervals
  95. N_CptReflect Reflect a control point through a plane
  96. N_SphereCenterRadius Compute center and radius of a sphere given by 4 points
  97. N_TetraCalcMatrix Compute 3D affine transf. matrix given 4 points and image
  98. N_TransformPtWithShapeFuncAndScale General axial transformations
  99. N_CreateRotationMatrixAboutAxis Compute general rotation matrix
  100. N_CreateTransformMatrixFromAxes Matrix to take one orthonormal system into another
  101. N_Rotate2dPts Rotate 2-D point set
  102. N_Scale2dPts Scale 2-D point set
  103. N_Shear2dPts Shear 2-D point set
  104. N_Translate2dPts Translate 2-D point set
  105. N_CreateTranslationMatrixFromPts Compute translation matrix
  106. N_CreateTransformMatrixFromVectors Compute matrix to take one 2-D unit vector into another
  107. N_CreateTransformMatrixFromVector Transform general vector into one of the principal axes
  108. N_VectorsAngle Compute the angle between two vectors
  109. N_VectorCombine Compute the combination of two vectors
  110. N_VectorCopy Compute a copy of a given vector
  111. N_VectorsCosAngle Compute the cosine of the angle between two vectors
  112. N_VectorCross Compute cross product of two vectors
  113. N_VectorCrossRef Compute cross product of vectors passed in by reference
  114. N_VectorDirectedAngle Compute the directed angle between two 2-D vectors
  115. N_VectorDiffCPts Difference vector between two control points in 3-D
  116. N_VectorDiff Compute the difference of two vectors
  117. N_VectorDir Compute direction vector from two points
  118. N_VectorDotRef Compute dot product of vectors passed in by reference
  119. N_VectorDot Compute the dot product of two vectors
  120. N_VectorMagnitude Compute the magnitude of a vector
  121. N_VectorCreate Make NL_VECTOR data type from <x,y,z> data
  122. N_VectorMagnitudeRef Compute the magnitude of a vector passed in by reference
  123. N_VectorMixMultiply Compute the mixed product of three vectors
  124. N_VectorNormalizeRef Normalize a given vector passed in by reference
  125. N_VectorNormalize Normalize a given vector
  126. N_VectorPerpendicular Compute a vector perpendicular to a given 2-D vector
  127. N_VectorPtAlongVector Compute point along a vector
  128. N_VectorReverse Reverse the direction of a given vector
  129. N_VectorReverseInPlace Reverse the direction of a given vector in place
  130. N_VectorReverseVectorInPlace Reverse direction of a vector wrt another vector in place
  131. N_VectorReverseVector Reverse direction of a vector wrt another vector
  132. N_VectorScale Scale a given vector
  133. N_VectorScaleRef Scale a given vector passed in by reference
  134. N_VectorSum Compute the sum of two vectors

Mathematical

  1. N_FloatOpIsBad Check floating point operations for under- and overflow
  2. N_GetCPtMatrixData Get members of control point matrix object
  3. N_CheckMemCPtMatrix Check if memory is needed to store control point matrix
  4. N_GetCPtMatrixPtr Get matrix pointer of control point matrix object
  5. N_CPtMatrixDefine Set parameters of control point matrix
  6. N_GetMaxIndexCPtMatrix Get highest indexes of control point matrix object
  7. N_PowerBasisCrvEvalPts Evaluate polynomial curve given in power basis form
  8. N_SwapCPts Swap two control points
  9. M_CorneredTridiagonalSystem  Solve corner triDiagonal system
  10. M_TridiagonalSystem: Solve triDiagonal system
  11. N_EvenSpacePtsCrv Compute equally spaced points on a curve
  12. N_EvenSpacePtsSrf Compute equally spaced points on a surface
  13. N_RandomFlipsFlops Generate a randon sequence of flips and flops
  14. N_RealMatrixForBack Forward elimination and backward substitution
  15. N_SetCPtMatrix Allocate memory to store control point matrix elements
  16. N_SetIntMatrix Allocate memory to store integer matrix elements
  17. N_SetPtMatrix Allocate memory to store point matrix elements
  18. N_SetRealMatrix Allocate memory to store real matrix elements
  19. N_MinMax1dIntArray Minimum or maximum of 1-D integer array
  20. N_MinMax2dIntArray Minimum or maximum of 2-D integer array
  21. N_GetIntMatrixData Get members of integer matrix object
  22. N_CheckMemIntMatrix Check if memory is needed to store an integer matrix
  23. N_IntMatrixDefine Set parameters of integer matrix
  24. N_GetIntMatrixPtr Get matrix pointer of integer matrix object
  25. N_GetMaxIndexIntMatrix Get highest indexes of integer matrix object
  26. N_InitCPtMatrix Initialize a control point matrix to NULL
  27. N_InitIntMatrix Initialize an integer matrix to NULL
  28. N_InitPtMatrix Initialize a point matrix to NULL
  29. N_InitRealMatrix Initialize a real matrix to NULL
  30. N_GenerateRandonNumber Generate a random number in the range of 0 to RAND_MAX
  31. N_InitRealHash Create hash table for reals
  32. N_SwapIntegers Swap two integer numbers
  33. N_FindElemIntArray Find element in a sorted integer array
  34. N_FindIntervalIntArray Find interval a given integer value is in
  35. N_CPtMatrixIsNULL Is control point matrix initialized to NULL?
  36. N_SortIndexArrayMap Sort index array using Shellsort output index array
  37. N_SortIndexArray Sort index array using Shellsort
  38. N_IntMatrixIsNULL Is integer matrix initialized to NULL?
  39. N_PtMatrixIsNULL Is point matrix initialized to NULL?
  40. N_RealMatrixIsNULL Is real matrix initialized to NULL?
  41. N_RealMatrixLstSqSolve Least squares solution to linear system of equations
  42. N_RealMatrixLuDecompose LU decompose a square matrix
  43. N_RealMatrixLuDecomposePivot LU decomposition with partial pivoting
  44. N_CreateCPtMatrix Define control point matrix
  45. N_CreateIntMatrix Define integer matrix
  46. N_CreatePtMatrix Define point matrix
  47. N_CreateRealMatrix Define real matrix
  48. N_FuncFindMinima Minimize a scalar-valued function of 1 variable
  49. N_PascalTriIndex Compute i-th row of Pascal triangle from i-1th row
  50. N_PascalTriRow Compute Pascal triangle
  51. N_GetPtMatrixData Get members of point matrix object
  52. N_CheckMemPtMatrix Check if memory is needed to store a point matrix
  53. N_PtMatrixDefine Set parameters of point matrix
  54. N_GetMaxIndexPtMatrix Get highest indexes of point matrix object
  55. N_GetPtMatrixPtr Get matrix pointer of point matrix object
  56. N_RealMatrixRightForBackPivot Forward/backward with partial pivoting and NL_POINT rhs
  57. N_PowerBasisEvalDerivs Evaluate polynomial and its derivatives
  58. N_PowerBasisRootNewton Polynomial root finding via Newton’s method
  59. N_SwapPts Swap two points
  60. N_PrintRealMatrix Print real matrix data to the standard output
  61. N_SolveQuadraticEq Solve quadratic equation
  62. N_MinMax1dRealArray Minimum or maximum of 1-D real array
  63. N_MinMax2dRealArray Minimum or maximum of 2-D real array
  64. N_RealMatrixForBackPivot Forward/backward with partial pivoting
  65. N_RealMatrixRightForBack Forward elimination and backward substitution for reals
  66. N_FindClustersRealArray Find clusters in a sorted array
  67. N_FindIntervalRealArray Find interval a given real value is in
  68. N_RetrieveRealHash Retrieve elements from hash table
  69. N_SwapReals Swap two real numbers
  70. N_SearchInsertReal Insertion search on a real array
  71. N_SortRealIndexArrays Sort real and integer array using Shellsort
  72. N_GetRealMatrixData Get members of real matrix object
  73. N_CheckMemRealMatrix Check if memory is needed to store a real matrix
  74. N_RealMatrixMultiplyCPtArray Product of real matrix and control point array
  75. N_RealMatrixDefine Set parameters of real matrix
  76. N_RealMatrixEigenValuesVectors Compute eigenvalues and eigenvectors of a matrix
  77. N_GetMaxIndexRealMatrix Get highest indexes of real matrix object
  78. N_RealMatrixInverse Compute the inverse of a real matrix
  79. N_RealMatrixInversePivot Inverse of a real matrix with partial pivoting
  80. N_RealMatrixInverseSVD Invers of a real matrix with singe value decomposition
  81. N_RealMatrixTransposeMultiply Product of real matrix and its transpose
  82. N_RealMatrixMultiplyTranspose Product of real matrix and the transpose of another
  83. N_RealMatrixMultiply Compute the product of two real matrices
  84. N_RealMatrixMultiplyPtArray Product of real matrix and point array
  85. N_GetRealMatrixPtr Get matrix pointer of real matrix object
  86. N_RealMatrixTranspose Compute the transpose of a real matrix
  87. N_RealMatrixMultiplyRealMatrixTranspose Product of matrix – control point – transpose of matrix
  88. N_SortRealRealArrays Sort real array pair using Shellsort
  89. N_SortRealArray Sort real array using Shellsort output index array
  90. N_ShellSortReal Sort real array using Shellsort
  91. N_PowerBasisSrfEvalPts Evaluate polynomial surface given in power basis form
  92. N_RealMatrixSingleValueDecompose Single Value Decomposition, decomposition, full matrix
  93. N_Real2dArrayInverseSVD Compute inverse of real matrix using Single Value Decomp
  94. N_SingleValueDecomposeSolve Single Value Decomposition, substitution, full matrix
  95. N_TangentVectorAkima Compute a tangent vector via the 5-point Akima method
  96. N_TangentVectorBessel Compute a tangent vector via the 3-point Bessel method
  97. N_UpdateRealHash Update hash table by adding an element to it

NURBS

Conics

  1. N_CreateConicArc Create a conic arc
  2. N_CreateBoundedCircArc Create Bezier cubic/quartic circular arc <= 180 degrees
  3. N_CreateQuadraticArc Create a quadratic circle/circular arc
  4. N_CreateQuarticArc Create a quartic degree 4 circle/circular arc
  5. N_CreateQuinticArc Create a quintic circle/circular arc
  6. N_CreateCircArc Create a circle/circular arc
  7. N_CalcCircWeights Extract circle weights
  8. N_CreateCubicSemiCircle Create a cubic semi-circle
  9. N_CreateEllipticalArc Create a ellipse/elliptical arc
  10. N_ConicCalcGeomDef Compute geometric definition of conic
  11. N_CalcConicImplicitEq Compute the implicit equation of a conic curve
  12. N_CalcConicShapeFactor Compute conic shape invariance
  13. N_ConicGetType Determine the type of conic
  14. N_CurveGetConicData Get conic data for arc creation

Curves

  1. N_CrvGetBBox Compute min-max box of a curve
  2. N_CrvGetCurvatureDeriv Compute derivative of curvature of curve
  3. N_CrvIsClosedContinuity Is a curve Gn smoothly closed
  4. N_CrvEvalCurvature Compute curvature and osculating circle of a curve
  5. N_CrvDerivs Compute derivatives of a curve
  6. N_CrvEval Compute a point on a curve
  7. N_CrvGetBBoxMaxDiagDist Compute largest extent of a curve
  8. N_CrvEvalFrenetFrame Compute the Frenet frame of a curve at a given point
  9. N_CrvGetG1Segs Get NL_G1-continuous segments of a curve
  10. N_CrvGetDegenSegs Get degenerate segments of a curve
  11. N_CrvGetLinearSegs Get linear and curved segments of a curve
  12. N_CrvGetMinPosVector Compute minimum position vector of curve control points
  13. N_CrvReparam Scale knot vector of a curve to given interval
  14. N_CrvLineFromPtAndVector Create line as a curve
  15. N_CrvLineFrom2Pts Create line as a curve 2 points
  16. N_CrvGetMaxPosVector Compute maximum position vector of curve control points
  17. N_CrvGetMinMaxWeightsAndPts Compute curve min-max weights and position vectors
  18. N_CrvDegenFromPt Create point as a degenerate curve
  19. N_CrvProjectOntoPlane Project a curve onto a plane
  20. N_CrvReverse Reverse a curve
  21. N_CrvRotateAboutAxis Rotate a curve about a general axis
  22. N_CrvScale Scale a curve with respect to a point
  23. N_CrvEvalTangent Unit tangent and point of a curve
  24. N_CrvTransform Transform a curve given a 4×4 matrix
  25. N_CrvTranslate Translate a curve
  26. N_CrvFromCrvTranslation Translate a curve, but not in place
  27. N_CrvGetType Determine type of curve
  28. N_CrvUnclamp Unclamp a curve
  29. N_CrvUnclampKnots Unclamp a curve with a given knot vector
  30. N_CrvGetAveragePosMag Compute the average position vector magnitude of a curve
  31. N_CrvAlign Align a curve to a given coordinate frame
  32. N_CrvOffsetGetMax2ndDeriv Upper bound on second derivative of offset curve
  33. N_CrvGetMax2ndDeriv Upper bound on second derivative of a curve
  34. N_CrvEvalDerivAtKnot Compute derivatives of a curve wrt a knot
  35. N_CrvEvalEvenSpacedPts Compute equally spaced points on a curve
  36. N_CrvEvalUnboundedPtsAndDerivs Compute point and derivatives on extended curve
  37. N_CrvEvalPt Compute a point on a curve in homogeneous space
  38. N_CrvOffsetGetDeriv 1st and 2nd derivatives of functional curve offset
  39. N_CrvModifyEndPt Modify curve so that an endpoint passes through a point
  40. N_CrvPlanarOffsetGetDeriv Compute 1st and 2nd derivatives of offset curves
  41. N_CrvDerivsAtKnot Derivatives of a curve in homogeneous space
  42. N_CrvScaleWeights Scale weighted control points of curve
  43. N_CrvExtendByDist Extend a curve a given distance
  44. N_CrvExtendToPt Extend a curve to a point
  45. N_CrvExtendByParamDist Extend a curve a given parametric distance

Curve Functions

  1. N_CFuncDerivs Compute derivatives of a curve function
  2. N_CFuncEval Compute a point on a curve function
  3. N_CrvFuncEvalDerivsAtKnot Compute derivatives of a curve function wrt a knot
  4. N_CrvFuncEvalRatBasis Evaluate rational basis function given as curve function

Curve Polynomials

  1. N_CrvPowerBasisEvalDerivs Compute derivatives of a power basis curve
  2. N_CrvPowerBasisEvalPt Compute a point on a power basis curve
  3. N_CrvPowerBasisReparam Reparameterize a power basis curve

Surface

  1. N_SrfGetBBox Compute min-max box of a surface
  2. N_SrfIsClosedSmooth Is a surface Gn smoothly closed
  3. N_SrfEvalPtCurvature Compute Gaussian, mean and principal curvatures
  4. N_SrfDerivs Compute derivatives of a surface
  5. N_SrfEvalPtCrvOnSrf Compute a point on a surface curve
  6. N_SrfEvalPt Compute a point on a surface
  7. N_SrfMaxDiagDistBBox Compute largest extent of a surface
  8. N_SrfFindDegenPatch Get degenerate patch strips of a surface
  9. N_SrfReparam Scale knot vectors of a surface to given rectangle
  10. N_SrfMaxMagnitudePosVectors Compute maximum position vector of surface control points
  11. N_SrfMinMaxWeightPosVectors Compute surface min-max weights and position vectors
  12. N_SrfEvalPtPtDerivNormal Compute the surface normal at given parameter values
  13. N_SrfEvalPtPtDerivNormalPole Compute the surface normal at a pole
  14. N_SrfProjectOntoPlane Project a surface onto a plane
  15. N_SrfReverse Reverse a surface
  16. N_SrfRotateAtPt Rotate a surface about a general axis
  17. N_SrfScale Scale a surface with respect to a point
  18. N_SrfTransform Transform a surface given a 4×4 matrix
  19. N_SrfTranslate Translate a surface
  20. N_SrfType Determine type of surface
  21. N_SrfUnclamp Unclamp a surface
  22. N_SrfUnclampKnotVector Unclamp a surface with given knot vectors
  23. N_SrfGetMaxSecondDeriv Upper bound on second derivative of unit normal
  24. N_SrfOffsetGetMaxDeriv Upper bound on second derivatives of offset surface
  25. N_SrfMaxSecondDeriv Upper bound on second derivative of a surface
  26. N_SrfEvalPtDerivCPt Compute derivatives of a surface wrt a control point
  27. N_SrfDerivKnot Compute derivatives of a surface wrt a knot
  28. N_SrfEvenSpacedPts Compute equally spaced points on a surface
  29. N_SrfEvalPtDerivsUnbounded Compute point and derivatives on extended surface
  30. N_SrfEvalPtGrid Compute a grid of points on a surface
  31. N_SrfOffsetGetFirstSecondDerivs 1st and 2nd derivatives of functional surface offset
  32. N_SrfModifyBoundaryCrv Modify surface to assume new boundary curve
  33. N_SrfEvalPtNormalDeriv Compute 1st and 2nd derivatives of UNIT surface normal
  34. N_SrfGetGridPtsNormals Compute points and unit normals at a grid of points
  35. N_SrfEvalPtDerivs Derivatives of a surface in homogeneous space
  36. N_SrfScaleWeights Scale weighted control points of surface
  37. N_SrfExtendToCrv Extend a surface to a curve
  38. N_SrfExtendByDist Extend a surface a given distance
  39. N_SrfExtendByParamDist Extend a surface a given parametric distance

Common Surfaces

  1. N_CreateSrfCornerPts Create bilinear surface
  2. N_CreateCylCone Create a cylinder/cone surface/patch
  3. N_CreateEllipsoid Create a ellipsoid/patch
  4. N_CreateSrfExtrudeCrv Create a generalized cylinder
  5. N_CreateRuledSrfBetweenCrvAndPt Create a generalized cone between a curve and a point
  6. N_CreateHyperboloid Create a hyperboloid of one sheet/hyperbolic patch
  7. N_CreateParaboloid Create a elliptic parabaloid/patch
  8. N_CreateRevolvedSrf Create surface of revolution
  9. N_CreateRuledSrf Create a ruled surface between two arbitrary curves
  10. N_CreateSphere Create a sphere/spherical patch
  11. N_CreateTorus Create a torus/toroidal patch
  12. N_CreateRuledSrfFromBoundaryCrvs Ruled surface of two curves using symbolic operators

Advanced Surface Constructions

  1. N_ApproxCrossBoundaryDerivs Approximate cross-boundary derivative field
  2. N_AdjustDerivSrf Adjust derivative field
  3. N_CreateSkinSrfApproxTol Approximate surface skinning with error bound
  4. N_CreateSkinSrfApprox Approximate surface skinning
  5. N_CreateSkinSrfApproxParams Approximate surface skinning with given knot vector
  6. N_CreateCoonsBoundaryCrvs Bicubic Coons surface through boundary and derivatives
  7. N_CreateCoonsSrfCrossBoundaryDerivs Bicubic Coons surf given bndys, derivs and tensor-surf
  8. N_CreateCoonsSrfTwist Bicubic Coons surface through four boundary curves
  9. N_CreateCoonsSrf Bilinear Coons surface through four boundary curves
  10. N_CreateCrossBoundaryDerivCrv Compute cross-boundary derivative field
  11. N_CreateBVectors Compute “B” vectors for curve alignment
  12. N_CrossBoundaryDerivCrv Compute cross-boundary derivative field
  13. N_Create4CrossBoundaryDerivCrvs Compute cross-boundary derivatives for Coons surface
  14. N_ReparmCrvsIsectPt Make intersection parameters compatible for Gordon sur
  15. N_CreateDerivField Cross-boundary derivative from surface, end twists and derivatives
  16. N_CreateDataBoundaryDerivs Cross-boundary derivative data from surface
  17. N_CreateSkinSrfBoundaryDerivs Cross-boundary derivative data from vector and curve
  18. N_CrossBoundaryDerivsVectorField Cross-boundary derivative data from vector field
  19. N_CreateGordonSrf Gordon surface trough compatible non-rational curves
  20. N_CreateSkinSrf General surface skinning
  21. N_CreateSkinSrfParams Surface skinning with given parameters and knot vector
  22. N_Get4CornerTwistVectors Compute twist vectors for bicubic Coons surface
  23. N_CreateTensorProductSrf Compute tensor product surface for Coons construction
  24. N_AdjustWeightScale Get weight and scale factor for NL_G1 continuity
  25. N_GetIsoCrvClosestCrv Iso-curve inversion/projection using Newton’s method
  26. N_MergeKnotVectors Merge knot vectors to have the same internal knots
  27. N_FillNSidedHole N-sided patch construction to boundary and derivatives
  28. N_CreateSkinSrfBoundaryContinuity Approximate skinning with boundary conditions and rails
  29. N_CreateSkinSrfInterp Surface skinning via approximation of cross-sectional curves
  30. N_CreateSkinSpine General spine curve-based surface skinning
  31. N_CreateSweepSrf Create a swept surface
  32. N_CreateSweepScale Swept surface with boundary conditions
  33. N_SweepCrossTangentCrv
  34. N_CreateSwungSrf Create a swung surface
  35. N_CreateTransSweepSrf Create a translational sweep surface

Surface Functions

  1. N_SFuncDerivs Compute all derivatives of a surface function
  2. N_SFuncEvalPt Compute a point on a surface function
  3. N_SrfFuncEvalRatBasis Evaluate rat basis function given as a surface function
  4. N_SrfFuncDerivFuncAtKnot Compute derivatives of a surface function wrt a knot
  5. N_SFuncEvalGrid Compute a grid of points on a surface function

Surface Polynomials

  1. N_SrfPowerBasisEvalDerivs Compute derivatives of a power basis surface
  2. N_SrfPowerBasisEvalPt Compute a point on a power basis surface
  3. N_SrfPowerBasisReparam Reparameterize a power basis surface

Fitting

  1. N_FitArcToPts Best fitting circle or circular arc to a set of points
  2. N_FitArcToEndPtsAndTangents Compute a biarc to given end points and end tangents
  3. N_FitCubicSplineInterpN_fit Cubic spline interpolation
  4. N_FitCrvCPtsFromSrfData Curve interpolation through row/column of surface data
  5. N_FitCrvInterpGivenParams Curve interpolation with specified knot vector
  6. N_FitCalcCrvParamValues Parameterization for global curve interpolation
  7. N_FitCubicSplineInterp Cubic spline interpolation
  8. N_FitPeriodicCubic Periodic cubic spline interpolation
  9. N_FitCalcFuncParamValues Parameterization for global functional interpolation
  10. N_FitCrvApproxLstSq Global curve approximation with arbitrary degree
  11. N_FitCrvApproxClosedConditions Curve interpolation to closed data with end conditions
  12. N_FitCrvDerivs Curve interpolation with end derivatives specified
  13. N_FitCrvHighDerivs Curve interpolation with given higher end derivatives
  14. N_FitCrvInterp Global curve interpolation with arbitrary degree
  15. N_FitCrvTangents Curve interpolation with end tangents specified
  16. N_FitFuncInterp Global function interpolation with arbitrary degree
  17. N_FitSrfLstSqApprox Global surface approximation with arbitrary degree
  18. N_FitSrfToPts Global surface interpolation with arbitrary degrees
  19. N_FitCalcKnotVectorCrvApprox Compute knot vector for global curve approximation
  20. N_FitCalcKnotVectorEndDerivs Knot vector for curve interpolation with end derivatives
  21. N_FitCalcKnotsHighEndDerivs Knot vector for interpolation with high end derivatives
  22. N_FitCrvCalcKnotVector Compute knot vector for global curve interpolation
  23. N_FitLineToPts Best fitting line segment to a set of random points
  24. N_FitPlaneToPts Best fitting plane to random points
  25. N_FitSrfFuncInterp Surface function interpolation with arbitrary degrees
  26. N_FitCalcSrfParamValues Parameterization for global surface interpolation
  27. N_FitArcToEndPtsAndTangents Compute a biarc to given end points and end tangents
  28. N_FitCrvApprox Curve approximation with error bound specified
  29. N_FitCrvApproxKnotsTangents Curve approximation with knots and end tangents
  30. N_FitCrvApproxTangents Global curve approximation with end tangents
  31. N_FitCrvApproxKnots Curve approximation with specified knot vector
  32. N_FitCrvArcApprox Data approximation with piecewise biarc segments
  33. N_FitCrvCubicApprox Data approximation with piecewise cubic segments
  34. N_FitCrvDerivsMatrix Curve interpolation with end derivatives and matrix
  35. N_FitCrvKnotsAndDerivs Curve interpolation with end derivatives and knot vector
  36. N_FitCrvApproxKnotsTol Curve approximation with error bound and knot vector
  37. N_FitCrvApproxKnotsAndTangentsTol Curve approximation with error bound & end constraints
  38. N_FitCrvFirstDeriv Curve interpolation with first derivatives specified
  39. N_FitCrvFirstDerivAndKnots Curve interpolation with first derivatives & knot vector
  40. N_FitCrvKnotsAndTangents Curve interpolation with knots and end tangents
  41. N_FitCrvMatrix Curve interpolation with specified matrix
  42. N_FitCrvArcs Curve interpolation with piecewise circular arcs
  43. N_FitCrvShape Interpolate points based on curve shaping
  44. N_FitCrvCubic Curve interpolation with NL_C1 non-rational cubic curves
  45. N_FitCrvCubicTangents Local NL_C1 cubic curve interpolation with end tangents
  46. N_FitCrvConics Curve interpolation with piecewise conic arcs
  47. N_FitCrvConicsApprox Data approximation with piecewise conic segments
  48. N_FitRemoveKnots Remove all removable knots from an approximating curve
  49. N_FitRemoveKnotsAndDerivs Remove all removable knots with derivative constraints
  50. N_FitRemoveKnotsPriorities Remove knots with derivative constraints and priorities
  51. N_FitCrvDerivMatrix Curve interpolation with end derivative and matrix
  52. N_FitCrvKnotsAndDeriv Curve interpolation with end derivative and knot vector
  53. N_FitCrvWeightedLstSq Weighted & constrained least-squares curve approximation
  54. N_FitCrvWeightedLstSqPeriodic Weighted & constrained least squares periodic fit to points
  55. N_FitCrvWeightedLstSqKnots Weighted/constrained least-squares with knot vector
  56. N_FitCrvApproxClosed Curve approximation to closed data with end conditions
  57. N_FitCrvApproxDerivs Global curve approximation with end derivatives
  58. N_FitFuncInterpGivenParams Function interpolation with given parameters
  59. N_FitCrvDerivsKnots Curve approximation with end derivatives and knots
  60. N_FitHermite Fit Hermite curve to end kth and (k+1)th derivatives
  61. N_FitCalcKnotsDerivs Knot vector for curve interpolation with all derivatives
  62. N_FitCalcKnotsEndDerivs Knot vector for curve approximation with end derivatives
  63. N_FitCalcKnotsRandom Knot vectors for random data approximation
  64. N_FitSrfCalcKnotVectors Compute knot vectors for surface approx to random points
  65. N_FitCalcKnotVectorDeriv Knot vector for curve interpolation with end derivative
  66. N_FitLocalCubicApprox Check scatter and compute local cubic approximant
  67. N_FitConicToPts Check scatter and compute local conic approximant
  68. N_FitCrvParabArcs Curve interpolation with piecewise parabolic arcs
  69. N_FitCrvLstSqEnds Least squares curve fit to points
  70. N_FitPtsNormals Fit surface to an array of points and normals
  71. N_FitRandomPN Fit surface to random set of points and normals.
  72. N_FitCalcMatrix Compute interpolation matrix for curve fitting
  73. N_FitSrfCalcParams Compute parameters for surface fit of random data
  74. N_FitCalcSrfParamsBoundary Compute parameters for surface fit of random data
  75. N_FitCalcSrfParamsBoundarySrf Parameters for surface fitting of random data
  76. N_FitSrfToPtsAndBoundary Surface approximation with boundary curves specified
  77. N_FitSrfApproxTol Surface approximation with error bound specified
  78. N_FitSrfToVariablePts Surface approximation to variable number of points
  79. N_FitSrfApproxShape Approximate random points based on surface shaping
  80. N_FitSrfApproxTangentsTol Surface approximation with error bounds and tangents
  81. N_FitSrfLstSqKnots Surface approximation with given knot vectors
  82. N_FitSmoothPts Smooth 3D points in preparation for curve fitting
  83. N_FitSrfInterpBoundary Surface interpolation to a nxm points and boundaries
  84. N_FitSrfInterpShape Interpolate points based on surface shaping
  85. N_FitSrfInterpTangents Surface interpolation with tangent constraints
  86. N_FitSrfToPtsKnots Surface interpolation with given knot vectors
  87. N_FitSrfInterpBicubic Surface interpolation with C11 bicubic surfaces
  88. N_FitSphereToPtsLocal Best fitting sphere to a set of points
  89. N_FitSrfInterpParams Parameterization for surface interpolation in u/v-dis
  90. N_FitSphereToPtsGlobal Best fitting sphere to a set of points
  91. N_FitSrfLstSqBoundary Least squares surface approximation to random points
  92. N_FitSrfLstSqDerivs Least squares surface approximation to random points
  93. N_FitSrfLstSqPeriodic Periodic Least squares fit to random points
  94. N_FitSrfApproxRemoveKnots Remove all removable knots from an approximating surface
  95. N_FitSrfRemovalBoundary Update surface removal bound for surface fitting
  96. N_FitSrfInterpRemoveKnots Remove all removable knots from an interpolating surface
  97. N_FitSrfApproxRemoveKnotsTangents Remove all removable knots from an approximating surface
  98. N_FitSrfTangentError Tangent error for one knot removal for fitting
  99. N_FitSrfInterpVariablePts Surface interpolation to variable number of points
  100. N_FitCrvTangentsKnotsParams Curve approximation with end tangents, knots and pars

Approximations

  1. N_ApproxCrvWithArcs Approximate curve with circular arcs and biarcs
  2. N_CrvArePtsWithinTol Check error of biarc approximation
  3. N_ApproxCircArcWithCrv Approximate circle A full or arc with non-rational curve
  4. N_ApproxCrvOnSrfWithCrv Approximate curve on surface from uv-curve
  5. N_CalcNumCPtsToApproxArc Compute number of ctrl pts for circle approximation
  6. N_ApproxConeWithSrf Non-rational approximation of cylinder or cone
  7. N_ApproxArcWithCrv Non-rational approximation of a circle or arc
  8. N_ApproxCircArcWithCrvData Perform non-rational curve fit to circle data
  9. N_CrvApproxSpiral Cubic approximation of a spiral with error specified
  10. N_CrvOffsetFuncVariableDir Functional offset of curve using point sampling
  11. N_SrfOffsetFunc Functional offset of surface using point sampling
  12. N_ApproxNurbsWithNonRatCrv Approximate curve with non-rational curve
  13. N_ApproxNurbsWithCrvKnots Curve approximation with knot vector passed in
  14. N_ApproxNurbsWithNonRatSrf Approximate surface with non-rational surface
  15. N_ApproxG1CrvWithCrv Approximate any NL_G1 curve with non-rational curve
  16. N_GetPtsForCrvApprox Get points for approximation of curves
  17. N_CrvOffsetApprox Approximate offset of curve with non-rational curve
  18. N_CrvOffset Offset of curve
  19. N_CrvOffsetPtSampling Offset of curve using point sampling
  20. N_SrfOffset Offset of surface using point sampling
  21. N_ApproxProcCrvWithCrv Approximate procedural curve with error bound specified
  22. N_ApproxProcCrvWithCrvFit Fit procedural curve points with error bound specified
  23. N_GetPtsForCrvApproxProc Get points for approximation of procedural curve
  24. N_ApproxRevolvedSrfWithSrf Non-rational approaximation of surface of revolution
  25. N_ApproxSphereWithSrf Non-rational approximation of sphere
  26. N_SrfApproxSpiral Sweep a curve along a spiral ( or helix)
  27. N_ApproxSubSrfWithSrf Approximate subsurface bounded by 4 curves
  28. N_ApproxNormalSrfWithSrf Approximate unit normal of surface
  29. N_ApproxTorusWithSrf Non-rational approximation of a torus

Shaping

  1. N_CrvShapeApproxPts Shape curve to approximate given points
  2. N_CrvShapeApproxPtsUpdate Shape curve to approximate given points
  3. N_CrvShapeAxialDeform Axial deformations of curves
  4. N_CrvShapeBend Bend a curve
  5. N_CrvShapeDerivConstraintsOver Constraint-based curve shaping with interp or approx
  6. N_CrvShapeDerivConstraints Constraint-based curve modification
  7. N_CrvShapeFlatten Flatten a curve
  8. N_CrvShapeInterp Shape curve to interpolate given points
  9. N_CrvShapeModifyWeight Modify one curve weight
  10. N_CrvShapeRemoveKnots Remove all removable knots from a curve being shaped
  11. N_CrvShapeCreateBasis Make rational basis function for curve warping
  12. N_CrvShapeModifyCPts Reposition curve control points
  13. N_CrvShapeWarp Warp curve
  14. N_IsectCrvShapeLineCrv Line-curve intersection for bending
  15. N_SrfShapeAxialBend Surface axial bending
  16. N_SrfShapeApproxPts Shape surface to approximate given points
  17. N_SrfShapeAxialDeform Axial deformations of surfaces
  18. N_SrfShapeDerivConstraints Constraint-based surface shaping with interp or approx
  19. N_SrfShapeCentralBend Surface central bending
  20. N_SrfShapeConstraints Constraint-based surface modification
  21. N_SrfShapeFlatten Flatten a surface
  22. N_SrfShapeInterp Shape surface to interpolate given points
  23. N_SrfShapeModifyWeight Modify one surface weight
  24. N_SrfShapePolylineWarp Surface polyline warp
  25. N_SrfShapeRemoveKnots Remove all removable knots from a surface being shaped
  26. N_SrfShapeCreateRatBasis Make rational basis function for surface warping
  27. N_SrfShapeModifyCPts Reposition surface control points
  28. N_SrfShapeRegionWarp Surface region warp

Tools

  1. N_CrvRemoveKnotsParams Remove all removable knots from curve with constraints
  2. N_tooCrvCleanSpans: Curve remove excessive knots and control points
  3. N_CrvExtractSegClosed Extract a curve segment that crosses a curve closure
  4. N_CrvsMakeCompatible Make curves compatible
  5. N_CrvsMakeCompatibleKnotTol Make Curves compatible to a tolerance
  6. N_CrvDecomposeContinuity Decompose a curve into continuous pieces
  7. N_CrvsMakeCompatibleAdjKnots Make curves compatible using knot adjustment
  8. N_CrvReduceDegree Reduce the degree of a curve as much as possible
  9. N_CrvDecomposeBez Decompose a curve into Bezier pieces
  10. N_CrvElevateDegree Elevate the degree of a curve
  11. N_CrvReduceDegreeOnce Reduce the degree of a curve
  12. N_CrvInverseKnotInsert Curve inverse knot insertion
  13. N_CrvInsertKnot Insert a knot into a curve
  14. N_CrvRemoveKnots Remove all removable knots from a curve
  15. N_CrvRemoveKnotMaxErr Compute knot removal error bound
  16. N_CrvRefine Refine a curve with a given knot vector
  17. N_CrvRemoveKnot Remove one knot multiple times from a curve
  18. N_CrvExtractCrvSeg Extract a curve segment from a curve
  19. N_CrvSplit Split a curve at a given parameter
  20. N_tooCrvCleanSpans Curve remove excessive knots and control points
  21. N_MakeSrfsCompatible Make surfaces compatible in u,v or both
  22. N_SrfJoin Join two surfaces at a common boundary
  23. N_SrfRemoveDegenPatch Remove degenerate patch strips of a surface
  24. N_CrvRemoveDegenSegs Remove degenerate segments of a curve
  25. N_SrfExtractBoundaryCrvs Extract boundary curves from surface
  26. N_MakeSrfsCompatibleUV Make surfaces compatible
  27. N_SrfExtractIsoCrv Extract iso-curve from surface
  28. N_SrfReduceDegreeToTol Reduce the degree of a surface as much as possible
  29. N_SrfDecomposeToBez Decompose a surface into Bezier patches
  30. N_SrfElevateDegree Elevate the degree of a surface
  31. N_SrfReduceDegree Reduce the degree of a surface
  32. N_SrfInsertKnotPt Surface inverse knot insertion
  33. N_SrfInsertKnot Insert a new knot into a surface
  34. N_SrfRemoveAllKnots Remove all removable knots from a surface
  35. N_SrfRemoveOneKnot Update surface removal bound
  36. N_SrfReplaceKnotVector Refine a surface with a given knot vector
  37. N_SrfRemoveKnotConditional Remove one knot from a surface multiple times
  38. N_SrfExtractPatch Extract a segment patch from a surface
  39. N_SrfSplit Split a surface at a given parameter
  40. N_CrvsMakeCompatibleApprox Make curves compatible using approximation
  41. N_CrvsMakeCompatibleKnotRemove Make curves compatible using approximation a err appr
  42. N_CrvsMakeCompatibleConstraints Make curves compatible with approximation & constraints
  43. N_CrvsMakeCompatibleFast Make curves compatible with approximation & constraint
  44. N_CrvRemoveAllKnotsArcLen Clean curve
  45. N_CrvFuncDecompose Decompose a curve function into Bezier pieces
  46. N_CrvFuncDegreeElevate Elevate the degree of a curve function
  47. N_CrvFuncInsertKnot Insert a knot into a function
  48. N_CrvFuncRefine Refine a curve function with a given knot vector
  49. N_CrvRemoveKnotsTangentConstraints Clean curve with end tangent control
  50. N_CrvRemoveAllKnotsConstraints Remove all removable knots from curve with constraints
  51. N_CrvRemoveKnotsDerivConstraints Remove all removable knots with end derivative constr
  52. N_CrvRefineToKnotVector Compute control points of refined curve
  53. N_CrvRemoveAllKnots Remove all removable knots from a curve err appr
  54. N_CrvMakeCompatibleWithSrf Make a curve and one direction of a surface compatible
  55. N_SrfRemoveAllKnotsArcLen Clean surface
  56. N_SrfReparmAndRemoveKnotsKeepBoundaries Clean surface with boundary constraints
  57. N_SrfFuncDecompose Decompose a surface function into Bezier patches
  58. N_SrfFuncDegreeElevate Elevate the degree of a surface function
  59. N_SrfFuncInsertKnot Insert a new knot into a bivariate function
  60. N_SrfFuncRemoveKnot Remove one knot multiple times from a surface function
  61. N_SrfFuncRefine Refine a surface function with a given knot vector
  62. N_SrfNetworkTopology Determine topology of regular network of surfaces
  63. N_SrfRemoveKnot Remove one knot to compute derivative change
  64. N_SrfRemoveKnotsConstraints Remove all removable knots with knot constraints
  65. N_SrfRemoveKnotMultiple Remove one knot from a surface multiple times
  66. N_SrfRemoveKnots Remove all removable knots from a surface err app
  67. N_SrfRemoveKnotsKeepBoundaries Remove knots from surface with boundary constraints
  68. N_SrfCrossBoundaryDerivErr Derivative error for one knot removal

Symbolic Operators

  1. N_CrvDiffCrvGetMaxChange Upper bound on the difference of two curves
  2. N_CrvGetMaxFirstDeriv Upper bound on first derivative of a curve
  3. N_CrvMoveKnotGetMaxChange Upper bound on curve change obtained by moving a knot
  4. N_MaxDiffTwoSrfs Upper bound on the difference of two surfaces
  5. N_SrfMaxFirstDeriv Upper bound on first derivative of a surface
  6. N_SrfMaxChangeMovingKnot Upper bound on surface change obtained by moving a knot
  7. N_SrfMax2ndDeriv Upper bound on second derivative of a surface
  8. N_CrossBoundDerivCrvNonRatSrf NON-RATIONAL cross-boundary derivative of a surface
  9. N_CrossBoundDerivCrvNurbsSrf Cross-boundary derivative of a surface
  10. N_CrvGetDerivCrvsAll All derivative curves of a curve
  11. N_CrvMakeDerivCrv Compute k-th derivative curve of a curve
  12. N_CrvNonRatEvalDeriv Derivative of NON-RATIONAL curve with respect to a knot
  13. N_CrvEvalHighDerivsKnot Higher derivatives of NON-RATIONAL curve wrt to a knot
  14. N_CrvEvalFirstDerivKnot First derivative of a curve with respect to a knot
  15. N_CrvCombine Combination of two curves
  16. N_CombineTwoSrfs Combination of two surfaces
  17. N_CrvNonRatGetDerivCrvsAll All derivative curves of a NON-RATIONAL curve
  18. N_CrvNonRatGetFirstDeriv Derivative curve of a NON-RATIONAL curve
  19. N_CrvSumDiffVector Sum/difference of a curve and a vector
  20. N_CrvGetMaxSecondDeriv Upper bound on second derivative of a curve
  21. N_CrvGetRatSecondDeriv Second derivative curve of a rational curve
  22. N_CrvRatGetFirstDeriv First derivative curve of a rational curve
  23. N_CrvFuncDeriv Derivative function of a curve function
  24. N_CrvFuncDerivKnot Derivative of function with respect to a knot
  25. N_CrvFuncHigherDerivKnot Higher derivatives of function wrt to a knot
  26. N_SrfFuncMultiplyConstant Product of constant and surface function
  27. N_MakeKnotsCompatible Merge knot vectors to have the same internal knots
  28. N_NormalSrfNurbsSrf_UU Normal surface of a surface
  29. N_CrvCrossMultiplyCrv Cross product of two curves
  30. N_CrvDotCrv Dot product of two curves
  31. N_CrossProductTwoSrfs Cross product of two surfaces
  32. N_CrvFuncMultiplyCrv4d Compute the product of a function and a curve in 4-D
  33. N_CrvFuncMultiplyCrv Compute the product of a function and a curve
  34. N_CrvFuncMultiplyCrvFunc Compute the product of two univariate B-spline functions
  35. N_SrfFuncMultiplySrf Compute the product of bivariate function and surface
  36. N_ConstantMultiplyCrv4d Product of constant and curve in 4-D
  37. N_ConstantMultiplyCrv Product of constant and curve
  38. N_CrvFuncMultiplyConstant Product of constant and curve function
  39. N_ConstantMultiplySrf Product of constant and surface
  40. N_DotProductTwoSrfs Dot product of two surfaces
  41. N_SrfFuncMultiplySrfFunc Compute the product of two bivariate B-spline functions
  42. N_CrvEvalSecondDerivKnot Second derivative curve of a rational curve wrt a knot
  43. N_CrvSumDiffCrv Sum/difference of two curves
  44. N_CrvFuncSumDiffCrvFunc Sum/difference of two curve functions
  45. N_AllDerivSrfNurbsSrf All derivative surfaces of a surface
  46. N_KDerivSrf Compute k,l-th derivative surface of a surface
  47. N_SrfFuncDerivFunc Derivative function of bivariate B-spline function
  48. N_SrfFuncFuncDerivFuncAtKnot Derivative of surface function with respect to a knot
  49. N_DerivSrfNonRatSrfKnot Derivative of NON-RATIONAL surface with respect to a knot
  50. N_DerivSrfRatSrfKnot First derivative of a surface with respect to a knot
  51. N_AllDerivSrfNonRatSrf All derivative surfaces of a NON-RATIONAL surface
  52. N_FirstDerivSrfNonRatSrf Derivative surface of a NON-RATIONAL surface
  53. N_SumDiffSrfVector Sum/difference of surface and vector
  54. N_FirstDerivSrfRatSrf First derivative surface of a rational surface
  55. N_SrfFuncSumDiffSrfFunc Sum/difference of two surface functions
  56. N_SumDiffTwoSrfs Sum/difference of two surfaces
  57. N_SecondDerivSrfRatSrf Second derivative surface A Suu of a rational surface
  58. N_MixedPartialDerivSrfRatSrf_UV Mixed partial derivative surface of a rational surface
  59. N_SecondDerivSrfRatSrf_VV Second derivative surface A Svv of a rational surface

Initialize and End

  1. N_EndNurbs Ends programming environment
  2. N_InitNurbs Initializes programming environment

Basis Functions

  1. N_SrfNonRatBasisDerivs All bivariate non-rational basis functions & derivatives
  2. N_CrvRatBasisDerivs All univariate rational basis functions and derivatives
  3. N_BasisDerivs Non-vanishing basis functions and their derivatives
  4. N_BasisEval Compute all non-vanishing basis functions
  5. N_BasisFindIndexNodeArray Compute the nodes of a given knot vector
  6. N_SrfRatBasisDerivs All bivariate rational basis functions and derivatives
  7. N_BasisIDerivs Compute one basis function and its derivatives
  8. N_BasisIEval Compute one basis function at a given parameter value
  9. N_CrvBasisDerivs All non-vanishing curve basis functions and derivatives
  10. N_BasisGetKnotsAndMults Return all distinct knots together with multiplicities
  11. N_BasisFindSpanAndMult Find knot span and multiplicity of given parameter
  12. N_BasisFindSpan Find knot span a given parameter value is in
  13. N_BasisFindGlobalMax Compute the maximum of a basis function
  14. N_GetCompatibleKnotArray Merge a set of knot vectors
  15. N_GetCompatibleKnotVector Merge internal parameters of a set of knot vectors
  16. N_BasisFindAllSpanMaxima Compute min-max of basis function over each span
  17. N_GetCompatibleKnotVectorToTol Merge a set of knot vectors using a tolerance
  18. N_BasisGetSpanCount Find number of non-zero spans in a knot vector
  19. N_CrvRatBasisIEval Evaluate univariate rational basis function
  20. N_CrvRatBasisIDerivs Evaluate univariate rational basis function derivatives
  21. N_SrfRatBasisIEval Evaluate bivariate rational basis function
  22. N_SrfRatBasisIDerivs Evaluate bivariate rational basis function derivatives
  23. N_SrfBasisDerivs All non-vanishing surface basis functions & derivatives
  24. N_BasisReparam Scale knot vector to a given interval
  25. N_BasisEvalArray All basis functions computed at an array of parameters
  26. N_BasisSplitLongestSpan Add knots to knot vector
  27. N_BasisKnotDerivs Derivatives of all non-vanishing basisf wrt to a knot
  28. N_BasisDerivsArray Basis functions and derivatives at various parameters
  29. N_CrvRatBasisKnotDeriv Derivatives of non-vanishing rat basis fs wrt to a knot
  30. N_BiBasisKnotDeriv Ders of all non-vanishing surface basisf wrt to a knot
  31. N_SrfRatBasisKnotDeriv Ders of rational bivariate basis functions wrt to a knot
  32. N_BasisIKnotDeriv Compute derivative of one basis function wrt to a knot
  33. N_CrvBasisIEval Evaluate basis function of curve
  34. N_BasisFindIndexNode Compute one node corresponding to a given index
  35. N_BasisFindKnotToTurnParamIntoNode Compute parameter to get a specified node
  36. N_BasisIncreaseKnotMult Increase multiplicity of internal knots
  37. N_GetCompatibleKnotArrayMult Merge knot vectors to have the same internal knots
  38. N_BasisFindNodeSpan Find node span a given parameter is in
  39. N_CrvRatBasisIKnotDeriv Univariate rational basis function derivative wrt a knot
  40. N_BasisInsertKnots Refine knot vector
  41. N_BasisSplitNLongestSpans Refine knot interval
  42. N_SrfRatBasisIKnotDeriv Bivariate rational basis function derivative wrt a knot
  43. N_SrfBasisIEval Evaluate basis function of surface
  44. N_BasisGetLongestAndShortestSpans Find smalest and largest non-zero spans in a knot vector

Geometry Processing

  1. N_ApproxCrvWithPolyline Piecewise linear polygonal approximation of a curve
  2. N_CrvArcLength Compute arc length of segment of curve
  3. N_CrvNurbsToPiecewise Convert curve into piecewise power basis form
  4. N_CrvPiecewiseToNurbs Convert a piecewise power basis curve to NURBS form
  5. N_CrvClosestPtMultiple Global curve point inversion/projection
  6. N_CrvPercentageAlongPt Compute point on the curve at given arc length
  7. N_CrvProjectPts Project points onto curve approximately
  8. N_CrvClosestPt Curve point inversion/projection using Newton’s method
  9. N_SrfGetClosestPt Surface point inversion/projection using Newton’s method
  10. N_ApproxSrfWithQuadSrf Piecewise quadrilateral approximation of surface
  11. N_SrfGetAverageLen Estimate surface measures lengths and area
  12. N_ConvertNurbsToPowerBasis Convert surface into piecewise power basis form
  13. N_ConvertPiecesToNurbs Convert a piecewise power basis surface to NURBS form
  14. N_InvertTangentSrfCrv Surface curve tangent vector inversion
  15. N_SrfReparamMultKnots Reparameterize curves with respect to arc length
  16. N_CrvReparamWeights Make curve end weights equal
  17. N_CrvFuncEvalInvertPt Curve function value inversion using Newton’s method
  18. N_SrfReparamFunc Reparameterize a curve with a B-spline function
  19. N_CrvReparamRat Curve reparameterization with linear rational function
  20. N_MapKnotsBetweenCrvFuncAndKnotVector Map knot vectors onto each other
  21. N_SrfProjectPts Global Point-to-Surface projection
  22. N_SrfReparamArcLength Reparameterize surfaces with respect to arc length
  23. N_SrfReparamWeights Set curve end weights to given values
  24. N_SrfReparmRat Surface reparameterization with linear rational function

NL_IGES

  1. N_Iges100Arc Create circular arc from NL_IGES Entity 100 data
  2. N_Iges102CompositeCrv Create composite curve from NL_IGES Entity 102 data
  3. N_Iges104ConicArc Create conic arc from NL_IGES Entity 104 data
  4. N_Iges106LinearCrv Create degree 1 curve from NL_IGES Entity 106 data
  5. N_Iges108Plane Create bounded plane from NL_IGES Entity 108 data
  6. N_Iges100Line Create bounded line from NL_IGES Entity 110 data
  7. N_Iges112CrvNonRat Create B-spline curve from NL_IGES Entity 112 data
  8. N_Iges114NonRatSrf Create B-spline surface from NL_IGES Entity 114 data
  9. N_Iges118RuledSrf Create ruled surface from NL_IGES Entity 118 data
  10. N_Iges120RevolvedSrf Create revolved surface from NL_IGES Entity 120 data
  11. N_Iges122ExtrudedSrf Create extruded surface from NL_IGES Entity 122 data
  12. N_Iges124Matrix 4×4 transformation matrix from NL_IGES Entity 124 data
  13. N_Iges126Crv Create curve from NL_IGES Entity 126 data
  14. N_Iges128Srf Create surface from NL_IGES Entity 128 data
  15. N_IgesClampCrv Clamp an NL_IGES 126 curve to its bounds
  16. N_IgesCorrectCrvKnots Sanitize curve knots for NL_IGES Entity 126
  17. N_IgesNonPeriodicCrv Convert periodic curve to nonperiodic, unclamped curve
  18. N_IgesNonPeriodicCPts Convert periodic ctrl pts to unclamped, nonperiodic form
  19. N_IgesNonPeriodicKnots Convert periodic knots to unclamped, nonperiodic form
  20. N_IgesNonPeriodicSrf Convert periodic surface to nonperiodic, unclamped surf
  21. N_IgesClampSrf Clamp an NL_IGES 128 surface to its bounds
  22. N_IgesCorrectSrfKnots Sanitize surface knots for NL_IGES Entity 128
  23. N_IgesValidate Validate NL_IGES Entities 126 and 128 knots and bounds data

Tessellation

  1. N_TessGetTriangleEdges Return all edges forming edges in a triangulation
  2. N_TessGetTriangleVertices Return all points forming vertices in a triangulation
  3. N_TessGetTriangles Return all triangles in a surface triangulation
  4. N_TessTrimmedSrf Tessellate a trimmed surface

Storage

  1. N_AllocCPt1dArray Allocate memory for a control point array
  2. N_AllocCPtPtr1dArray Allocate memory for 1-D array of control point pointers
  3. N_AllocCPt2dArray Allocate memory for a 2-D control point array
  4. N_AllocCPtPtr2dArray Allocate memory for 2-D array of control point pointers
  5. N_AllocCrvFuncArray Allocate memory to store a 1-D array of curve functions
  6. N_AllocCrvFunc Allocate memory to store a curve function
  7. N_AllocCrvFuncStack Allocate memory for a curve function structure
  8. N_AllocCPtMatrix Allocate memory to store a control point matrix
  9. N_XYZToCPtArray Control point array from its wx,wy,wz,w components
  10. N_XYZTo2dCPtArray 2-D control point array from its wx,wy,wz,w components
  11. N_Alloc2dArrayCrvPtrs Allocate memory for a 2-D array of curve pointers
  12. N_AllocArrayCrvPtrsAndData Allocate array of curve pointers structures allocated
  13. N_Alloc1dArrayCrvs Allocate memory to store a 1-D array of curves
  14. N_AllocArrayCrvPtrs Allocate memory to store an array of curve pointers
  15. N_AllocArrayRealCrvPtrs Get memory to store an array of double curve pointers
  16. N_AllocArrayTripleCrvPtrs Get memory to store an array of triple curve pointers
  17. N_AllocCrvAndArrays Allocate memory to store a curve
  18. N_AllocCrv Allocate memory for a curve structure
  19. N_AllocCValue Allocate memory for a curve value structure
  20. N_AllocCValueAndArray Allocate memory to store curve value object
  21. N_AllocFlag1dArray Allocate memory for a flag array
  22. N_AllocFlagPtr1dArray Allocate memory for a 1-D array of flag pointers
  23. N_AllocFlag2dArray Allocate memory for a 2-D flag array
  24. N_AllocInt1dArray Allocate memory for an integer array
  25. N_AllocIntPtr1dArray Allocate memory for a 1-D array of integer pointers
  26. N_AllocInt2dArray Allocate memory for a 2-D integer array
  27. N_AllocIntPtr2dArray Allocate memory for a 2-D array of integer pointers
  28. N_AllocIntMatrix Allocate memory to store an integer matrix
  29. N_Alloc1dArrayKnotVectors Allocate memory to store a 1-D array of knot vectors
  30. N_AllocKnotVector Allocate memory for a knot vector structure
  31. N_AllocKnotVectorAndArray Allocate memory to store a knot vector object
  32. N_Alloc1dArrayKnotVectPtrs Allocate memory to store knot vector pointer array
  33. N_AllocCNet Allocate memory for control net structure
  34. N_AllocCNetAndArrays Allocate memory to store a control net object
  35. N_AllocPt1dArray Allocate memory for a point array
  36. N_AllocPtPtr1dArray Allocate memory for a 1-D array of point pointers
  37. N_AllocPt2dArray Allocate memory for a 2-D point array
  38. N_AllocPtPtr2dArray Allocate memory for a 2-D array of point pointers
  39. N_AllocVariable2dPtArray Allocate memory for a variable 2-D point array
  40. N_AllocPtMatrix Allocate memory to store a point matrix
  41. N_XYZToPtArray Create a point array from its x,y,z components
  42. N_AllocCPolygonAndArray Allocate memory to store a polygon object
  43. N_XYZTo2dPtArray Create a 2-D point array from its x,y,z components
  44. N_AllocCPolygon Allocate memory for a polygon structure
  45. N_AllocRealPtr3dArray Allocate memory for a 1-D array of double pointers
  46. N_AllocReal1dArray Allocate memory for a real array
  47. N_AllocRealPtr1dArray Allocate memory for a 1-D array of real pointers
  48. N_AllocReal2dArray Allocate memory for a 2-D real array
  49. N_AllocRealPtr2dArray Allocate memory for a 2-D array of real pointers
  50. N_AllocReal3dArray Allocate memory for a 3-D real array
  51. N_AllocReal4dArray Allocate memory for a 4-D real array
  52. N_AllocRealMatrix Allocate memory to store a real matrix
  53. N_Alloc2dArraySrfFunc Allocate memory for a 2-D array of surface functions
  54. N_AllocSrfFunc Allocate memory to store a surface function
  55. N_AllocSrfFuncData Allocate memory for a surface function structure
  56. N_Alloc2dArraySrfPtrs Allocate memory for a 2-D array of surface pointers
  57. N_AllocArraySrfPtrsInit Allocate array of surface pointers structures allocated
  58. N_Alloc2dArraySrfPtrsParameters Allocate memory for a 2-D array of surfaces
  59. N_AllocArraySrfPtrs Allocate memory for an array of surface pointers
  60. N_AllocSrfAndArrays Allocate memory to store a surface
  61. N_AllocSrf Allocate memory for a surface structure
  62. N_AllocSValue Allocate memory for a surface value structure
  63. N_AllocSValueAndArray Allocate memory to store surface value object

Utilities

  1. N_CrvsAreCombatible Are curves compatible?
  2. N_CPtsAreEqual Are control points equal
  3. N_CrvsAreCoincident Are curves coincident?
  4. N_CrvAreWeightsEqual Are curve weights equal
  5. N_SrfsAreCoincident Are surfaces coincident?
  6. N_SrfAreWeightsEqual Are surface weights equal
  7. N_CFuncGetData Break curve function down to its components
  8. N_CFuncSizeArrays Check if memory is needed to store curve function
  9. N_CrvFuncCompact Compact curve function arrays
  10. N_CrvFuncCopy Copy a B-spline function
  11. N_CFuncGetArrayAndKnotVector Get control value and knot vector objects from function
  12. N_CrvFuncCntrlVal Get control values from curve function object
  13. N_CFuncGetDegree Get degree of curve function
  14. N_CrvFuncCntrlValKnotVector Get control values, knot vector and knots from function
  15. N_CrvFuncCntrlValKnots Get control values and knots from curve function object
  16. N_CFuncGetArraySizes Get highest indexes in curve function object
  17. N_CFuncGetKnotVector Get knot vector object from curve function
  18. N_CFuncGetKnots Get curve function knot vector information
  19. N_CrvFuncReparam Scale curve function knot vector to given interval
  20. N_CrvFuncSetPtrs Set control value and knot vector of curve function
  21. N_CreateCrvFromCoordFuncs Make curve from coordinate functions
  22. N_CreateSrfFromCoordFuncs Make surface from coordinate functions
  23. N_CrvWriteIgesCPolygon Create NL_IGES file for curve visualization
  24. N_Crv2dTo3d Convert a 2-D curve to a 3-D curve
  25. N_Crv3dTo2d Convert a 3-D curve to a 2-D curve
  26. N_CrvGetCPtsDegreeAndKnots Break curve down to its components
  27. N_CrvSizeArrays Check if memory is needed to store a curve
  28. N_CrvCompress Compact curve control point and knot vector arrays
  29. N_CrvCopy Copy a curve
  30. N_CrvGetCoordFuncs Extract coordinate functions from curve
  31. N_CrvGetDegree Get degree of curve
  32. N_CrvMakeNonRat Map rational curve to Euclidean space
  33. N_CrvGetArraySizes Get highest indexes in curve object
  34. N_CrvGetKnotVector Get knot vector object from curve
  35. N_CrvGetKnots Get knot vector info from curve object
  36. N_CrvReparamToInterval Scale curve knot vector to given interval
  37. N_CrvGetNumAndDenom Extract numerator and denominator from curve
  38. N_CrvNonRatToRat Convert a non-rational curve to a rational curve
  39. N_CrvGetParamBounds Get parameter bounds from curve object
  40. N_CrvClampKnot Clamp curve parameter
  41. N_CrvGetCPtsKnotVectorAndKnots Get control points, knot vector and knots from curve
  42. N_CrvGetCPts Get control polygon info from curve object
  43. N_CrvDetachPolygonKnot Detach polygon and knot vector objects from curve
  44. N_CrvGetCPtsAndKnots Get control points and knots from curve object
  45. N_CrvRatToNonRat Convert a rational curve to a non-rational curve
  46. N_CrvPruneRat Prune a curve
  47. N_CrvSetCPtsAndKnots Set control point and knot vector pointers of curve
  48. N_CrvWriteIges Create NL_IGES file containing Entity 126 curves
  49. N_CFuncSetSizeIndices Set parameters in curve function definition
  50. N_CrvSetSizeIndices Set parameters in curve definition
  51. N_SetKnotIndex Set index in knot vector definition
  52. N_SFuncSetSizeIndices Set parameters in surface function definition
  53. N_SrfSetSizeIndices Set parameters in surface definition
  54. N_SrfIsSingular Does surface have a pole?
  55. N_CrvGetDenomCrvFunc Extract denominator of a rational curve
  56. N_SrfGetDenominatorFunc Extract denominator of a rational surface
  57. N_AllocCrvFuncArray Allocate memory to store curve function
  58. N_AllocCrvAndArrays Allocate memory to store curve control points and knots
  59. N_AllocSrfFuncArray Get memory to store NL_SFUN control points and knots
  60. N_AllocSrfAndArrays Get memory to store surface control points and knots
  61. N_AllocCrvFunc Initialize a curve function to NULL
  62. N_CrvInitArrays Initialize a curve to NULL
  63. N_CrvProjectionInitArrays Initialize a global curve projector structure to NULL
  64. N_SFuncInitArrays Initialize a surface function to NULL
  65. N_SrfInitArrays Initialize a surface to NULL
  66. N_CrvArrayReadFromFile Create an array of curves from data saved in a file
  67. N_CrvReadFromFilePtr Read curve from file file pointer passed in
  68. N_CrvReadFromFile Create curve from data saved in a file
  69. N_Read1dPtFromFile Read in 1-D NL_POINT data from file
  70. N_Read2dPtFromFile Read in 2-D NL_POINT data from file
  71. N_SrfReadFromFile Read surface from file file pointer passed in
  72. N_CreateSrfFromDataFile Create surface from data saved in a file
  73. N_CrvAreFuncArraysNULL Is curve function initialized to NULL?
  74. N_Crv4dIsDegen Is curve degenerated to a point in 4-D?
  75. N_CrvIs3d Is curve three dimensional?
  76. N_CrvIsClosed Is curve closed?
  77. N_CrvIsPlanar Is curve planar flat
  78. N_CrvIsLine Is curve a line
  79. N_CrvAreArraysNULL Is curve initialized to NULL?
  80. N_CrvIsDegen Is curve degenerate to a point?
  81. N_IsCrvRat Is curve rational?
  82. N_CrvIsInZ0Plane Does curve lie in the z=0 plane?
  83. N_IsPtSet1dCircular Is 1-D point set cocircular
  84. N_1dPtSetIsClosed Is 1-D point set closed?
  85. N_IsPtSet1dColinear Is 1-D point set colinear
  86. N_IsPtSet1dCoplanar Is 1-D point set coplanar
  87. N_IsPtSet1dSpherical Is 1-D point set cospherical
  88. N_2dPtSetIsClosed Is 2-D point set closed?
  89. N_SrfIsFlatCheap Is surface flat?
  90. N_SrfAreFuncArraysNULL Is surface function initialized to NULL?
  91. N_SrfIsClosed Is surface closed?
  92. N_SrfIsFlat Is surface flat?
  93. N_SrfAreArraysNULL Is surface initialized to NULL?
  94. N_SrfIsDegen Is surface degenerate to a point?
  95. N_IsSrfRat Is surface rational?
  96. N_FreeCPt1dArray Release memory that stores a control point array
  97. N_FreeCPt2dArray Release memory that stores a 2-D control point array
  98. N_FreeCrvFunc Release memory that stores curve function
  99. N_FreeCrv Release memory that stores curve data
  100. N_FreeCValue Release memory that stores control value structure
  101. N_FreeFlag1dArray Release memory that stores a flag array
  102. N_FreeFlag2dArray Release memory that stores a 2-D flag array
  103. N_FreeInt1dArray Release memory that stores an integer array
  104. N_FreeIntPtr1dArray Release memory that stores an array of integer pointers
  105. N_FreeInt2dArray Release memory that stores a 2-D integer array
  106. N_FreeIntPtr2dArray Release memory that stores a 2-D array of int pointers
  107. N_FreeKnotVector Release memory that stores knot vector structure
  108. N_FreeCNet Release memory that stores control net structure
  109. N_FreePt1dArray Release memory that stores a point array
  110. N_FreePt2dArray Release memory that stores a 2-D point array
  111. N_FreeCPolygon Release memory that stores control polygon structure
  112. N_FreeReal1dArray Release memory that stores a real array
  113. N_FreeReal2dArray Release memory that stores a 2-D real array
  114. N_FreeReal3dArray Release memory that stores a 3-D real array
  115. N_FreeSrfFuncData Release memory that stores surface function data
  116. N_FreeSrf Release memory that stores surface data
  117. N_FreeSValue Release memory that stores control value structure
  118. N_KnotsAdd Add knots to a knot vector
  119. N_KnotVectorGetKnots Break knot vector object down to its components
  120. N_KnotsCheck Check if memory is needed to store a knot vector
  121. N_KnotsCopy Copy a knot vector
  122. N_KnotsRefine refine knot vector base on Greville spans and parameters
  123. N_WriteLineCrvSrfIges Create NL_IGES file containing Entities 110, 126 and 128
  124. N_CrvsMakeRatCompatible Make curve definitions compatible
  125. N_CFuncFromKnotVector Curve function structure from control value and knot vector
  126. N_CFuncFromKnots Make curve function from control values and knot vector
  127. N_CreateCrvFromPowerBasis Make curve polynomial defined in power basis form
  128. N_CrvFromCPolygonAndKnotVector Make curve structure from control polygon and knot vector
  129. N_CrvFromCPtsAndKnots Make curve structure from control points and knot vector
  130. N_CrvFromCPtCoordsAndKnots Make curve structure from wx,wy,wz,w and knot vector
  131. N_CValueFromArray Make curve function control value structure
  132. N_KnotVectorFromRealArray Make knot vector structure
  133. N_CNetFromCPts Make control net structure
  134. N_CNetFromCPtCoords Make control net structure from control points
  135. N_CPolygonFromCPts Make control polygon structure
  136. N_CPolygonFromCPtCoords Make polygon structure from control points
  137. N_MakeSrfsRatCompatible Make surface definitions compatible
  138. N_SFuncFromKnotVectors Surface function from contr value and knot vector objects
  139. N_SFuncFromKnots Surface function from control values and knot vectors
  140. N_CreateSplineSrf Make surface polynomial defined in power basis form
  141. N_SrfFromCNetAndKnotVectors Make surface structure given a net and two knot vectors
  142. N_SrfFromCPtsAndKnots Make surface from control points and knot vector
  143. N_SrfFromCPtCoordsAndKnots Make surface from wx,wy,wz,w and knot vectors
  144. N_SValueFromArray Make surface function control value structure
  145. N_SrfGetENet Map control net to Euclidean space
  146. N_CrvGetEPolygon Map control polygon to Euclidean space
  147. N_CreateCrvFromNumAndDenom Make curve from numerator and denominator
  148. N_CreateSrfFromNumAndDen Make surface from numerator and denominator
  149. N_CNetGetCPts Break control net object down to its components
  150. N_CrvArrayWriteToFile Create curve array file
  151. N_CrvWriteToFilePtr Write curve to file file pointer passed in
  152. N_CrvWriteToFile Create curve file
  153. N_Write1dPtToFile Write 1-D NL_POINT data to a file
  154. N_Write2dPtToFile Write 2-D NL_POINT data to a file
  155. N_SrfWriteToFile Write surface to file file pointer passed in
  156. N_WriteSrf Create surface file
  157. N_CPolygonGetCPts Break polygon object down to its components
  158. N_CrvFuncPrint Print curve function data out to the standard output
  159. N_CrvPrint Print curve data out to the standard output device
  160. N_KnotsPrint Print knot vector data to the standard output
  161. N_SrfFuncPrint Print surface function data to the standard output
  162. N_PrintSrfData Print surface data out to the standard output device
  163. N_WritePtsIges Create NL_IGES file for point set visualization
  164. N_Realloc1dCPtArray Reallocate memory for 1-D control point array
  165. N_Realloc2dCPtArray Reallocate memory for 2-D control point array
  166. N_Realloc1dFlagArray Reallocate memory for 1-D flag array
  167. N_Realloc2dFlagArray Reallocate memory for 2-D flag array
  168. N_Realloc1dIntArray Reallocate memory for 1-D integer array
  169. N_Realloc1dIntPtrArray Reallocate memory for a 1-D array of integer pointers
  170. N_Realloc2dIntArray Reallocate memory for 2-D integer array
  171. N_Realloc2dIntPtrArray Reallocate memory for a 2-D array of integer pointers
  172. N_Realloc1dPtArray Reallocate memory for 1-D point array
  173. N_Realloc2dPtArray Reallocate memory for 2-D point array
  174. N_Realloc1dRealArray Reallocate memory for 1-D real array
  175. N_Realloc2dRealArray Reallocate memory for 2-D real array
  176. N_SFuncGetComponents Break surface function down to its components
  177. N_SFuncSizeArrays Check if memory is needed to store a surface function
  178. N_SrfFuncCompact Compact NL_SFUN control value and knot vector arrays
  179. N_SrfFuncCopy Copy a surface function
  180. N_SFuncGetDegrees Get degree of surface function
  181. N_SFuncGetKnots Control values and knots from surface function object
  182. N_SFuncGetArraySizes Get highest indexes in surface function structure
  183. N_SFuncGetKnotVectors Get knot vector object from surface function
  184. N_SrfFuncGetKnots Get knot vectors info from surface function object
  185. N_SrfFuncScale Scale surface function knot vectors to given rectangle
  186. N_SrfFuncSetPtrs Set control value and knot vector pointers of NL_SFUN
  187. N_SFuncGetArrayAndKnotVectors Get control value and knot vector objects from NL_SFUN
  188. N_SrfFuncCntrlVal Get control values from surface function object
  189. N_PrintStack Show memory stack
  190. N_WriteSrfIges Create NL_IGES file for surface visualization
  191. N_SrfGetCPtsDegreesAndKnots Break surface down to its components
  192. N_SrfSizeArrays Check if memory is needed to store a surface
  193. N_SrfCompress Compact surface control point and knot vector arrays
  194. N_SrfCopy Copy a surface
  195. N_SrfGetCoordFuncs Extract coordinate functions from surface
  196. N_SrfGetDegrees Get degrees of surface
  197. N_SrfMakeNonRat Map rational surface to Euclidean space
  198. N_SrfGetArraySizes Get highest indexes in surface structure
  199. N_SrfGetKnotVectors Get knot vector objects from surface
  200. N_SrfGetKnots Get knot vectors info from surface object
  201. N_SrfReparamToInterval Scale surface knot vectors to given rectangle
  202. N_SrfGetNumAndDen Extract numerator and denominator from surface
  203. N_SrfGetCPts Get control net info from surface object
  204. N_SrfGetNetAndKnotVectors Detach control net and knot vector objects from surface
  205. N_SrfNonRatToRat Convert a non-rational surface to a rational surface
  206. N_SrfGetParameterBounds Get parameter bounds from surface object
  207. N_ClampSrfAtParams Clamp surface parameters
  208. N_SrfGetCPtsKnotVectorAndKnots Get control points, knot vectors and knots from surface
  209. N_SrfGetCPtsAndKnots Get control points and knots from surface object
  210. N_SrfRatToNonRat Convert a rational surface to a non-rational surface
  211. N_SrfPruneRat Prune a rational surface
  212. N_SrfSetCPtsAndKnots Set control point and knot vector pointers of surface
  213. N_WriteSrfToIgesFile Create NL_IGES file containing Entity 128 surfaces
  214. N_SwapUV Swap u and v direction in surface definition