Sweep or Pipe? Or?

The attached file shows a set of curves to make a transition-piece for a staircase handrail. The green rectangles and circles outline an obround handrail section. I’m trying to sweep or otherwise construct this handrail such that it maintains constant section along its entire length. I’m not bothered whether that happens to be the rectangle or the circles - I can create the obround once I’ve managed to get Rhino to give me a constant section. And that appears to be something of a challenge in this case.

The magenta curve (1) is pulled off the top of the balustrade. The handrail has to sit on top of that, so it makes sense to use it as a rail to guide the form of the handrail. But no matter how I try - Sweep1, Sweep2, Pipe, Ribbon, Extrude along curve - I can’t get a method that maintains either constant height (for the rectangle) or constant radius (for the circle). I drew lines from the ends of (1) to the centres of the circles, used Sweep 2 using the two short (green) radial lines as rails and (1) as the section curve, then duplicated the edge of the resulting surface to give me a centreline for Pipe. I matched the curve ends for tangency to the two green lines coming form the circle centres before using Pipe, which gets close but offers no control over the location of the surface seam, and in any case it doesn’t give me a tube with ends that are perpendicular to the pipe curve for some reason, despite the fact that I used CircleAroundCrv to make the green circles, picking the end points of the magenta curve (2) as centres. (3) & (4) are isocurves pulled from a Sweep1 using the circles as beginning and end sections. Curve deviation shows that they aren’t parallel.

Am I missing something obvious here? The curves in the file are simple, clean and perpendicular or tangential where they need to be. Intersecting the green circles with the green rectangles gives me clean, singular contact points. Everything seems straight and true. Why can’t I get a constant section shape? This should be easy. I’m sounding like a newbie… :sweat:

Sweep or Pipe.3dm (82.6 KB)

Is something like this the desired result?

// Rolf

Hi Rolf - yes. But check the isocurves. Are they giving a radius of 25.4 at any chosen station?

I’ve come back this with fresher eyes this morning and got a clean, consistent result using Sweep1 with the align to surface option. As I mentioned, curve (1) is the top edge of the balustrade surface, so I used that as the rail and the surface to align to. Unfortunately, I didn’t include the surface in the file I posted. The circles at either end were the profiles, with the ‘natural’ option used for the seam points. This gave me consistent isocurve radii of 25.4mm all the way along the section and kept the tube seam where I wanted it.

Hm… no. But then I attempted the following :

  1. Run the Sweep1 as in the first attempt with the straight “25.4” sections as to create a flat surface. That flat surface will end up being “too narrow” in the middle (radius less than 25.4)

  2. place a copy of the start curve (“25.4”) as a “strut” near the middle of that new flat surface (see picture).

  3. Draw a full length straight curve as shown in the picture.

  4. Now delete the initial flat surface and Sweep1 a new surface including the middle straight 25.4 as one of the cross sections for the sweep. The new (flat surface) should have a constant width of 25.4.
    5.Finally sweep the radius along the edges of the flat surface from §4.

And voila! It still still didn’t end up good enough… :frowning:

The distance between the rails still becomes narrower between the cross sections. That seems to me to be a “quality bug” in Rhino.

// Rolf

Quite. You’ve used a slightly different approach to the way I was doing it, but have suffered the same problem. To me, if the beginning and end profiles are the same and oriented at the same angle relative to the rail curve, then the section at any point of the resulting sweep should be the same as those profiles. I was frustrated to find that’s not the case.

Pipe gives constant (correct) section, but the shape and more importantly location of the surface seam isn’t very nice and can’t be controlled, unless I’ve missed some part of the user interface.

For what it’s worth, attached is what I came up with this morning, using the method outlined in my previous post, which looks to be clean enough.

Finished Part.3dm (221.0 KB)

You can make a very slight improvement on that technique by sweeping along a center rail instead of sweeping along an edge rail.

In the enclosed file I made another surface using Fin command. I then used the edge of the fin surface as the rail for a sweep1 (align with surface).
Railing.3dm (270.3 KB)

If you check with curvature command on the 2 surfaces you can see that the principal curvatures are closer to alignment with the isocurves. And if you check with surface curvature analysis you can see that the min. curvature radius is a closer to 25.4.

The 2 surfaces are only different by a few thousands of an inch - so it may not be worth the trouble.

A bit of a workaround, but it worked smoothly. See also attached notes in file.

  1. Draw Lines (Blue) from Circle Centers to Intersections with Rectangles, use both sides.

  2. Use Magenda Rail for Sweep1 (you may need to extend it), Blue Lines as CrossSections, do the same with other circle blue lines. –> Edit After Post: Flip the Magenda Curve, to avoid having the Pipe Seam in the surface needed.

  3. Extract middle Isocurve from last surface to get the Rail line for second Pipe, extend the curve a bit on both sides.

  4. Pipe (25.4mm)

  5. Extend Cyan surfaces to Trim the pipes.

  6. PlanarSrf the Rectangles, Scale them up. Trim Pipes With Surfaces from Rectangles.

  7. Loft to get the straight parts of the handrails.

Constant Radii everywhere! :sunglasses:

  • Dimitris

Sweep or Pipe_av3d.3dm (501.6 KB)

1 Like

if you use Circle -> Around Curve to place a circle at the end of the curve then use sweep1 instead of Pipe, you can control the seam location.

i think Pipe does the same steps and gives the same results (constant radius throughout) with the tradeoff being automation over certain levels of control (such as seam location)

FWIW the command SrfSeam will let you adjust seams of surfaces after creation:


1 Like

Following on on a similar theme, when I Sweep1 using the Align with Surface option why does the result kick outboard relative to the guide surface at the lower end? Roadlike Top gives a near-identical output in this case too. The section curves are set up perpendicular to the ends of the rail curve.
Sweep1 Align with Surface.3dm (204.8 KB)

It looks to me that sweep1 (align with surface) is working correctly. If you create a line that is perpendicular to the edge and tangent to the surface you get a surface that follows the same path. The swept surface stays tangent to the surface and perpendicular to the edge. You can verify that with the matchsrf command. (see file)
Sweep1X.3dm (233.8 KB)

Are you trying to make the back surface as a offset surface 6mm from the green surface? If that’s what you want I would make the back of the rail as an offset (trimmed) and then sweep the rest of the profile aligned to the back surface.