View Issue Details

IDProjectCategoryView StatusLast Update
0033785CommunityOCCT:Modeling Algorithmspublic2024-08-01 13:38
ReporterFredK Assigned Toakaftasev  
PrioritynormalSeverityblock 
Status newResolutionopen 
PlatformWindowsOSVC++ 2022 
Product Version7.8.0 
Summary0033785: Modeling Algorithms - 'infinite' loop during BOPAlgo_ArgumentAnalyzer
DescriptionWhen using the BOPAlgo_ArgumentAnalyzer on a specific shape OpenCascade code ends up in an 'infinite' loop because of the self intersection check.

After some investigation we found that IntTools_FaceFace::Perform() takes an unreasonably long amount of time in this situation.
IntTools_FaceFace::Perform() calls IntPatch_Intersection::Perform(), which then in turn calls IntPatch_RstInt::PutVertexOnLine().
During the PutVertexOnLine call the code remains stuck inside Intf_InterferencePolygon2d::Interference().
The nbso variable set in Intf_InterferencePolygon2d::Perform takes on a very large value (250000), which might be the reason this takes so long.

This problem is at least reproducable in OpenCascade v7.6.0 and v7.8.1.
Steps To Reproduce
===========Draw Test Harness script=================
The same problem can easily be reproduced in the draw test harness given the provided .brep files.
Each file represent a face that's used as input for IntTools_FaceFace::Perform().
After putting both faces in a compound and calculating self intersection via bopargcheck, we also observed an 'infinite' loop,
presumably in the same code as described above. Note: The test harness was still stuck in the loop after ±1 hour.
    pload ALL
    cd [directory containing the files we supplied]
    restore aF1.brep
    restore aF2.brep
    compound aF1 aF2 comp
    vdisplay comp
    bopargcheck comp -I
Additional information
and documentation updates
================Solution=========================
The best solution would be achieved by having IntTools_FaceFace::Perform() return a value within a reasonable time,
but if this is not possible we would also be satisfied with extra UserBreak() checks somewhere in this code so it's possible to manually terminate the BOPAlgo_ArgumentAnalyzer.
TagsNo tags attached.
Test case number

Attached Files

  • aF1.brep (912,119 bytes)
  • aF2.brep (472,138 bytes)

Activities

FredK

2024-07-31 17:27

reporter   ~0116344

aF1.brep (912,119 bytes)
aF2.brep (472,138 bytes)

Issue History

Date Modified Username Field Change
2024-07-31 17:26 FredK New Issue
2024-07-31 17:26 FredK Assigned To => akaftasev
2024-07-31 17:27 FredK Note Added: 0116344
2024-07-31 17:27 FredK File Added: aF1.brep
2024-07-31 17:27 FredK File Added: aF2.brep
2024-08-01 13:38 dpasukhi Summary 'infinite' loop during BOPAlgo_ArgumentAnalyzer => Modeling Algorithms - 'infinite' loop during BOPAlgo_ArgumentAnalyzer
2024-08-01 13:38 dpasukhi Steps to Reproduce Updated