U and V spans in Patch - what are the restrictions?

Rhino 4.

I’m building a complex surface from a bunch of curves. The Patch command seems to work best. In order to make what I am doing work, I’m using high values of U and V spans … on the order of 50 or 100.

I have noticed that when I set the values high, Rhino reduces them in a complex way. For example: If I set U-spans high, the value shown in the parameter box remains the value I set, but the value used seems to be smaller. And the next time I use Patch, the initial values that appear in the parameter box (which I guess are the values from the last time I used the command) are smaller than what I set. Maybe the V-spans parameter changes, even though I just changed the U-spans parameter.

I’m typing from a PC without Rhino on it, so I can’t give an exact example right now… But try using Patch and setting U-spans and V-spans to 100. What happens? Finish that patch command, and then start Patch again. What do you see as initial values in the parameter box?

Can someone please clarify what is going on?

Dave Golber

you’ll probably have to post a specific set of curves this is happening to you with… if i try what you’re describing, everything seems to work as expected…

(that said, i’m on Rhino 5 instead of 4… and mac though i don’t think the mac part would matter here.)

Rhino 5 for Windows works as expected for me. Number of U and V spans as well as Stiffness is preserved in Patch.

Do you have multiple instances of Rhino open?

V4 is restricted to 50 by 50 spans You can get more than 50 in one direction if you use fewer in the other, but I/m not sure how the max is decided in this case.


OK. I checked it our in a simple case. Here’s what’s happening:

This is Rhino 4.

I made a simple square, with corners at +/-50, +/-50
I tried several Patch commands, all with
the curve = that square
point spacing 0.25
stiffness .001
no trim
no tangent
no starting surface.

In each case, I can verify the Uspan and Vspan that Rhino is actually using by
(1) using List to look at the surface. The CV count seems to be 3 more than the span, and
(2) The Uspan and Vspan actually used in one Patch command are filled in as
defaults/suggested values/whatyoucallthem the next time you do Patch.

Here’s what I found:

(a) If Uspan + Vspan <=100, they are used unchanged.
(b) If Uspan + Vspan > 100, they are both reduced,
but not necessarily to values whose sum is <= 100.
© The “reduced” values from an instance of (b) are acceptable to Patch,
are used unchanged.

Here are some examples:

If (Uspan,Vspan) = (50, 50), these values are used unchanged.
(70,30) is used unchanged.
(51,50) is changed to (50,49)
(100,40) is changed to (88,28)
(88,28) is used unchanged. (This is an example of © above.)

It is useful to me to have this sorted out.

If I may be so bold, let me say: I think is bad user interface. Rhino 4 takes a value specified by the user, and then uses some other value, -->>> without telling the user <<<----.!

All that is needed is a message “Values (Uspan,Vspan) = (100,40) cannot be used. (88,28) have been used instead.”

Imagine: You are on a flight to Paris. For some reason, the flight is diverted and lands in Nice. But no one tells you! You get off the plane and ask the taxi to take you to the Eiffel Tower… What would your opinion of the airline be?


i’d probably just upgrade to rhino airline 5
: )

(as in- i imagine the development resources are going into v6… service releasing for v5… and probably not much in the way of v4 UI issues.)

None at all… V4 is a done deal.

And very little here as we are already on SR 12. Not sure there will be a SR 13. any significant change will only be in V6.


Yes … it looks like this is fixed in Rhino 5. I’ll see how much it costs me to upgrade.

But I want to make the point about user interface. Is there a list of user interface rules?


(1) Don’t make the user guess. For example, if he has to enter a telephone number exactly in the format 123-456-7890, tell him.

(2) Make it easy for the user: Accept a telephone number in any format. You can write code that will pick up ten digits in a string of characters, can’t you?

(3) Do what the user asked you to do… If the user asks for 100, give him 100. If you can’t give him 100, tell him what you are going to do. (This is the one that Patch violated.)

(4) …

Could you do this for me … before I lay out $495 to upgrade to Rhino 5:

Make a square with corners ±50,±50.
Make a Patch using that square as curves.
Same parameters as I use
Sample spacing 0.25
Stiffness .001
No trim, no tangency, no starting surface.

Uspans= Vspans =100.

You get a surface.

(1) Click on the surface and use List. What CVs do you get?

(2) Delete the surface you just created. Start Patch again on that curve. The Parameters box will show suggested values of Uspan and Vspan. What are they?

This is what I have to do to check that Patch actually used the Uspan,Vspan=(100,100) parameters that I asked for.

Thanks, and I’ll buy you a beer if we meet.

Dave Golber

It actually makes 103 cv’s when you enter 100. 102 spaces. It adds an extra row of knots at each edge…



Hi David -

Keep in mind that span count does not equal point count.
Start InterpCrv, degree 3 and place two points. What you get is a single span curve with four points. InsertKnot once - the result is a two span curve with five points.


Thank you very, very much, Mitch. 103 is in fact what I expected … In doing the experiments above, I always saw three more than what I asked for, with the constructed surface (not trimmed) extending past the sides of the square.

So I guess I will shell out for Rhino 5.