1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00

0029843: Modeling Algorithms - Boolean FUSE produces incorrect result

When splitting the shell/face with internal faces/edges use the 'internal' criteria of the face to choose the way to create loops.

Side effect changes:
- When performing Boolean operation - move the objects located far from Origin to the Origin to increase the accuracy of intersections.
This commit is contained in:
emv
2019-09-20 08:56:21 +03:00
committed by apn
parent d7992a77f6
commit c08fd12706
17 changed files with 449 additions and 44 deletions

View File

@@ -682,10 +682,14 @@ void IntTools_EdgeEdge::MergeSolutions(const IntTools_SequenceOfRanges& theRange
aRj2.Range(aTj21, aTj22);
//
bCond = (fabs(aTi12 - aTj11) < dTR1) ||
(aTj11 > aTi11 && aTj11 < aTi12) ||
(aTi11 > aTj11 && aTi11 < aTj12) ||
(bSplit2 && (fabs(aTj12 - aTi11) < dTR1));
if (bCond && bSplit2) {
bCond = (fabs((Max(aTi22, aTj22) - Min(aTi21, aTj21)) -
((aTi22 - aTi21) + (aTj22 - aTj21))) < dTR2);
((aTi22 - aTi21) + (aTj22 - aTj21))) < dTR2) ||
(aTj21 > aTi21 && aTj21 < aTi22) ||
(aTi21 > aTj21 && aTi21 < aTj22);
}
//
if (bCond) {

View File

@@ -196,7 +196,7 @@ protected: //! @name Protected methods performing the intersection
//! Checks if the edge is in the face really.
Standard_EXPORT Standard_Boolean IsCoincident();
private:
protected:
TopoDS_Edge myEdge;
TopoDS_Face myFace;

View File

@@ -120,7 +120,7 @@ protected:
//! and surfaces is computed.
Standard_EXPORT void ComputeTolReached3d();
private:
protected:
Standard_Boolean myIsDone;
IntPatch_Intersection myIntersector;