Sweep1 Roadlike Top?

How is the “Roadlike Top” option in Sweep1 intended to work?

It does not do what is described in Help: The shape curve maintains its angle to the Top construction plane throughout the sweep. The shape curve does not maintain its angle to the Top construction plane.

The attached example has a simple shape curve/section curve and a simple rail curve.
Sweep1RT.3dm (170.9 KB) The surface in layer Sweep1RT (white) was created using Sweep1 with the Roadlike Top option. The section curves (V isocurves) do not have the same angle to the Top construction plane.

The results of Sweep1 with the Roadlike Top option should look like the surface in layer Surface2 (green). The V isocurves are identical in shape to the section curve and they all have the same angle to the Top construction plane. This surface was not created using Sweep1.

A similar problem was previously reported for Arraycrv: Arraycrv roadlike problem

Hi David
SWeep1 RoadlikeTop has always worked this way and it is fine for me.
Ciao Vittorio

Vittorio, how do you describe the way it works?

When the Roadlike Top option is used horizontal portions of the section curves remain horizontal, so they maintains their angle to the Top construction plane throughout the sweep. However non-horizontal portions of the section curves change their angle to the Top construction plane along the sweep unless the rail is in a plane parallel to the Top construction plane. For example vertical portions of the section curves do not remain vertical.

Perhaps this is sufficient for most uses. But the Help description of the Roadlike Top option (and Roadlike Top and Roadlike Front) is confusing and misleading.

(Added) Roadlike Top appears to keep the orientation of the section curves to the rail the same as for Freeform, but twists the section curves so that horizontal portions are always horizontal.

Simple method to create a sweep with he shape curve maintaining its angle to the Top construction plane throughout the sweep.

Start with the rail and section curves.

Make a copy of the rail and displace it normal to the Top construction plane. The amount of the displacement does not affect the result. Note that this is different than the resulting from using “Offset”.

Use Sweep2 with the original rail and the displaced rail as the two rails.

That seems as good a way as any to describe this- the rotation plane is the plane perp to the path curve at the basepoint for each element. ArrayCrv behaves the same way and it is maybe a little easier to see with an array of rectangles.

Hmm- although, that is not quite it either unless the curve starts out tangent to the CPlane. It is a frustrating thing to describe.


Awesome, Thanks for describing these features. I was actually just gonna try figuring these out today, and whatdya know, I get the explanation first. So, after pascals explanation I get it. For my notes, I gonna do a little screenshot example tutorial with arrows, letters the whole 9 and I’ll post it maybe. These roadlike functions appear to have no effect on a sweep of a rail that is completely flat to the cplane. In order to notice the effects, the curve has have a rise or dip in the z plane. So, for a quick description of how to notice it a little easier. Use rendered shading to help the curves show up a little better. Then using roadlike top preview, switch between freeform and roadlike top. You’ll note there is 3 lines you will see. 1 is the middle(if your crossection is aligned that way. The other 2 are the outermost parts of your crossections. In the Roadlike Top, only in the Top viewport you will notice that the spacing of the outermost portions of your crossection(horizontal portions of your crossection) is a constant. Here’s an example with numbers to it. If your crossections horizontal limits were 3mm, your crossection is 3mm wide. Now, divide that 3mm by 2=1.5mm These 3 lines you can see(outermost left of crossection, rail, outermost right of crossection)will be equidistant. from the rail, every point of the left side of crossection will =1.5mm, and hence from the rail to the right of the crossection will equal 1.5mm. Now this example only works like that if your crossection were centered onto the curve. This works the exact same for Roadlike Left, Roadlike Right. In all other viewports, these 3 lines and their distance will be variable. Also remember, the curve has to have z coordinates or have rise, dip in order to even show up. ALso note, that there is no roadlike bottom option, that is because it would give exact same results as the roadlike top. Thanks for bringing it up, I’m real excited to continue learning to be the best I can be in Rhino, and there’s a lot to learn. I’m do some screenshots/descriptions.

I am currently revising this post. I believe I do have it all wrong. They look like roads on top, roads on left, and roads on right, but they are variable.

Roadlike “X” means as the profile is swept along the rail it can rotate around an axis of rotation that will stay normal or perpendicular to the “X” construction plane.
Freeform means it has 3-axis, full freedom of movement, where the others are limited to two axes.

Thanks for the response, I’m currently trying to grasp what david and pascal had described a couple posts above, and playing with the rectangles. I hope to grasp this by the end of the day, and get some diagrams and notes that I can understand. I’m kinda narrowing it down to tucking your left shoulder in on a roller coaster! I’m also realizing there is a lot of ways that things can be rotated around a 3d line when going around a loop. Also that the direction a line is in by looking at a spot on it is pretty tricky to judge on a curve. Sure, on a straight line there is a straight forward, straight up, etc, but on a curve, exactly where the line is pointing when looking at a given spot is quite complicated.

VIsualize a bolt, standing upright, on the Top construction plane.
A helix can be the rail and something sort of like a rounded off triangle tan be the thread form profile curve.
In that case you would want to use the Roadlike Top option, to keep the thread form perpendicular to the Top plane.

If you stretched out the helix in one location more than another, and use Freeform, then the thread form would tilt to follow the steeper angle of the helix when the coils spread out. If you leave the option to roadlike top, then the thread form won’t tilt.

@John_Brock that may be what Roadlike “X” is intended to do, but it is not what it does. Read my posts at the top of this thread and download the example I provided. The profile does not “stay normal or perpendicular to the “X” construction plane.” That is the reason for starting this thread.

Hi David
Roadlike Top maintains the section constant normal to the binary for construction needs
Ciao Vittorio

Vittorio, what is the “binary”?

As I described above Roadlike Top maintains the section so that horizontal portions of the section remain horizontal, but the section does not remain normal to the Top construction plane. See the example attached to the first post.

I just went back to your example and it looks right to me.
I deleted your surfaces and made new using your input curves and using the Roadlike top option.
I make planes perpendicular to the rail and normal to the CPlane, then Intersection them with the Sweep1 surface.
The intersection curves look just like the original profile as expected.

This is only true if the first frame has an ‘ortho’ component- i.e. the path curve comes tangent to the Top plane and has a tangent in X or Y.

We do need an explicit option to maintain ‘levelness’ and only rotate objects in X and Y for the chosen plane.

I dredged up an old script that does this for ArrayCrv. To use the script, extract and save the .rvb file from the attached zip archive, then drag and drop the saved rvb over an open Rhino v5 window. This will load the script, set it up to load on startup in the future and register the alias

ArrayCrvFlatBP (allows setting a base point)

that will run the script much like a regular command. An alias can be typed or added to a toolbar button or keyboard shortcut (F-key).

ArrayCrv_Flat.zip (1.8 KB)


@John_Brock It is not possible to have planes both perpendicular to the rail and normal to the CPlane unless the rail is parallel/tangent to the CPlane. I assume you meant that you made planes which when viewed Top view appear to be perpendicular to the rail (ie perpendicular to the projection of the rail onto the CPlane). If that is the case then the intersection curves may “look just like” the original profile but they will not be identical to the original profile. Copy the intersection curves and align them with the original profile. The differences between the intersection curves and the original profile will be obvious.

For design work “look just like” may not be sufficient.

I modified my original example by rotating the rail curve so that it is not tangent to the Top CPlane but the profile curve is still normal to the rail in Top view with the top part of the profile curve still horizontal and normal to the rail.
Sweep1RT Example B.3dm (255.4 KB)
The top portion of the sections are horizontal when Roadlike Top is used.

Then I modified the example by rotating the profile curve so that it was no longer normal to the rail but with the top portion of the profile still horizontal.
Sweep1RT Example C.3dm (174.8 KB)
The top portion of the sections are not longer horizontal when Roadlike Top is used.

So it appears that when Roadlike top is used horizontal portions of the profile curve which are also normal to the rail remain horizontal. This may not hold for non-planar profile curves.

For both examples I also used the method I described above using a second, vertically displaced rail to create a surface with sections identical to the profile curve and perpendicular to the Top CPlane.

Yeah, sorry- you are correct- the ‘level’ bit has to be ortho in the first frame in order to stay level, is I guess what is happening. Anyway, it is not very intuitive if what you want is a ‘level’ array or sweep.


The Roadlike Top (etc) option does not work as described in the Rhino documentation. There is considerable confusion and possibly some misunderstanding about what it actually does. The documentation should be revised with an accurate and concise definition of what Roadlike Top does, assuming that is possible.

It looks to me like @margaret and the Sweep1 developer need to get involved in this discussion. @brian will know who the developer is.