Revolution Surface ToNurbsSurface() changes point count

So since the RevSurface methods are not exposed in RhinoCommon the only way for me to deal with such surface at the moment is to use the ToNurbsSurface() method and deal with it that way. One thing that I noticed though when using that method is that an extra point was added for each of the U direction control points. When querying PointsOn surface in Rhino UI i get 32 points, but after converting it to NurbsSurface i get 36 points.
It would all be good to me, however when those same 36 points are used to re-create such nurbs surface in Grasshopper I get an almost the same surface, but it has a small deformation. I am not sure what is causing the small difference in shape but I would love to find out.

The method I am using in Grasshopper to re-create the surface is rc.Geometry.NurbsSurface.Create()
Here are my before and after surfaces:

Ps. What I am doing exactly is de-constructing the original rev surface using Grasshopper. Sending it to Dynamo and re-constructing it there. Now I am testing sending it back to Grasshopper from Dynamo and re-constructing it there again, but it comes out a little different.

You need to set the corner control point weights to sqrt(0.5). To make a circle, you need to use rational b-spline curve, with weights not equal to one. Inspect the weights with the weights command, or in code when getting the control points as Point4d.

Ahh, I see now what is screwing this whole thing up. When I am writing this Nurbs Surface out to Dynamo it reads Weights properly (like you said the corner ones are sqrt(0.5 while all other are 1), but once in Dynamo it refuses to spit back Weight properties for each point, hence setting it all back to 1).

This doesn’t solve my problem, but at least I know what tree I need to bark at. Thanks! :smile: