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 |