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

0028491: Incomplete section curve

The main idea of the fix is to forbid check if intersection curve lies in the some face (with input tolerance) if we have 2D-intersection curve on this face (we consider that necessary tolerance has been computed in intersection algorithm honestly). If we do not have 2D-curve on this face then we need check as before.

New algorithm is implemented in IntTools_Context::IsValidBlockForFaces(...) method.

------
src\Extrema\Extrema_GenExtPS.cxx
No principled changes have been made.
This commit is contained in:
nbv
2017-02-28 10:45:51 +03:00
committed by bugmaster
parent 9ed6494b47
commit 370101f340
4 changed files with 106 additions and 39 deletions

View File

@@ -896,17 +896,31 @@ void Extrema_GenExtPS::Perform(const gp_Pnt& P)
{
Standard_Real Dist;
for (NoU = 1; NoU <= myusample; NoU++) {
for (NoV = 1; NoV <= myvsample; NoV++) {
Dist = myPoints->Value(NoU, NoV).GetSqrDistance();
if ((myPoints->Value(NoU-1,NoV-1).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU-1,NoV ).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU-1,NoV+1).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU ,NoV-1).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU ,NoV+1).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU+1,NoV-1).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU+1,NoV ).GetSqrDistance() <= Dist) &&
(myPoints->Value(NoU+1,NoV+1).GetSqrDistance() <= Dist)) {
for (NoU = 1; NoU <= myusample; NoU++)
{
for (NoV = 1; NoV <= myvsample; NoV++)
{
const Extrema_POnSurfParams &aParamMain = myPoints->Value(NoU, NoV);
const Extrema_POnSurfParams &aParam1 = myPoints->Value(NoU - 1, NoV - 1);
const Extrema_POnSurfParams &aParam2 = myPoints->Value(NoU - 1, NoV);
const Extrema_POnSurfParams &aParam3 = myPoints->Value(NoU - 1, NoV + 1);
const Extrema_POnSurfParams &aParam4 = myPoints->Value(NoU, NoV - 1);
const Extrema_POnSurfParams &aParam5 = myPoints->Value(NoU, NoV + 1);
const Extrema_POnSurfParams &aParam6 = myPoints->Value(NoU + 1, NoV - 1);
const Extrema_POnSurfParams &aParam7 = myPoints->Value(NoU + 1, NoV);
const Extrema_POnSurfParams &aParam8 = myPoints->Value(NoU + 1, NoV + 1);
Dist = aParamMain.GetSqrDistance();
if ((aParam1.GetSqrDistance() <= Dist) &&
(aParam2.GetSqrDistance() <= Dist) &&
(aParam3.GetSqrDistance() <= Dist) &&
(aParam4.GetSqrDistance() <= Dist) &&
(aParam5.GetSqrDistance() <= Dist) &&
(aParam6.GetSqrDistance() <= Dist) &&
(aParam7.GetSqrDistance() <= Dist) &&
(aParam8.GetSqrDistance() <= Dist))
{
// Find maximum.
FindSolution(P, myPoints->Value(NoU, NoV));
}