For fillets to work well they have to connect three important features of a parametric CAD package:
1. Surface tangency matching - perfectly matching the tangent of the connecting surface on either side of the corner.
2. Edge tangency following - you select an edge, and the fillet should be able to follow along all connected tangent edges.
3. Edge reference tracking - when you modify the model further up the feature tree the kernel needs to keep track of that edge, even if the surfaces that make it drastically change or are split.
All three are hard problems on their own, once you connect them all it becomes a great indicator of the capabilities and stability of a parametric kernel.
I was subscribed to Shapr3D and had been using their parametric beta before switching to Linux and even in that fillets would mess up what I could do with my models afterwards.
The impression I’ve gotten while learning FreeCAD is that making a CAD ‘just work’ is incredibly difficult and the commercial packages probably have a lot of very messy workarounds and heuristics in place to work like they do.
What a concise, informative answer this is. You write well.
FreeCAD’s (well, OpenCascade’s) issues with fillets and chamfers appear to be most acute with a subset of your third point: sometimes adding one involves the new feature fully consuming another edge. This is unsolved in OCC and it’s why sometimes even infinitesimally changing the depth of the fillet or chamfer is enough to stop an edge being destroyed.
For Solvespace I was looking at using curve offsetting to determine where the fillet touches the surface. This would not produce a "rolling ball" fillet in more complex cases, but should be fine for simpler extrusions. It turns out
generating an offset curve is another somewhat hard problem in itself.
Yep, it would be difficult to maintain a consistent radius with that method.
My assumption (I've not looked) is that you could offset the surfaces from the two sides (say A and B), and then calculate the intersection of an offset of A with the original B. Then do the opposite for the other side. I think that will give you two edges that will produce a consistent radius.
Offsetting surfaced and calculating intersections aren't exactly easy problems to solve on their own. Fillets are hard!
(Solvespace is awesome BTW! If I had the time (or the expertise) it also makes a brilliant foundation for all this)
Interesting. Any chance you could explain why fillets are hard(er)?