How to offset a complex surface?

Hi all,

I’m attempting to make a parametric balustrade and trying to offset this surface (highlighted in green) being the midpoint. I’ve attempted using sweep 2 but the surface pinches when running over the fillet.

The attempt when using sweep:

surface pinches along the fillet:


But fine at both ends points:

I then attempted to swap the polyline offset in order to maintain the thickness along the fillet. But whenever I explode these polylines the fillet also divides into a series of segments and I’m unsure how to effectively manage the data in this option:

GH script:

Script_Handrail_Test_V2.gh (64.0 KB)

Please note there are jellyfish and clipper plugins used in the script. I’ve always highlighted the area in blue the script where these attempts were made:

Rule 0815, from the (imaginary) book of “Clean-Modelling for Dummies”:

You never-ever offset a fillet! You only offset “theoretical” (=low curved) shapes and blend/fillet the resulting shapes with similar blending properties. Even if you get a small deviation at the middle of the fillet, your shape will just look nicer.

You can also offset the fillet, but only take the result as a reference for the new fillet/blend.

You shouldn’t use sweep here as well. I would always create all edges in parallel and simply create the surfaces from these edges then. Sure, it’s more work, but you get better/cleaner surfaces, and this will help you at a later stage.

Hey Tom,

I understand where you’re coming from however, Rhino has never given me any issues when offsetting a filleted surface or curve. Do you have an example script I could take a look at? I’m still learning grasshopper and have limited knowledge.

The only way I would know how to do this is by using deconstruct brep and then use list item to isolate the needed edges. Is this the solution you were thinking of? if so, it’s flawed. If you want to flip the surface direction it seems to randomly shuffle the list order which breaks the selected edges.

Direction 1:

Direction 2: