0026008: Wrong intersection 2D-curves obtained for pair of faces.
authornbv <nbv@opencascade.com>
Fri, 3 Apr 2015 07:16:47 +0000 (10:16 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 9 Apr 2015 13:12:05 +0000 (16:12 +0300)
The workaround has been deleted from ProjLib_ComputeApprox.cxx file.

Test case for issue CR26008

src/ProjLib/ProjLib_ComputeApprox.cxx
tests/bugs/modalg_6/bug26008 [new file with mode: 0644]

index c94977c..7b7ef71 100644 (file)
@@ -137,7 +137,7 @@ static gp_Pnt2d Function_Value(const Standard_Real U,
     if(T < V1 || T > V2)
       T = ElCLib::InPeriod(T, V1, V2);
   }
-  
+
   return gp_Pnt2d(S, T);
 }
 //=======================================================================
@@ -516,9 +516,11 @@ static void Function_SetUVBounds(Standard_Real& myU1,
       }
       //
       ElSLib::Parameters(SP, P, UU, V1);
-      Standard_Real UUmi = Min(Min(U1,UU),Min(UU,U2));
-      Standard_Real UUma = Max(Max(U1,UU),Max(UU,U2));
-      Standard_Boolean reCalc = ((UUmi >= 0. && UUmi <= M_PI) && (UUma >= 0. && UUma <= M_PI));
+      //+This fragment was the reason of bug # 26008.
+      //+It has been deleted on April, 03 2015.
+      //Standard_Real UUmi = Min(Min(U1,UU),Min(UU,U2));
+      //Standard_Real UUma = Max(Max(U1,UU),Max(UU,U2));
+      //Standard_Boolean reCalc = ((UUmi >= 0. && UUmi <= M_PI) && (UUma >= 0. && UUma <= M_PI));
       // box+sphere <<
       P2 = myCurve->Value(W1+M_PI/8);
       ElSLib::Parameters(SP,P2,U2,V2);
@@ -585,15 +587,18 @@ static void Function_SetUVBounds(Standard_Real& myU1,
 
       // box+sphere >>
       myV1 = -1.e+100; myV2 = 1.e+100;
-      Standard_Real UU1 = myU1, UU2 = myU2;
-      if((Abs(UU1) <= (2.*M_PI) && Abs(UU2) <= (2.*M_PI)) && NbSolutions == 1 && reCalc) {
-        gp_Pnt Center = Circle.Location();
-        Standard_Real U,V;
-        ElSLib::SphereParameters(gp_Ax3(gp::XOY()),1,Center, U, V);
-        myU1 = U-M_PI;
-        myU1 = Min(UU1,myU1);
-        myU2 = myU1 + 2.*M_PI;
-      }
+      
+      //+This fragment was the reason of bug # 26008.
+      //+It has been deleted on April, 03 2015.
+      //Standard_Real UU1 = myU1, UU2 = myU2;
+      //if((Abs(UU1) <= (2.*M_PI) && Abs(UU2) <= (2.*M_PI)) && NbSolutions == 1 && reCalc) {
+      //  gp_Pnt Center = Circle.Location();
+      //  Standard_Real U,V;
+      //  ElSLib::SphereParameters(gp_Ax3(gp::XOY()),1,Center, U, V);
+      //  myU1 = U-M_PI;
+      //  myU1 = Min(UU1,myU1);
+      //  myU2 = myU1 + 2.*M_PI;
+      //}
       // box+sphere <<
 
     }//if ( myCurve->GetType() == GeomAbs_Circle)
@@ -939,30 +944,30 @@ ProjLib_ComputeApprox::ProjLib_ComputeApprox
     ProjLib_Function F( C, S);
 
 #ifdef OCCT_DEBUG
-    if ( AffichValue) {
-      Standard_Integer Nb = 20;
-      Standard_Real U1, U2, dU, U;
-      U1 = F.FirstParameter();
-      U2 = F.LastParameter();
-      dU = ( U2 - U1) / Nb;
-      TColStd_Array1OfInteger Mults(1,Nb+1);
-      TColStd_Array1OfReal    Knots(1,Nb+1);
-      TColgp_Array1OfPnt2d    Poles(1,Nb+1);
-      for ( Standard_Integer i = 1; i <= Nb+1; i++) {
-             U = U1 + (i-1)*dU;
-             Poles(i) = F.Value(U);
-             Knots(i) = i;
-             Mults(i) = 1;
-      }
-      Mults(1)    = 2;
-      Mults(Nb+1) = 2;
-#ifdef DRAW
-// POP pour NT
-      char* ResultName = "Result";
-      DrawTrSurf::Set(ResultName,new Geom2d_BSplineCurve(Poles,Knots,Mults,1));
-//      DrawTrSurf::Set("Result",new Geom2d_BSplineCurve(Poles,Knots,Mults,1));
-#endif
-    }
+    //if ( AffichValue) {
+    //  Standard_Integer Nb = 20;
+    //  Standard_Real U1, U2, dU, U;
+    //  U1 = F.FirstParameter();
+    //  U2 = F.LastParameter();
+    //  dU = ( U2 - U1) / Nb;
+    //  TColStd_Array1OfInteger Mults(1,Nb+1);
+    //  TColStd_Array1OfReal    Knots(1,Nb+1);
+    //  TColgp_Array1OfPnt2d    Poles(1,Nb+1);
+    //  for ( Standard_Integer i = 1; i <= Nb+1; i++) {
+    //   U = U1 + (i-1)*dU;
+    //   Poles(i) = F.Value(U);
+    //   cout << "i = " << i << ": U = " << U << 
+    //      ", p(" << Poles(i).X() << ", " << Poles(i).Y() << ");" << endl;
+    //   Knots(i) = i;
+    //   Mults(i) = 1;
+    //  }
+    //  Mults(1)    = 2;
+    //  Mults(Nb+1) = 2;
+
+    //2D-curve for showing in DRAW
+    //  Handle(Geom2d_Curve) aCC = new Geom2d_BSplineCurve(Poles,Knots,Mults,1);
+    //  AffichValue = Standard_False;
+    //}
 #endif    
 
 //-----------
diff --git a/tests/bugs/modalg_6/bug26008 b/tests/bugs/modalg_6/bug26008
new file mode 100644 (file)
index 0000000..4c24bf0
--- /dev/null
@@ -0,0 +1,20 @@
+puts "================"
+puts "OCC26008"
+puts "================"
+puts ""
+#######################################################################
+# [OCCT 6.8.0 regression] BRepFeat_SplitShape returns invalid shapes
+#######################################################################
+
+sphere ss1 78.4160443343, 8.94293392454, 70.9553808628 6.5
+sphere ss2 82.5593917073, 4.52613090823, 76.3299967 3.5
+
+mkface f1 ss1
+mkface f2 ss2
+
+bopcurves f1 f2 -2d
+
+view 1 -2D- 465 20 400 400
+2dfit
+
+xwd $imagedir/${test_image}.png