mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0024646: Wrong result done by Boolean Operation algorithm
1. class BOPAlgo_PaveFiller method void BOPAlgo_PaveFiller::PerformEF() Do not create intersection vertices in case if it lies ON the boundary of the face. 2. class IntTools_Context New method Standard_Boolean IntTools_Context::IsPointInFace (const gp_Pnt& aP, const TopoDS_Face& aF, const Standard_Real aTol) has been implemented to check if the point IN the face. 3. class IntTools_EdgeFace method void IntTools_EdgeEdge::FindBestSolution(const Standard_Real aT11, const Standard_Real aT12, const Standard_Real aT21, const Standard_Real aT22, Standard_Real& aT1, Standard_Real& aT2) Treatment of the touching cases. Test cases for issue CR24646 Correction of test cases for issue CR24646
This commit is contained in:
@@ -332,13 +332,14 @@ void BOPAlgo_PaveFiller::PerformEF()
|
||||
}
|
||||
//
|
||||
const gp_Pnt& aPnew = BRep_Tool::Pnt(aVnew);
|
||||
if (!myContext->IsValidPointForFace(aPnew,
|
||||
aF,
|
||||
aTolE+aTolF)) {
|
||||
Standard_Real aTolV = BRep_Tool::Tolerance(aVnew);
|
||||
aTolV = Max(aTolV, Max(aTolE, aTolF));
|
||||
//
|
||||
if (!myContext->IsPointInFace(aPnew, aF, aTolV)) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
aBB.UpdateVertex(aVnew, aTolE);
|
||||
aBB.UpdateVertex(aVnew, aTolV);
|
||||
//
|
||||
aMIEFC.Add(nF);
|
||||
// 1
|
||||
|
Reference in New Issue
Block a user