More efficient way to use BRepFilletAPI_MakeFillet


I try to use BRepFilletAPI_MakeFillet to achieve smooth transitions between solids.
A simple example to imagine this would be two cylinders with the axis of one rotated 90° to the axis of the other and they are stuck into each other (see attached image).
So far, I've been fusing the solids to do this using BRepAlgoAPI_Fuse and then applying the fillet to the section edges of the fuse object.
There are two major drawbacks for me from this approach:
1. Since my actual use case involves multiple fuse operations that need to be done, I use BOPAlgo_CellsBuilder for this. BOPAlgo_CellsBuilder does not provide the section edges of the operation, so I have to iterate over all edges of the result shape, but I don't know exactly which of them are the section edges (and I haven't thought of a suitable criterion to derive them yet). Perhaps the edges of the individual bodies before the boolean operation could be subtracted from the resulting edges.
2. The boolean operation takes over 45 minutes and that is actually way too long for me.

My question now is if there is any other way to create the smooth transitions between the solids without a preceding boolean operation. I thought about making a compound and adding the edges that I want to be used for the fillets to that compound. So far, BRepFilletAPI_MakeFillet did not accept such a compound, but needed always a fused body. Any help would be appreciated.

Many greetings

Eugeny's picture

Hello Dominik,

As you already figured out, the bodies had to be fused before the fillet.

As for your drawbacks:
1. You can get section edges using the history mechanism of Boolean operations - these edges would be generated from faces. So, you need to iterate over initial faces and collect all Generated edges for them.
2. Could you specify what exactly takes 45 minutes in your case? Is it possible to provide the bodies and the code snippet on how you fuse them?

Best regards,

Dominik Schopper's picture

Hello Eugeny,

thank you very much for your reply.
To 1. : I will have a look at the procedure for reading the edges from the history, but it sounds good in any case.
To 2. : Basically it is about the construction of a frame in a fuselage. The frame should follow the outer contour of the fuselage. Therefore the fuselage is cut with a plane and a wire is derived. Next this wire is filled and extruded. Extruding (BRepOffset_MakeOffset class is used here) alone takes about 10 minutes on my Dell Precision 7550. The creation of the other parts of the frame is mostly done by sweeping (using BRepOffsetAPI_MakePipeShell class here) which takes another 12 minutes. At the end I have to fuse all parts together (BOPAlgo_CellsBuilder class is used here) to create said transitions with the fillet (BRepFilletAPI_MakeFillet class is used here). This is the most time-consuming process taking ~45 minutes.
Unfortunately, the complete geometry is our partner's IP, which I can't share here.

Best regards