Fillet around extruded surface in Grasshopper

Just like everyone else, I’m having trouble with fillets on extruded edges in Grasshopper. I have a delauney mesh that is producing a bunch of triangles. The goal is to be able to fabricate the mesh with 3/4" plywood. So each of these triangles is extruded 3/4". I then want to fillet the edges of one face of the extruded object to simulate running a roundover bit around the perimeter of the piece of plywood. I think I have actually managed to get all the indices of the edges I want to fillet, but it’s still giving me an error. Any help would be greatly appreciated.

Here’s the shape I’m trying to create:

Here’s the relevant part of my Grasshopper file:

I’m deconstructing the brep produced by the extrude, then culling the index of the faces list to remove 0, 1, 2, and 3. This leaves the ‘front’ face (the one that is the same shape as the initial curve, but is the result of the extrude). I then find the center of that face and feed that point into and “edges from faces” component. Based on the previews I see in Rhino, it seems like I’ve selected the correct edges, but the fillet component is giving me an error: “You may not specify more radii than edge indices”

This is what I see with the “edges from faces” component is selected:

Help Us Help You - Grasshopper - McNeel Forum

The S input likely needs to be grafted.

Thank you for the quick replies @Quan_Li and @martinsiegrist ! And sorry for not attaching the file. Here it is:
fillet along extruded (12.8 KB)

In order to have a matching tree structure, you also need to graft the B input on the Edges from Faces component.

If all this sounds complicated, learn more about data trees here:

Designing with Data Trees | The Grasshopper Primer Third Edition (

You need to generate a list of edge indices, not the edges themselves. Be careful to not exceed the limits of filleting by passing a large number to radii.

fillet along extruded (14.4 KB)

Look at the output…

You need to graft the S input on the Fillet Edge component.

Even then, I’m not sure if those are the edges that the OP wanted to chamfer or fillet?

The I output of the Edges from Faces component is a list of indices so that is not the problem here.

You’re right about grafting the S input. But it seems the edges have been filleted correctly.

Even though they’re not the right edges, you still can change them in the cull index component.

I forgot to graft the S input. Here is the correct file.
fillet along extruded (13.5 KB)

Your approach is not a flexible, parametric solution. It only works as long as the edge indices don’t change.

fillet along extruded (27.6 KB)

Which of the edges needd to be filleted is another question?

As long as all the extrusions are still in the same direction, edge indices will be the same pattern (As far as I know).

This is correct.

1 Like

Thank you both so much! @martinsiegrist I will definitely need to learn more about data trees, thank you for the link.

The edges that need to be filleted are the ones that are not touching the original control points. The ones that are highlighted in green in my third screenshot.

1 Like

In case my description isn’t clear, this is what I’m trying to do to each of the triangles:

I’m still trying to go through each of your GH files and understand them. I figured that picture might be helpful in the meantime.

1 Like

In that case you can create the set difference of all edge indices and the edge indices of the edges in contact with the points.

fillet along extruded (25.6 KB)

Thank you! This solves my original question, but I’m still trying to understand two things about your file (if you have time).

  1. I see that you took the full set of edges from the breps created by the extrude, and did a set difference with the original set of edges. For some reason, this works and results in only the edges I wanted, but I don’t understand why the results don’t also include the edges along the extrude path? Those edges are definitely not in the original surface (since it’s only 2D).

  2. Immediately before the set difference component, why do you have to feed those sets through a text component first? It looks like the exact same data in a panel.

The extruded polysurfaces have nine edges. Their indices are 0 - 8. Using list length, the series count would adapt, should one of your initial surfaces all of a sudden have four corners or more.

The Cull Duplicates component takes all points and eliminates the duplicates. The P output is a list of the points without duplicates.

Edges from Points with the valence input set to ‘1’ extracts all edges which touch at least one of these ten points.

The Set Difference component works with text and not integers, hence the integers need to be converted to text.