Nurb Surfaces, Control points and weights

Looking for help in regards to a plate with hole where the user would like to obtain the control points and the weights. The problem with rhino is if i look at the out curve of the surface you can see that the control point creating the circle has a weight of 0.707 (as it should)
where when you create a surface you get
when i should be getting

as control points.
When you get the later control points running the code for NURB surfaces you can obtain the correct form while in rhino i get negative values in the knot vector something that isnt correct
would love help on this topic.

Uploading a .3dm file with the geometry eliminates a lot of questions and guessing. You can upload a file by clicking on the vertical arrow icon above where you type a post, or by dragging the file to where you type a post.

Knots with negative values are not a problem in Rhino. They occur frequently.

I assume you are aware that all surfaces in Rhino have four sides, although one, two or three sides can have zero length.

Are you assuming Rhino works similar to other software you are familiar with?

I am running a isogeometric analysis on surfaces. To do so I am trying to extract from rhine to NURB properties of surfaces, knot vectors and control points+ weights.
Its not a matter of uploading a file, because according to your explanation nothing is wrong. Im trying to explain that when designing a surface with a hole as you can see Rhino creates control points which are wrong by definition of NURB surfaces. By definition of NURB surfaces and in order to obtain the correct figure when running a NURB surface routine all values of the knot vector must be strictly positive. This is a direct result of allowing the weights to be different than 1. by doing that we can represent all types of curves and even changes from straight lines to curves within the same surface

check out

there is a underlying nurbs-Surface and trim curves that define the visible / used part of the surface

see this info to understand the underlaying concept

kind regards -tom

Hello- knot values must be increasing but need not be positive. I am not sure what to make of the rest of your comment.


Hi Tom,

Thanks for your response. I’m not sure I completely understood this concept of boundary representation. How is it practically used in rhino?

What is the source of this requirement? NURBS is a mathematical concept, not a proprietary system.
There are multiple ways to represent NURBS curves and surfaces, and multiple algorithms to efficiently evaluate NURBS curves and surfaces. Some algorithms have restrictions on the way NURBS are represented but that does not mean other ways are invalid.

Perhaps NURBS in Rhino use a different system than you are familiar with. Different does not always mean invalid.

NURBS curves and surface can be reparameterized without no alterations to the geometry. That is a fundamental property of NURBS.

The Rhino command to reparameterize is Reparameterize

Weights are distinct from knot parameter values. Reparameterizing a NURBS curve or surface does not change the weights.

Attached is a .3dm file with two surfaces which are geometrically identical. Both surface are trimmed which is a standard method used by Rhino and other 3D software to represent surfaces which do not have four sides. The surface on the left is the original surface and has negative knot parameter values. The surface and trim on the right were reparameterized.
NURBSSurfaces.3dm (2.8 MB)

For more information about the specifics of NURBS in Rhino see:

From what I understand, the reason for the negative values of the knot vectors is because rhino must compensate for the fact that it is trying to create a curved surface from the convex side and not concave as is expected. If you look at the boundary curve you can see that the control point of the curve section is on the concave side of the curve resulting in a weight that is 0.707 the moment you try to do the same as a surface rhino automatically creates a rectangular grind of control points (why???) and then must compensate for that face that every point has a weight of 1 (Why???). How do i overcome this and obtain the control mesh of the last picture posted (this will result in 2 positive knot vectors and control points with weights different than 1
Thanks for your help

I think maybe the OP is not understanding trimmed vs untrimmed surfaces?

what does this mean, exactly? what process are you using to do this?


Incorrect assumption. Negative parameter values are unrelated to shape of a surface.

Is there a different command that will not give a rectangular control point mesh

Hello- please see the Help files and level 1 and level2 training materials here -


1 Like

Figure (a) could represent a 2 x 1 span untrimmed NURBS surface.

Figure (b) could be a 3 x 1 span untrimmed NURBS surface but the upper left corner would be degenerate with stacked control points and likely to cause problems.

Rhino has multiple tools and methods for creating surfaces.

How is it possible that when comparing the nurb properites of these 2 cases

what we get is (after reparametrization) for the square:
Knots U:
Order U:
Knots V:
Order V:

while for the trimmed square
Knots U:
Order U:
Knots V:
Order V:

It is not possible that they have the same knot vectors and same weights.
Something is wrong here.

Hello - trimming a surface to create a trimmed brep face does not change the underlying surface. If you want an untrimmed surface, you’ll need to construct it that way. (Though I do not think there is a way in your example shape.)


Trimmed vs untrimmed surfaces. Look it up. You are comparing the same two base surfaces.

I see

Yeah, I could make one of those, but it took jumping through a couple of hoops. Normally Rhino wants to make a trimmed surface or a polysurface when presented with this type of geometry…

SingleSrf.3dm (58.9 KB)


This is wonderful.
How did you do this? I’m not sure I handle rhino well enough yet to fully understand how this was done.
How would you refine this geometry in the way you did it?