Skip to content

WIP add functions for creating chamfers and fillets to the NURBS kernel#1501

Draft
phkahler wants to merge 3 commits intosolvespace:masterfrom
phkahler:fillet
Draft

WIP add functions for creating chamfers and fillets to the NURBS kernel#1501
phkahler wants to merge 3 commits intosolvespace:masterfrom
phkahler:fillet

Conversation

@phkahler
Copy link
Member

Just an outline at this point (in the code). Hoping to attempt this over the hollidays. Thought people might want to follow along or comment if this goes anywhere.

…ting chamfers and fillets. The function is hooked in Group::Generate but does not modify the shell at this point so it is benign.
@ruevs
Copy link
Member

ruevs commented Dec 10, 2024

@phkahler great to see you attempting this. Over the years I've been considering this - most recently at the time Dune3D started.

In my head it works similarly to what you started outlining with one more level of abstraction:

A chamfer/fillet is:

  • An edge modifier class/module/cpp_file goes over the selected edges and duplicates them (in reality each visible edge is already two coincident edges so the code could "just" move them) - this is specific to the fillet/chamfer tool.
  • A general purpose patch tool (with conditions as parameters - e.g. G1 continuity), which is a separate class, generates NURBS patches to close the holes between the edges created in the previous step.

In the future the patch class can be used to implement generic patch functionality - e.g. close a "random" hole outlined by a contour of any edges (not necessarily straight) in 3d.

A general purpose patch tool may/will have to generate new edges on it's own (imagine a corner where a few edges meet and they are all filleted) and I am not sure how this will be handled by this approach. Intersections of the newly created NURBS surfaces will be these new edges.

@phkahler
Copy link
Member Author

  • in reality each visible edge is already two coincident edges so the code could "just" move them

Woops you're right. Curves are not duplicated, but there are two TrimBy, one for each surface that meets along a curve. These reference the same underlying curve but one is "backward". So I'll still need to generate 2 new curves, and move both Trims rather than creating a new one. Good news - the PWL points are not in the trims!

Assuming all fillets meeting at a point are the same radius, the surface we want there is spherical. It's really hard to find anything (with google) on spherical NURBS patches, never mind triangular ones. But that's for later. Chamfers first and Fillets with 1 or 2 per vertex. I'm both excited and dreading this...

@ruevs
Copy link
Member

ruevs commented Dec 11, 2024

I'm both excited and dreading this...

Indeed :-)

@BKLronin
Copy link

I very welcome the attempt to add this. :)

@ruevs ruevs marked this pull request as draft January 24, 2025 13:46
@phkahler
Copy link
Member Author

phkahler commented Aug 21, 2025

Getting back to this soon. Here is a sketch to visualize how fillets meet at a corner. Drag the green lines around.
corner_arcs.zip

For equal radius fillets it forms a spherical triangle.
Edit: This is not the new feature demo, it's a line sketch to aid understanding the geometry of corner fillets.

@dodox1
Copy link

dodox1 commented Dec 28, 2025

So, is anyone feeling brave enough to pick this up during the days off and actually push the development forward?

@phkahler
Copy link
Member Author

Haha @dodox1 brave is right. Anyone is welcome to attempt this, and I'm happy to answer questions on how the internals work. Such a person would become highly knowledgeable in the solvespace NURBS code. Unfortunately my attempt last year didn't pan out and I wasn't even able to make partial shell modifications without problems. It really takes a deep dive into it to make progress. Next time I try I might limit myself to flat surfaces only just to get the basics down.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants