View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0033785 | Community | OCCT:Modeling Algorithms | public | 2024-07-31 17:26 | 2024-08-01 13:38 |
Reporter | FredK | Assigned To | akaftasev | ||
Priority | normal | Severity | block | ||
Status | new | Resolution | open | ||
Platform | Windows | OS | VC++ 2022 | ||
Product Version | 7.8.0 | ||||
Summary | 0033785: Modeling Algorithms - 'infinite' loop during BOPAlgo_ArgumentAnalyzer | ||||
Description | When 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. | ||||
Tags | No tags attached. | ||||
Test case number | |||||
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 |