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

Search the Forums
See All Topics
 

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)) {
      degenerated=Standard_False;
      break;
      }
      u+=du;
     }
     while(u<plbid);

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.

OCCPATCH
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.

Pawel
 
 
Latest news
  • Open CASCADE Technology 6.8.0 is available for download!
  • New features to enhance the development process
  • Open CASCADE Technology 6.7.1 is available for download!

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