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:
@@ -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) {
|
||||
|
@@ -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;
|
||||
|
@@ -120,7 +120,7 @@ protected:
|
||||
//! and surfaces is computed.
|
||||
Standard_EXPORT void ComputeTolReached3d();
|
||||
|
||||
private:
|
||||
protected:
|
||||
|
||||
Standard_Boolean myIsDone;
|
||||
IntPatch_Intersection myIntersector;
|
||||
|
Reference in New Issue
Block a user