BRepAlgoAPI_Cut problem with coplanar faces

I am trying to cut a hole in a fairly simple solid and getting the failure of BOPTools_PaveFiller=> error: can not find SplitIndex.

The problem seems to be that one of the faces of the hole completely overlays (co-planar) a face in the solid.
If I move this face to be completely inside or completely outside the solid, the cut operations performs OK.
Viewed in other software packages, the result of the cut operation is as if the face was completely outside the solid, i.e. like a nibble.

Unfortunately, I am not the creator of the data about the solid and hole, it comes from a STEP like file.

So does anyone know if this is correct behavour for OCC, or if there is a way to force BRepAlgoAPI_Cut to treat the face as if it is completely outside the solid?

Steve Lockley's picture

On further inspection it is not the co-planar nature of the faces that is causing the problem, it is a solid that is badly formed that confuses BOPTools.
Sorry please ignore this thread I need to fix the solid before it is cut

P G's picture

How to catch this exception/error thrown by the source code. It is not being caught by the usual procedure(catching Standard_Failure).
try this in test harness,
circle c 0 0 0 25
ellipse e 0 0 0 25 10
mkedge c c
mkedge e e
wire w1 c
wire w2 e
mkplane f1 w1
mkplane f2 w2
# trying to cut the smaller face with the larger face
bop f1 f2
BOPTools_PaveFiller::DoSDEdges()=> can not find SplitIndex

Is it a bug ?

sergey zaritchny's picture

Hi,
I would like to inform you that the posted problem with exception is checked and reproduced.
The corresponding issue with ID = OCC22027 has been registered.
Later you can know if the issue is resolved by checking references to the specified ID in OCCT Release Notes. The analysis of the issue will take some time depending on our technical capability and availability of resources.
If you can't wait and the problem is urgent for you, you may contact us via Contact Form http://www.opencascade.org/about/contacts/.
We will try to find a solution acceptable for you.

At the moment you may catch BOPTColStd_Failure
(the mentioned method raises BOPTColStd_Failure).
Regards
Sergey

P G's picture

Unable to catch the BOPTColStd_Failure, could you share a template
of the code to use it.
thanks in advance
-PG

sergey zaritchny's picture

Hi,
try {
...
}

catch (BOPTColStd_Failure& e) {
cout << e.Message() << endl << flush;
}
Regards
Sergey

P G's picture

Thanks , list of header files to be included ( any specific order is
required)

P G's picture

Tried catching, but it crashes at the boolean API call itself.