BOP Cut fails depending on edge tolerance

I'm using OCCT 7.2.0.

I'm trying to make "complement" face from original face on the base surface in my project.

In here, the "complement" means to cut out the original face area from the base surface, like a cookie-cutter.

To do that, I'm using BOP Cut operation, but it makes sometimes unexpected result.

I investigate the face data in failure case, then I found that relaxing one edge tolerance in the base surface makes Cut result fine.

 

# Draw commands that makes unexpected result
restore 194_Fo011.brep Fo
restore 194_Hs009.brep Hs
bop Hs Fo; bopcut r
vdisplay r; vfit
vsetdispmode 1

# Draw commands that makes well result
restore 194_Fo011.brep Fo
restore 194_Hs009+RelaxEdge2Tol.brep Hs
bop Hs Fo; bopcut r
vdisplay r; vfit
vsetdispmode 1

But, I'm still not sure why the tolerance enlargement makes Cut result change.

So I have two questions:

  1. Why the Cut operation with original data makes unexpected result? (Fo and Hs are on same surface, then the cut should success.)
  2. If the edge tolerance enlargement is the only way, how to calculate the tolerance value? (I already tried to it with GeomLib_CheckCurveOnSurface and BRepExtrema_DistShapeShape, but couldn't...)

Thanks in advance.

Kenji Hara's picture

I'd provide one more case data for the issue (Cut fails, edge tolerance enlargement improves result).

Kenji Hara's picture

Does someone have any hints?
OpenCASCADE functionality is vast and finding expecting utility is hard...

Kenji Hara's picture

I learned use of Draw Test Harness, then I reported the issues to bug tracker.

https://tracker.dev.opencascade.org/view.php?id=31343

https://tracker.dev.opencascade.org/view.php?id=31344