mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0024968: Impove BRepMesh_Classifier to cope with intersection of huge number of wires
BRepMesh_Classifier: Two-pass approach for intersection check with possibility to run it in parallel mode. First pass - bounding boxes of segments are checked for overlapping; Second pass - intersection point is calculated in case if overlapping is detected. Make NCollection_UBTree::ChangeLastNode() exported due to compilation error on Linux platform. Reason: method does not depend on template parameters, so it should be available. Revert previous change and try to use another trick for Linux Fix compilation warning on MacOS: remove redundant constant Fix regressions: do not consider insignificant loops in case of self intersections on the same wire. More sugar solution for compilation errors on NCollection_EBTree on Linux Test cases for issue CR24968
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include <BRepMesh_MapOfIntegerInteger.hxx>
|
||||
#include <BRepMesh_DataStructureOfDelaun.hxx>
|
||||
#include <NCollection_Sequence.hxx>
|
||||
#include <BRepMesh_WireInterferenceChecker.hxx>
|
||||
|
||||
class Bnd_B2d;
|
||||
class Bnd_Box2d;
|
||||
@@ -119,16 +120,6 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
enum IntFlag
|
||||
{
|
||||
NoIntersection,
|
||||
Cross,
|
||||
EndPointTouch,
|
||||
PointOnEdge,
|
||||
Glued,
|
||||
Same
|
||||
};
|
||||
|
||||
enum ReplaceFlag
|
||||
{
|
||||
Replace,
|
||||
@@ -305,21 +296,13 @@ private:
|
||||
Standard_Real theSqModulus[3],
|
||||
Standard_Integer& theEdgeOn) const;
|
||||
|
||||
//! Classifies the point in case of coincidence of two vectors.
|
||||
//! @param thePoint1 the start point of a segment (base point)
|
||||
//! @param thePoint2 the end point of a segment
|
||||
//! @param thePointToCheck the point to classify
|
||||
//! @returns zero value if point is out of segment and non zero value if point is between the first and the second point of segment
|
||||
Standard_Integer classifyPoint (const gp_XY& thePoint1,
|
||||
const gp_XY& thePoint2,
|
||||
const gp_XY& thePointToCheck) const;
|
||||
|
||||
//! Checks intersection between the two segments.
|
||||
IntFlag intSegSeg (const BRepMesh_Edge& theEdge1,
|
||||
const BRepMesh_Edge& theEdge2,
|
||||
const Standard_Boolean isConsiderEndPointTouch,
|
||||
const Standard_Boolean isConsiderPointOnEdge,
|
||||
gp_Pnt2d& theIntPnt) const;
|
||||
BRepMesh_WireInterferenceChecker::IntFlag intSegSeg (
|
||||
const BRepMesh_Edge& theEdge1,
|
||||
const BRepMesh_Edge& theEdge2,
|
||||
const Standard_Boolean isConsiderEndPointTouch,
|
||||
const Standard_Boolean isConsiderPointOnEdge,
|
||||
gp_Pnt2d& theIntPnt) const;
|
||||
|
||||
//! Returns area of the loop of the given polygon defined by indices of its start and end links.
|
||||
Standard_Real polyArea (const TColStd_SequenceOfInteger& thePolygon,
|
||||
|
Reference in New Issue
Block a user