Hello fellow modelers -
This is my first post.
Swept profiles are abundant in architecture. I and a good friend model classical architecture. Classical architecture consists mainly of swept profiles, in one way or another. First, we tried Sketchup. Now, we are giving Rhino a chance. After a good two hundred work hours, Rhino continues to unfold admirably. With one exception. We have searched the forums to no avail.
Rhino’s sweep commands
Rhino’s sweep commands should be able to handle a simple 2d profile swept along a simple 2d rail. At least according to the book.
However, Sweep1 and Sweep2 often produce discouraging results. One illustration of a simple case:
The image above is merely an illustration of how Rhino behaves at tight inner corners. Our question is how to solve the general case.
In the more general case, the rails may have hundreds of curving and straight subcurves at many tight corners, and the profile may have several curving and straight subcurves.
Intended satisfactory output
• Exactly one (poly)surface
• Profile swept along every part of rails
• Result contained by all rails
• Profile keeps orientation to rail direction
• Not overlapping itself
• Single solid shell
• Rails with 20 to 200 subcurves
• Profile with 10 to 30 subcurves
• Rails with both curved and straight subcurves
• Profile with both curved and straight subcurves
Reasonable input constraints
• Rails planar
• Profile planar
• Good geometry (fair curves, no microkinks, no colinear subcurves, etc)
Typically problematic input
• Rails with tight inner corners
• Rails whose corners’ bisecting normals cross close to rail
• Profiles wider than shortest rail subcurve
• Rails that have hundreds of subcurves
One way to think of the desired outcome would be like dragging the profile along the entire rail, as if it were countinually setting a plaster cast. The profile should automatically be extended at junctions and corners to meet the extensions from adjacent rail subcurves, the excess trimmed away, and then joined into one.
This behaviour seems like a user’s default expectation. This is how real wall mouldings look. This is exactly what sweep does - sometimes.
But only sometimes.
In other cases, sweeping, even with simple input, fails spectacularly. With apparently trivial, planar input, sweeping may introduce gaps, loops, split surfaces, self-intersecting surfaces, missed rails and overshoots. For some self-explanatory examples, please see .3dm attachment below.
Why and when does sweep fail?
• Rhino’s sweep command may be based on some kind of rail offset. At inner corners (reentrant angles), offsetting produces latent gaps or loops. This occurs where offset’s bisecting corner normals from two inner corners extend to cross each other. How could one make Rhino also in this case simply extend and trim, as at outer corners?
• Profiles wider than the length of a rail subcurve usually go awry around that short subcurve. An updated sweep algorithm could likely resolve this. Or is there already another way?
• Rails with many ins and outs seem to cause problems. But if the profile is manually swept over just two or three rail subcurves at a time, and then manually trimmed and joined, it often works. How is this done in one go for a rail that has some hundred subcurves?
• Offsetting a rail manually and running Sweep2 on both rails usually improves results compared to Sweep1, but it still yields gaps and undesired artifacts. We have tried a host of sweep settings, rebuilding curves, multiplying profiles along rails.
If a command gives odd results in an exotic case or two, that is fine. There are workarounds. But look at real buildings - in Rome, Paris, London, or Washington, anything upscale from 1500 to 1940. They boil down to thousands of profiles and rails. They are everywhere and their complexity often goes beyond the simple cases that makes Rhino fail. What is the way forward here?
– How do you robustly model complex swept profiles in Rhino?
Please see attached .3dm file for some self-explanatory examples.
(post edited for clarity)
SweepFail.01.3dm (934.9 KB)
(using Rhino 64-bit 5.9.40617.14345 for Windows)