hopific logo blue

Fillet Curve in Grasshopper – The Complete Guide

Fillet in Grasshopper Indepth Tutorial
Quick links

Fillets are an indispensable design tool for any designer. It’s one of those commands that can make simple shapes look sophisticated. While it is a straight-forward command in Rhino, in Grasshopper it can be a bit more complicated to fillet a curve. That’s why I decided to write this guide.

In this 5-minute read I’ll go through the three ways we can fillet curves in Grasshopper. I’ll be highlighting their differences and possible applications.

The Basics

If you’re used to fillet curves in Rhino, trying to do the same in Grasshopper may be confusing at first.
Here’s why:

In Rhino, a fillet usually involves selecting two separate curves, and specifying a radius. Rhino then connects them with a fillet of the radius we specified.

In Grasshopper it’s different: We can only fillet segments of a joined curve. In practical terms, this means that we need to join any curve segments we want to fillet before running a fillet command! Curves that aren’t connected, or touch but are still two separate curves, won’t work.

Grasshoppers fillet curve input requirements

The 3 Ways to Fillet a Curve in Grasshopper

There are three different fillet components in Grasshopper. Type ‘fillet’ into the component search bar (accessible by double-clicking anywhere on the Grasshopper canvas) to find the available components.

The three fillet components in Grasshopper

The first three results all fillet curves, but they work slightly differently. The first two components actually have the same name, but their description reveals how they differ. Here are their names and descriptions:

  • Fillet (Fillet a curve at a parameter)
  • Fillet (Fillet the sharp corners of a curve)
  • Fillet Distance (Fillet the sharp corners of a curve by distance)

Let’s look at each component more in detail.

Fillet (Fillet a curve at a parameter)

The first result when searching ‘fillet’ in the component search bar is arguably the least useful one! Let’s look at it anyway.

Adding the Fillet by Curve Parameter Component in Grasshopper

This component will fillet only a single corner of the curve. We specify which corner to fillet with a Curve Parameter (t). The corner on the curve closest to the curve parameter is the one that will be filleted.

The component has three inputs:

  • the Curve (C)
  • the Curve Parameter (t)
  • the fillet Radius (R)

Like all fillet components, the Curve (C) input asks for the joined curve to perform the fillet operation on. The Curve Parameter (t) is used to indirectly pick which corner to fillet. And the Radius (R) input controls the radius of the resulting fillet.

For any component involving Curve Parameters, I recommend to reparametrize the curve before continuing. This ensures that the Curve Parameters are reset to a range from 0.00 to 1.00. That allows us to specify the location on the curve with a Number Slider of the same range. The value 0.00 corresponds to the start of the curve, and the value 1.00 to the end.

Basic Script Example

Here is the basic setup:

Filleting a Curve at a Curve Parameter

I referenced a Curve from Rhino, reparametrized it by right-clicking on it and selecting ‘Reparametrize’, then added the Fillet component as well as an Evaluate Curve (Eval) component. The Evaluate Curve component displays a point at that Curve Parameter. I used a Number Slider with a range of 0 to 1.00 to specify the Curve Parameter for both components.

In the example above I have a curve with two corners. The Curve Parameter of 0.21 (visualized as a point with the Evaluate Curve component) is closer to the first corner, which is why that’s the corner that’s going to be filleted. When changing the Number Slider value, the fillet will jump from the first sharp corner to the next. Whichever corner is closest to the chosen curve parameter, will be filleted.

As you can imagine this approach is not very precise. We have to approximate the location of the corner to fillet, making it a poor choice for a robust Grasshopper script. On the other hand, it’s the component that gives us the most control.

If we want to fillet all the sharp corners of a curve, there is a better option:

Fillet (Fillet the sharp corners of a curve)

The second ‘Fillet’ component fillets every single sharp corner on the curve.

Adding the Fillet All Corners Component in Grasshopper

Because of that, the inputs are reduced to two:

  • the Curve (C)
  • the fillet Radius (R)

The Curve (C) is the curve to perform the fillet operation on. And the Radius (R) input controls the radius of all the resulting fillets. (With a caveat, more on that soon.)

Here’s what the basic setup looks like:

Filleting all Corners of a Curve in Grasshopper

I set the Radius (R) to 4.00, and as a result, all sharp corners on the curve are filleted with that radius.

But the resulting fillet radius won’t always be exactly what we specified:

Limitations

Just like in Rhino, we can’t provide just any Radius for the fillet. If the two curves to fillet are too short, Rhino will ‘run out’ of curve to fillet – the fillet can’t be created.
To help with this problem, the Fillet component in Grasshopper will automatically reduce the fillet Radius of those corners to a radius that works.

Here is an example: the radius of 4.00 works for one corner, but all the others have smaller radii.

Adapting Radii for fillet

It’s also important to note that Grasshopper will never go beyond the curve segments middle point for a fillet – probably to ensure that the other side of the curve can be filleted too.

In the example below, all three curves should be filleted with a Radius (R) of 4.00. But the curve segments of the first and second curve are too short – creating a fillet with a Radius of 4.00 would mean that the fillet goes beyond the midpoint of the curve segments. Grasshopper limits the radius to the midpoint of the shorter curve segment.

Adaptive Radius of the fillet component

In many cases we’ll want to fillet all the corners of a curve and not just a single one, so this component is already much more useful than the first. Still, it can lead to undesired results.

Consider the following example:

Example of Uneven Fillet output

We have a closed, polygonal curve. By filleting all the corners, we get a very different looking fillets, even though they all have the same radius.

Why?

Because the different angles between the segments lead to very different ‘fillet lengths’. Where we have a ‘short’ fillet, we only see a small portion of a circle, whereas ‘long’ fillets show more of that circle – making it appear bigger and more prominent.

While geometrically correct, this visually uneven result is often not what we’re after!

This brings us to the third and final fillet component:

Fillet Distance (Fillet the sharp corners of a curve by distance)

Fillet Distance again fillets all the sharp corners of the input curve, but creates a more uniform look.

Adding the Fillet By Distance Component in Grasshopper

It comes with two inputs:

  • the Curve (C)
  • the Distance (D)

Besides the Curve (C) input, we get to define the Distance (D).

So how can we control the fillet without using a radius and using a distance instead?

Instead of applying the same radius to all the sharp corners of the curve, this component generates custom fillet radii that depend on the distance from the corner points.

The process is best explained with a diagram:

Fillet Distance component example
  • First the component generates a circle at each corner point.
  • Then it trims the curve segments within that circle.
  • These two curves are then joined with a fillet that starts right at those two curve endpoints.
  • The resulting radius depends on the angle between the two curve segments.

This may sound a bit complicated, but the result is much more visually consistent compared to the constant radius fillets.

Here’s a comparison:

Looks much cleaner, right?

Concluding Thoughts on How to Fillet a Curve in Grasshopper

When used correctly, fillets can add a touch of sophistication to our designs. Grasshoppers offers three different ways of controlling fillets. Which one you choose for your projects depends on what you are trying to achieve. Whether you want to fillet a single corner or all of them at once, I hope this guide has empowered you to fillet with confidence!

Happy designing!

Like this article?
Share on LinkedIn
Picture of Thomas Tait
Thomas Tait
Architect at Snøhetta and Head Instructor @ Hopific (or, in plain English, I help designers use Grasshopper to supercharge their designs.
Ready to Dive into Grasshopper? Grab Your Free Ebook!

Accelerate Your Learning and Get Up and Running Quickly.