Open CASCADE, the 3D modelling kernel
3D modeling & numerical simulation

Search the Forums
See All Topics
Open CASCADEShowroomGet it!Developer CornerSupport and ProductsAbout us
Technical overview
Areas of use
Shape factory
Shape gallery
What's new
System requirements
Download Center
Public license
Getting started
Open Source community
Training and e-learning
A-la Carte Support
Value-added software
Complementary Components
Customer Corner
Company Profile
Marketing Materials
Contact Us
Home / Developer Corner / Forums / Usage issues / Infinite loop on cut operation

Infinite loop on cut operation

Infinite loop on cut operation
Paul Jimenez 2009/04/07 15:02
I am using BRepAlgoAPI_Cut to cut a Compound of Faces with another Compound of Faces. The process occurs interactively. I was forcing the application to perform the algorithm over and over again with different faces that constantly changed. After a few seconds of doing this the application stopped responding. Fortunately, it was running in the debugger, so I was able to find the place it got stuck in.

The function where it occurs is IntTools_FClass2d::Init. The loop begins at line 188 in my copy of inttools_fclass2d.cxx. It is as follows:

     do {
      gp_Pnt P3db=C3d.Value(u);
      if(P3da.SquareDistance(P3db)) {

Local variables:

plbid: 6451.7439502819680
u: 6451.7439502819643
du: 3.6379788070917132e-013

"u+=du" is not updating "u"s value because du is too small. plbid and u are the same up to the 11th decimal, which should be enough to exit the loop. In other words, a precision problem is causing this infinite loop.

Just in case, here is the call stack:

>     TKBO.dll!IntTools_FClass2d::Init(const TopoDS_Face & aFace={...}, const double TolUV=9.9999999999999995e-008) Line 194     C++
     TKBO.dll!IntTools_FClass2d::IntTools_FClass2d(const TopoDS_Face & aFace={...}, const double TolUV=9.9999999999999995e-008) Line 55     C++
     TKBO.dll!IntTools_Context::FClass2d(const TopoDS_Face & aF={...}) Line 54 + 0x2f bytes     C++
     TKBO.dll!IntTools_Context::StatePointFace(const TopoDS_Face & aF={...}, const gp_Pnt2d & aP2d={...}) Line 385 + 0xc bytes     C++
     TKBO.dll!IntTools_Context::IsPointInFace(const TopoDS_Face & aF={...}, const gp_Pnt2d & aP2d={...}) Line 397 + 0x10 bytes     C++
     TKBO.dll!CheckSameDomainFaceInside(const TopoDS_Face & theFace1={...}, const TopoDS_Face & theFace2={...}) Line 1325 + 0x16 bytes     C++
     TKBO.dll!BOP_ShellSolid::DetectSDFaces() Line 510 + 0x10 bytes     C++
     TKBO.dll!BOP_ShellSolid::Prepare() Line 612     C++
     TKBO.dll!BOP_ShellShell::DoWithFiller(const BOPTools_DSFiller & aDSFiller={...}) Line 100     C++
     TKBO.dll!BRepAlgoAPI_BooleanOperation::Build() Line 381     C++
     TKBO.dll!BRepAlgoAPI_Cut::BRepAlgoAPI_Cut(const TopoDS_Shape & S1={...}, const TopoDS_Shape & S2={...}) Line 23     C++
Paul Jimenez 2009/04/07 15:22
Proposed patch:

File: inttools_fclass2d.cxx
Line: 183
From: du=(plbid-pfbid)*0.1;
To: du=(plbid-pfbid+BRep_Tool::Tolerance(edge))*0.1;

I am not sure if that's the best tolerance value to use there, but at least it will guarantee a decent du.

Steve Lockley 2012/07/31 14:56
Has anyone from OCC looked at this and confirmed it is a valid patch or not?
I had the same problem as described, applied the patch and it worked, but like Paul I don't know if the numbers that are added are doing damage somewhere else. Could the moderator please confirm if this is a valid patch please
Pawel 2012/07/31 16:08
Hi Steve,

the source code looks the same as before so I think the problem was not registered.

If you have sample data to illustrate the case maybe you can report it using Mantis. Currently, there is an issue - 0021762: Integration new Boolean Operation algorithm to OCC - concerning Boolean operations so there might be a chance that they will have a look at it.

Latest news
  • Open CASCADE Technology 6.7.0 is available for download!
  • Open CASCADE Technology 6.6.0 is available for download!
  • Open CASCADE Technology 6.5.5 is available for download!

  • © OPEN CASCADE 2000 - 2014  |  Search  |  Contacts   |  Site map