@David and anyone else who is curious:
The problem with B-reps is that there are two representations of each “trim curve”. Please check this nice diagram out: Rhino - Brep Data Structure
Each trim curve is represented in 2D and in 3D. The reason for this redundancy is that in 3D, there is only one 3D trim or “edge” curve, regardless of whether one or two faces is incident on it. In 2D, there is always one version of this curve per face. I believe users primarily interact with the 3D trim curves and are frequently unaware of the existence of the 2D curves.
Different operations are easier or harder with these 2D and 3D curves. Sometimes using the 2D curve is natural, sometimes using the 3D curve is. Consequently, many Rhino functions use on or the other. The natural way to do a trim is as Dale described, and involves passing through the 2D trim domain of the surface on the way to final 3D edge curve. Of course, along the way, the 2D trim curves are also computed, and are extremely important.
The trouble with the example being discussed in this thread is that while the 3D trim curve is simple to write as a NURBS (it’s just a circle…), the 2D trim curve is not.
Here is a simple demonstration: let’s say the surface is S(u, v) = (cos(u)cos(v), sin(u)cos(v), sin(v)). Its axis is just the z axis. If we intersect it with a cylinder which is centered about the origin and whose axis is the x axis, we are effectively intersecting it with constant x planes; e.g., x = C where -1 < C < 1 (assuming we don’t just get a single point of intersection at the antipodal points of the sphere).
To write down the 2D trim curve, we can solve for v. Since x = C, we have cos(u)cos(v) = C, or v = arccos(C sec(u)). As far as I’m aware, this curve is transcendental, and cannot be written as a rational, even though the 3D trim curve can.
It is arguably worthwhile to go ahead and get the 3D trim curve correct, but there will always be the need to approximate the 2D trim curve in this case (and indeed, in basically all similar cases).
So this is really down to marginal effort. There is a lot of Rhino to write… If the 3D case is important for you, please give a detailed explanation of why, beyond “shouldn’t Rhino do this already?”.
Incidentally, the NURBS curve versions of circles are quite ugly things (they have bad parametrizations, their degree grows rapidly if you take derivatives, etc.). If it were me, I would probably prefer a nice degree 3 or higher B-splines with reasonably spaced knots. NURBS (as in, rational B-splines) cause all kinds of headaches later down the line.
Sam