I've been playing with a few different CAD programs and have become interested in the math involed with CSG and spline-based surfaces. During my research, I found that the curve representing the intersection of two NURBS surfaces is not necessarily a NURBS spline, which means that the result of a CSG operation on NURBS surfaces is not necessarily a NURBS surface or even a solid built from NURBS patches.
Is there a common type of spline surface (i.e. rational Bézier surfaces) for which the intersection of two spline surfaces is a spline of the same type?
As far as know, the only parametric surfaces that have this nice simple property are planes. Even the intersection of two circular cylinders can not be represented as a polynomial or rational spline curve (i.e. as a NURBS curve).
There are a couple of different approaches that are used in CAD systems.
The first approach is to use "procedural" intersection curves. These are not splines; they are defined in terms of the two surfaces. At any given parameter value on the curve, you can compute a position and a tangent vector (by doing computations based on the two surfaces), and this is enough to make a lot of CAD algorithms work.
The other approach is to represent the intersection by two curves, one lying on each surface. The curves are so-called "parameter space curves". You take functions $(u,v) = \big(u(t), v(t)\big)$ and form the composition of these curves with the equation of the surface. So, suppose $S(u,v)$ is your surface. Then $t \mapsto S\big(u(t), v(t)\big)$ is a curve lying exactly on this surface. You do the same on the other surface, and you try to ensure that the two curves are close together (you usually can't ensure that they are identical). You store some additional topological information indicating that the two curves are supposed to be regarded as identical even though geometrically they are not.
That's how things work.