0025104: Prism from BSpline curve can not be chamfered
authoraml <aml@opencascade.com>
Thu, 2 Nov 2017 09:08:18 +0000 (12:08 +0300)
committerbugmaster <bugmaster@opencascade.com>
Tue, 14 Nov 2017 12:56:55 +0000 (15:56 +0300)
Protection from zero-length vectors has been added.

src/IntCurveSurface/IntCurveSurface_Inter.gxx
src/IntTools/IntTools_EdgeEdge.cxx
tests/bugs/modalg_7/bug25104
tests/bugs/moddata_3/bug25693_1
tests/bugs/moddata_3/bug25693_2

index 7864735..d83d57c 100644 (file)
@@ -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;
index 8837919..15e27e5 100644 (file)
@@ -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)) ||
index b14321b..182e6b9 100644 (file)
@@ -1,5 +1,3 @@
-puts "TODO OCC25104 Windows: ERROR: OCC25104 is reproduced."
-
 puts "========"
 puts "OCC25104"
 puts "========"
index 86d1aeb..bb5f1e5 100755 (executable)
@@ -1,5 +1,3 @@
-puts "TODO OCC25693 Windows: Wire of BSplines fails bopcheck"
-
 puts "============"
 puts "OCC25693"
 puts "============"
index cfc7a0e..e0db6ea 100755 (executable)
@@ -1,5 +1,3 @@
-puts "TODO OCC25693 Windows: Wire of BSplines fails bopcheck"
-
 puts "============"
 puts "OCC25693"
 puts "============"