From 90f0fdad2a0e9baa0e3aa3e65c2d3afd61230800 Mon Sep 17 00:00:00 2001 From: aml Date: Thu, 2 Nov 2017 12:08:18 +0300 Subject: [PATCH] 0025104: Prism from BSpline curve can not be chamfered Protection from zero-length vectors has been added. --- src/IntCurveSurface/IntCurveSurface_Inter.gxx | 3 ++- src/IntTools/IntTools_EdgeEdge.cxx | 21 ++++++++++++------- tests/bugs/modalg_7/bug25104 | 2 -- tests/bugs/moddata_3/bug25693_1 | 2 -- tests/bugs/moddata_3/bug25693_2 | 2 -- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/IntCurveSurface/IntCurveSurface_Inter.gxx b/src/IntCurveSurface/IntCurveSurface_Inter.gxx index 786473581b..d83d57cf4d 100644 --- a/src/IntCurveSurface/IntCurveSurface_Inter.gxx +++ b/src/IntCurveSurface/IntCurveSurface_Inter.gxx @@ -1436,7 +1436,8 @@ void IntCurveSurface_ComputeTransitions(const TheCurve& curve, NSurf = D1U.Crossed(D1V); TheCurveTool::D1(curve,w,Psurf,D1U); Standard_Real Norm = NSurf.Magnitude(); - if(Norm>TOLERANCE_ANGULAIRE) { + if(Norm>TOLERANCE_ANGULAIRE && + D1U.SquareMagnitude() > TOLERANCE_ANGULAIRE) { D1U.Normalize(); CosDir = NSurf.Dot(D1U); CosDir/=Norm; diff --git a/src/IntTools/IntTools_EdgeEdge.cxx b/src/IntTools/IntTools_EdgeEdge.cxx index 88379192eb..15e27e5a30 100644 --- a/src/IntTools/IntTools_EdgeEdge.cxx +++ b/src/IntTools/IntTools_EdgeEdge.cxx @@ -996,15 +996,22 @@ Standard_Boolean IntTools_EdgeEdge::IsIntersection(const Standard_Real aT11, } // Standard_Real anAngleCriteria; - Standard_Real anAngle1, anAngle2; + Standard_Real anAngle1 = 0.0, + anAngle2 = 0.0; // anAngleCriteria = 5.e-3; - if (bSmall_11_21 && bSmall_12_22) { - anAngle1 = aV11.Angle(aV21); - anAngle2 = aV12.Angle(aV22); - } else { - anAngle1 = aV11.Angle(aV22); - anAngle2 = aV12.Angle(aV21); + if (aV11.SquareMagnitude() > Precision::SquareConfusion() && + aV12.SquareMagnitude() > Precision::SquareConfusion() && + aV21.SquareMagnitude() > Precision::SquareConfusion() && + aV22.SquareMagnitude() > Precision::SquareConfusion() ) + { + if (bSmall_11_21 && bSmall_12_22) { + anAngle1 = aV11.Angle(aV21); + anAngle2 = aV12.Angle(aV22); + } else { + anAngle1 = aV11.Angle(aV22); + anAngle2 = aV12.Angle(aV21); + } } // if (((anAngle1 < anAngleCriteria) || ((M_PI - anAngle1) < anAngleCriteria)) || diff --git a/tests/bugs/modalg_7/bug25104 b/tests/bugs/modalg_7/bug25104 index b14321bb92..182e6b98fb 100644 --- a/tests/bugs/modalg_7/bug25104 +++ b/tests/bugs/modalg_7/bug25104 @@ -1,5 +1,3 @@ -puts "TODO OCC25104 Windows: ERROR: OCC25104 is reproduced." - puts "========" puts "OCC25104" puts "========" diff --git a/tests/bugs/moddata_3/bug25693_1 b/tests/bugs/moddata_3/bug25693_1 index 86d1aebbbd..bb5f1e5b9e 100755 --- a/tests/bugs/moddata_3/bug25693_1 +++ b/tests/bugs/moddata_3/bug25693_1 @@ -1,5 +1,3 @@ -puts "TODO OCC25693 Windows: Wire of BSplines fails bopcheck" - puts "============" puts "OCC25693" puts "============" diff --git a/tests/bugs/moddata_3/bug25693_2 b/tests/bugs/moddata_3/bug25693_2 index cfc7a0e056..e0db6ea811 100755 --- a/tests/bugs/moddata_3/bug25693_2 +++ b/tests/bugs/moddata_3/bug25693_2 @@ -1,5 +1,3 @@ -puts "TODO OCC25693 Windows: Wire of BSplines fails bopcheck" - puts "============" puts "OCC25693" puts "============"