Fillet tangent to 3 surfaces (tritangent fillet) command

Hi all,
A command I miss sometimes from other CAD softwares and it may be very decisive for me, is the tritangent fillet which in rhino already exists for curves (circle tangent to 3 curves).

For example in the image above, the valour of the fillet radius along the path will not be constant, because the angle of the patches are not constant with respect to the base, so doing a fillet in one side and another one on the other side, will overlap each other…
Is that possible to achieve that in Rhino without any aproximation that is not an exact radius ?

A typical example I implement this is in the motorbike area:
-Screen, to make the bead all along its border( the thickness is not constant in that case)

Another way to solve that problem, would be to get the middle curve of the limit base, and be able to create a kind of fillet that is made by a holding curve (also used in other CAD softwares).
In this case, these 2 fillets may not have the same valour of radius, but it would sort it out in some way.

I hope for some other modelers may be interesting to have this in Rhino for the next release( :crossed_fingers:), and hopefully is not very complicated to code this… :sweat_smile:


I’m always curious when I see such a topic…

Here’s an attempt in Grasshopper: (30.1 KB)

1 Like

just to have the topics linked.

this topic is about searching a variable radius…
check out testFilletSrfCrv

there is another topic about constant radius:

and also some fancy stuff here:

maybe once we get a few more commands in this fillet, tangent, … area…

nice solution.

tweening the intersections is a nice approximation if the radius does not change to much.

but if there is more difference in the distance / radius - searching the initial axis becomes quite tricky i think:

(just a simple cone … but as soon as all 3 surfaces are freeform…)

1 Like

Hi Tom,

-Regarding to this topic you linked:

I would say that is something similar, but with an additional thing:

In that case, the valour of the radius may not be constant along the fillet surface.

-That image below is exactly what is supposed to do that tritangent fillet command!

Hi Martin,
Thanks for your approach. But is a surface made from a sweep, so is not an accurate radius what you get(rational geometry), just an aproximation.

Yes it’s a Sweep.

I don’t quite understand what kind of accurate radius you’re expecting?

That kind of command:

One challenge with arbitrary input non-planar surfaces is to what should be the orientation of the fillet sections.

Fillet3Srf01.3dm (3.4 MB)

I do not know how similar the method below is to Martin’s Grasshopper solution.

Method used to create it:

First step is to create a guide curve the circular cross sections will be normal to:
TweenSrf to create a surface midway between the two outer surfaces.
ExtendSrf the tween surface to ensure it intersects the middle surface.
Intersect the tween surface and the middle surface to create the guide curve.

Second step is to create arcs which will sections of the fillet:
Plane with Aroundcurve option to create a large plane which will intersect the input surfaces.
ArrayCrv the plane along the guide curve,
IntersectTwoSets the arrayed planes with the input surfaces.
Arc with Tangent option using the intersection curves as the input. One arc per section.

Third step create the edge curves of the fillet:
InterpCrvOnSrf on the side surfaces using the ends of the arcs as the interpolation points.

Fourth step create the fillet surface:
Sweep2 using the edge curves as the rails and arcs as the sections.


i will also buy this command, It is a nice geometric-intellectual tool-fetish (i love nice tools in the workshop)

:dollar: :moneybag:

those sections should be part of sphere that roles along those three surfaces.
So each section is an arc.
the shortest distance of the arc’s center to the 3 surfaces is start, tangent, end on the 3 surfaces.
or in other, rhino words:
if you pull the center (violet) of the arc back to the 3 surfaces you should get start, endpoint of arc, and intersection of arc and surface. (blue)
if the pulled center does not hit the arc (cyan/green points) the section is wrong.


fare from a robust algorithm … some a simple result full-filling above rule

I see a huge potential in some nice new (nurbs) surface Functions.
(@pascal - my chrismas-wish :wink: as patch did not make it)
Sphere tangent to 4 Surfaces
Fillet with given first rail ( @jordi.rovira “something similar, but with an additional thing”)

1 Like

Hi Tom,
Very nice explanation about this function.
Also I remeber implementing this for sheetmetal (in automotive area) to create crimps in the gaps of the bodywork:

Regarding to:

My definition was not very accurate in words (not my mother language :sweat_smile:) but it would be just the testFilletSrfCrv that Pascal Golay did, but assigning a support for the “touching curve”(which may be a patch edge aswell).

This could be very convenient to have in some situations where you are limited to an edge for filleting.
Maybe this should be in another discussion…

which software is this screenshot from ?
Fillet Definition
Fillet Type “TriTangentFillet”

This is Catia V5.
Also Icem surf has this tool.

I have asked for this a few times over the years. Think of it as a rolling ball fillet that the ball changes radius to be tangent and to 3 surfaces. I had this years ago in I-deas v12, it was great and used it often.

I do miss using CATIA at times.

There are lots of construction methods you will find in CAD systems that are just not in Rhino

You can buy one of those or construct something close

When there is a ‘simple’ geometric problem like this, I can’t see that a script or Grasshopper is the way to go

Here is a construction for something very close, I probably simplified a couple things, and each step could be refined

First is trim the 2 major surfaces, make a 2-rail circle down the middle iso-pram of the edge stand-in surface

Make a mid iso on that surface, pull to main surfaces and trim

Now you need to split the edge stand-in, finding the right sprit curve is a bit of a problem

An iso will not land in the correct spot, I manually modified to match in a couple points

Split edge stand-in

Make 2x 2 rail surfaces to surface edges

1 Like

Thank you for approach.
In the case I don’t have another CAD software for doing that, I will try that workaround and see.

If you do it carefully it will be very close to what you are looking for
If you need more detail let me know, I left out some fine points, was tired of typing

1 Like