Bezier to Nurbs


Rhino includes converttobezier, so I can convert curves and surfaces in this direction. But what if I want to convert from bezier to nurbs? I can do that manually for curves, but thats too much work. Does anBody have a script or gh definition for that?


Beziers are a subset of NURBS, there’s no way to go “back,” it already is NURBS just of a particular arrangement, whatever information was lost in the conversion process is gone.

Hallo Jim,

I’m sorry, I meant simple unweighted Bsplines.
I know that the curves must be continius to do the conversion…It’s only meant for these simple cases.

In regular Rhino use Match with Curvature continuity checked and Merge checked, followed by RemoveMultiKnots.

@JoergH This thread is in the “Hardware” category. You may want to change it to “Grasshopper”.

Hallo David,

I’ve tried this, but the surfaces seem to get a lot more control points than necessary, and the form changes.

best regards


I was talking about curves, not surfaces. I’ll look into surfaces.

Ok, thanks - changed


Let’s say I have 4 simple Bezier deg 3 Surface with each 4 control points=16x4 =64 control points, and I would love to get the same 5x5 Bspline Surface with 25 controlpoints. The idea is to reduce the number of control points, and get the"free" continuity between spans by doing this.

MergeSrf with Smooth=No and Roundness=0
RemoveKnot repeatedly in each direction until the surface changes shape. Experimentation may be needed to discover where and how many times to remove knots.

If the surface started as a non-rational surface and was converted using ConvertToBezier the original surface should be able to be recovered.

Hi @JoergH,

If you are comfortable with RhinoCommon, you can use BezierCurve.ToNurbsCurve.

– Dale


Will there be a regular Rhino BezierToNurbs command in the future?

Thanks a lot.

Tried it for a planar surface, and it seems to work. One needs to know the pattern to understand which controlpoints have to be removed. Will try it later for some more real surfaces.

Thanks for that information.
I am new to Rhinocommon. What is the best way to start using it?

Make sure to use RemoveKnot which rearranges the control points so the shape is not changed if the continuity between spans is one degree less than the degree of the curves (G2 between spans for degree 3 curves.) . Do not use RemoveControlPt which does not affect the remaining control points and the shape will be changed.

Ok, I’ll try that later.

Using just Rhino command, how would you create a Bezier curve?

– Dale

I’d use a C# Script component. But a GhPython Script or VB Script component would work too.

– Dale

Ok, thanks a lot. I’ll try that. But this is only for curves? Or could it be possible to extend this to work with surfaces?

RhinoCommon doesn’t expose a Bezier surface object, although there is on in Rhino. The the quick answer is no I guess.

– Dale