Don't have a solid fillet



I tried to create a solid fillet between those two surfaces but always got open surfaces. Could anyone have a look at this.


FilletProblem.3dm (256.5 KB)

(David Cockey) #2

Fillets can be temperamental.


Explode the starting polysurface.
Trim the surfaces other than the flat base with the fillets.
Merge the surfaces including fillets but not including the flat base.
Untrim the flat base.
Trim the flat base with the merged polysurface.
Merge the base and polysurface into a single polysurface.


The problem is that your domed surface is a bad object. It has stacked control
points along the bottom edge.

Enclosed is a fixed version of your solid that works…
FilletNoProblem.3dm (96.2 KB)


Hi, Ke_Cao

I made a version (see the attached file, at least version 4 of Rhino is needed) with simple steps to follow in order to make a simmilar design like yours. Here is what I have done to make it successful:

  1. you crate a curve to represent the profile of your dome–shape (make it 3rd degree if you want more rounding of it by tweaking the CVs - control verticies, be careful to make them tangent to the tips of the curve respectively)
  2. you revolve that curve around a vertical axis 360° or pick the FullCircle option from the ‘Revolve’ command
  3. ‘Cap’ command to enclose the dome so to be more like a solid (check for ‘naked edges’ to be sure you do not have one or more)
  4. make a separate solid box object
  5. make a proper union boolean between those two solids (the box should penetrate a little into the dome)
    · problem with ‘Union’ boolean is that bottom surfaces should not be on one plane if the fillet radius is going to be equal to the height of the box (otherwise it gives bad surfaces across)
    · you could later ‘Boolean difference’ the bottom if not too bad for the intended design
    · just check again for naked edges
  6. Round/Fillet the enclosed solid edges in one go (if the radius is going to be the same all over)
    · if the radius is not going to be the same all over, make first the biggest rounds, then the smaller

Curve-revolve-box-fillet.3dm (144 KB)
Curve-revolve-box-fillet-boo-diff.3dm (456.9 KB) – the file with big fillets and removed bottom


when you say ‘bad object’, do you mean it’s bad as in poorly drawn or bad as in ‘i can run xxxx command and rhino tells me it’s bad’ ?

(i mean, i see the problem and agree it’s bad… just wondering if there’s a way to check for stacked points)


My definition of a bad object is one that causes many commands to fail.
Extract the original dome surface and try offsetSrf on it.

McNeel has stubbornly refused to identify objects that have stacked control points as bad objects despite numerous user requests… That has caused users endless hours of grief in trying to figure out why commands are failing…


That may be because there are many ways to create surfaces with overlapping control points that are totally valid objects. Like spheres, domes, basically any revolved surface where the end point of the outline meets the axis of revolution.

Extrude to point already tells you in the name, it will collapse one edge to a single point location…

You might even want to pinch several points to one location to create a sharp crease in an edge.

…so how would you want to tell, a bunch of overlapping control point constitutes a bad object?


A single row of control points “collapsed” to a pole or singularity isn’t what jim’s talking about. “Stacked” control points in a surface is where one row of control points is so close to the next (generally orders of magnitude less than file tolerance) that the two rows can be considered the same. If you ExtractPt the dome surface and then do a SelDup, you will see the bottom row of points select.

You can also have stacked control points with curves, and if they are use to generate surfaces, those will also have stacked points.



The problem with Rhino as a solid modeler (which it partialy is to a certain limits) is that Rhino does not correctly deal with planar surfaces boolean operations, cuts, extrudes, etc.

In a solid modeler you can easily round and fillet any intersection curves when two objects boolean each other. It is defiinately in the hands of the programmers to make the mathematical approach to this.

Degenerate points are not always incorrect to have even with later applied offset, shell or thicken operations. They could be valid whit a symmetry objects (mirror) then joined → offset. A sphere, a cone also could have degenerate points and those are valid objects I suppose.

One of the big examples is the so called corner ball round — when three (or more) edges meet to a point and those edges need to be rounded. Let’s say to round a vertex point of a cube (box). A very special case is where the round needs to be with a radius equal to the height (wodth) of the sides. :slight_smile:

A very challenging task in Rhino that almost always explodes the result into uncontrolable surfaces. Here I made a simple video showing that rounding all to 6 mm isnt working. But when you round the corner first horizontally with 6 mm radius (the vertical edge I mean) and then the resulting top edges with 5.99 mm raduis it is working (almost acceptably) fine.
In short: you result in a three sided degenerate almost 1/4 dome shape “round” surface at the corner.

corner edge fillet


Users should be warned about objects that are more than likely to cause commands to fail. If you want to ignore a warning you are free to do so. One should not have to waste hours trying to figure out why something doesn’t work when it would be a simple matter to inform the user that trouble lies ahead before they waste a single minute going into a dead end road.

Edges that are collapsed down to a point are already treated as exceptions . There is no problem distinguishing between constructs that are well known to cause commands to fail and those that are not.


i agree it should be able to do that but your video just made me realize some of the problem scenarios seem to have been fixed recently (maybe not super recent but i’m on mac so generally a month or so behind on the service releases)… if i remember correctly, in the past, you couldn’t fillet a single side of a 6mm box with a 6mm filletEdge… likewise, you couldn’t do one edge at 3mm then the opposite edge at 3mm (forming a half-circle)…
both of those scenarios now work for me so it appears some of these things are being worked on. ?

i guess in the situation of the OP file, the user is warned that something is wrong but too bad the warning doesn’t include a reason (though i can see how challenging it would be to make a warning system which explains all possible problems with a failed fillet)… that being-- when trying to filletEdge on the file, you get the red previews which are oriented in the wrong direction.


There was no warning given… Traffic engineers display the “Dead End” warning sign at
the start of the road for a reason. When you reach the dead end that isn’t a warning.

This has nothing to do with fillets. The failure could have been a boolean, make2d, intersection, volume calculation,or shelling just to name a few other commands that are much more likely to fail with objects built with stacked control points. And even if you succeed in making something in Rhino when you export to other CAD or CAM programs you are likely to havexported trouble.

That surface never would have been created in the first place if the OP had been warned that the profile curve was a bad object with stacked control points.


some of those will result in a single point… (draw a plane, turn points on, move a point on top of another, – there’s now only 3 points for the surface)… it doesn’t always work out like that with curves where it is possible to have two points in the same location.

fwiw, i’m not saying anything or anybody is right or wrong… just talking is all…

-weird in that you can’t ExtrudeCrv the OP’s profile curve and you get "One input was not extruded because it would have made an invalid surface."
…but it will let you revolve the curve into a surface.
seems a bit inconsistent.


Hi, Jeff
Well so there are pretty good news. I am here with SR7 of Rhino 5 x64 so maybe you are right and the recent SR8 update has fixed some of the scenarios.

Most important for me is:
does boolean work properly with coplanar surfaces of solid objects?
does it really rounds an edge corner with the same vaule in all directions (does it work properly with different radii)?

Can you show us an example?


well, your video is showing the fixes i’m talking about so apparently, they were also fixed in sr7… being on mac, i can’t go back to older versions (since they expire) and check if my memory serves correct…

someone with rhino4 or an early release of rhino5 would have to go back and test this to see if my memory is just screwy… (if you have rhino 4, try to fillet the edge of a block using the same radius as the block is thick. -or- filletEdge using a radius of 1/2 the thickness on both sides… that used to fail- i think :wink: )


Oh, but if you look closely I did just the vertical edge round (horizontal rounding) to be 6 mm (equals the edge height).
Then all the top edges I made them to round with 5.99 mm value, because if I make them exactly 6 (which is the correct and intended value) the operation fails badly. Try and see for yourself.
In fact the round works with up to 5.99999 mm value (that’s odd enough) but will fail with six 9s after the decimal point!
Bu if you do check then the model for 'NakedEdges" there are 4 of them! Within 5.999 there are no naked edges. With 5.9999 mm there! Very fun things going on there!

The operation also fails if you make all the three edges rounded (in one go, selection) to the same value (in this case 6 mm).


oh, i see the error you’re showing and agree it needs to be fixed… what i’m saying is that some of the problems i used to experience appear to be fixed now…

in the not-too-distant past, i couldn’t do this without error:

if someone has an older version of rhino, i’m pretty sure they could show an example of what used to happen in these situations… iirc, the result of trying a 10.00 FilletEdge here would look something like this:


ugh-- actually, i might of spoke too soon… i’m still getting that error in this file:

filletedgefail.3dm (57.2 KB)

it’s 7mm thick— try to filletEdge one edge of it with a 7mm radius and you’ll see the error.

(though, on that file, i can do two edges at 3.5mm to form at half-circle… previously, this would have failed as well… so maybe the devs are trying to fix these errors but there’s still some iffyness in there)


Well you have a polysurface here (your file) not exactly a solid so you have to use the Surface tools instead
For solid (exrtusion) bodies the fillet (from Solid Tools) is working fine here!

  1. Make a fillet between the top and vertical surfaces. Even with the opitons Extend=Yes and Trim=Yes it will not trim properly because of the tangent situation (radius of fillet = the height). It will Trim just the fillet surface as a suppose.

  2. You have to trim the rest chunks manualy with Trim command:
    select the fillet surface as a Trim tool and select the unwanted corner (outwards)

  3. Join the resulting surfaces → one polysurface

(so time consuming…)

· Rhino should have do this at an instance… really!
filletedgefail-done.3dm (186.8 KB)


isn’t a rhino solid just a closed polysurface? extruding a rectangle then capping it gives the same thing as using the _Box command, right?

(i found a very weird (to me) behavior just now relating to this… i’ll upload a video a little later which shows it)