InsertKnot/Control Point Workflow Problem

I’m doing a lot of surfacing of laser scanned data these days, and my workflow tends to favor point editing surfaces over creating lots of input curves. This keeps my surfaces clean and simple, and lets me edit/match after the fact. Essentially what I will do is start with a half way decent surface that matches my laser scanned data, and then point edit as needed. If I feel that I don’t have enough control, I will up the degree of the surface, so quite often I’ll start with a degree 3 surface, do a little tweaking, go to degree 4, tweak a little more, then polish if off at degree 5. I’m just upping the degree without changing the surface by using the Shape plugin, but this could be done just as easily with Rhino’s ChangeDegree. Sometimes, to hit the target deviation from the reference data, I will even start to add additional spans - so maybe I end up with a surface that is degree 5, 3 spans or the like. Anyhow, the problem I’m having is in the addition of control points/spans. My understanding of NURBS math is that:

For any given curve/surface of N control points, the same shape can be represented with N+1 control points.

Is this correct? If so, then for a curve that is say degree 5 with 6 points (single span), the same curve can be represented with say 8 points, or 10 points, right?

Using the InsertKnot command, and using the Automatic option works in this way the first time you bump up the control point density, but after that it starts to add points at a geometric rate. So, for every time I use InsertKnot, the control point count will go: 6->7->9->13 and so on. What I want is something that will go 6->7->8->9 instead - if such a thing can be done without making the surfaces non uniform.

And, just to nip it in the bud, no, Rebuild won’t work here - it will change the shape. What I’m looking to do is add control points at a rate of N+1, without changing the shape or making the curve/surface non uniform.



1 Like

HI Sky - using MidPoints = Yes inside InsertKnot will help in that you can add a knot in the span you want to and keep the knot spacing pretty uniform and therefore more tractable in point editing. But yes, going up in degree or adding knots keeps the shape exactly.


Pascal -

The problem though is that I can’t seem to add N+1 points - it starts adding more points than I want very quickly - on the 3rd go around it is adding 4 points, for instance.


Yeah - don’t use Automatic if you don’t want to split every span - that is what that does - a single span will become two, a two span will become four, etc. Instead, use the interactive click-to-insert but use Midpoints to split just the span you want to - does that make sense?


Hmmm okay I’m trying that, and that makes sense, but once I insert one knot in the middle, my next option gives me two points that are off to the side of the middle, and I can pick one but then things start to get lopsided.

And if I try to use “Symmetrical” set to yes, it adds two points per go around, and makes the surface non uniform

Even if symmetrical is set to no, doing it that way makes a non uniform surface, which is not what I want. I’m looking for a uniform surface/curve, that has N+1 control points.

Right… in order to keep the shape, the knots go where you put them - they are not redistributed evenly or anything. InsertControlPoint will put the points where you want them but the shape will change…

Using midpoints InsertKnot will keep things pretty uniform and MakeUniform on the result will probably not change the shape very much at all. Worth a try…


Huh, so I think this goes back to my original question - for any given degree/point count curve/surface, can it be represented with the same exact shape, uniform, with N+1 control points? Is it mathematically possible to redistribute the points evenly, keep the shape, at N+1?

Well, those are two different things… I think yes to the first part, but not necessarily to the second part.


Based on my knowledge of NURBS math, not the details of Rhino’s implementation:


Generally no, though there can be “special cases”.

Experiments show that InsertKnot and InsertEditPoint preserve the shape of the curve. InsertControlPoint usually changes the shape of the curve.

And, to be clear - right now using InsertKnot to add one more control point, once the surface is no longer single span, will result in a surface that is not uniform - at least that’s been my experience. For this example, when I run MakeUniform it tends to move the whole thing too much, that’s why I avoid making non uniform surface in the first place.

Sky, using Midpoints in InsertKnot should minimize the changes to the shape from MakeUniform - do you not find that is the case?


I DO find that’s the case, but this goes back to my original problem- Midpoints=yes will very quickly start adding LOTS of points - it goes up geometrically, not N+1. As best as I can tell, Midpoints=yes creates a uniform surface, so there is no difference in the surface if MakeUniform is run.

Oh wait, I’m thinking Midpoints with symmetrical set to yes.

No, if you use Midpoints=yes, and it’s beyond two spans, the only midpoints you can select are not in the center of the surface, so it creates a non uniform surface, which then moves too much when you run MakeUniform.

No… hold on - Automatic splits each span no matter what, Midpoints=Yes allows you to pick the location in the span you want - you just get to snap to the middle of the span, but you need to click the location you want - see how that works?


Yeah, we are on the same page now, but again, the problem with that is that it creates surface which are not uniform (almost always).

Right - non uniform but only (hopefully) slightly, is what I was getting at, so MakeUniform may still keep things in a usable state…


Okay, so I think we’ve established that in theory, it is possible to:

Add N+1 control points to a curve/surface
Keep the shape
Keep the resulting surface uniform
However, the point distribution may not be even.

Currently, InsertKnot will let you:

Add N+1 control points
Keep the shape
But the resultant surface will most likely be non uniform (but not always).


Yep, I think that is correct.