> NURBS objects have 2 kinds of points, one kind that can be added along the

> edge of a patch, and one kind that is the corner of a patch, right?

Well, not just a corner. I guess one thing that is tricky is the names for things. A full NURBS modeler that supports booleans does not just support NURBS surfaces, but actually something more exactly called "Trimmed NURBS surfaces", which includes multiple parts - a NURBS surface + trim information.

There are a set of points for the NURBS surface, and there are a different set of points for the trimming curve information, so yes those are 2 different kinds of points.

Here for example is a simple NURBS surface without any extra trims. In this case the edges run along the natural edges of the surface. You can see here the control point structure of the surface:

Here is the same surface after it has been trimmed. The same surface is still there "underneath" everything, the trim curves are defined by a different set of points than the ones that make up the surface:

> So it works like bezier patches, just with more advanced edge curves (and different interpolation)?

Bezier patches are related and very similar, except there is a much more strict limitation on the number of points that can be in one single Bezier patch. So to make a big long flowing surface only out of beziers will require making a bunch of smaller Beziers stuck together. NURBS surfaces improve on this by allowing any number of points (in one of the grid directions) so it makes it easier to make one big flowing surface.

Actually it is possible to dice up a NURBS surface into smaller Bezier pieces. NURBS are kind of like a method to manage a string of Beziers but in such a way that each Bezier is guaranteed to connect up to one another in a smooth manner.

Then the "more advanced edge curves" part is the trimming mechanism. This is kind of an additional mechanism layered on top of the basic NURBS surface.

About shared edges - that is another level of information to the trim curves. If you have 2 trim curves from different surfaces that touch one another (like they were calculated from an intersection between the surface for example), there can be some information stored that keeps track that these 2 surfaces share a common edge. This is what provides for making a logical "solid" out of a bunch of trimmed surfaces - if every edge is a common edge shared between 2 surfaces you have a connected skin of surfaces that defines a volume.

> Do you know anywhere where I can read about the fundamental methematical structure of NURBS?

Hmmm, maybe Wikipedia?

A lot of computer graphics textbooks will cover it.

This is kind of a high level overview:

http://rhino3d.com/nurbs.htm
I think this one is one of the best online articles about how NURBS curves work:

http://devworld.apple.com/dev/techsupport/develop/issue25/schneider.html
- Michael