0030722: Modeling Algorithms - BRepExtrema_DistShapeShape computes wrong distances
authorabulyche <abulyche@opencascade.com>
Wed, 1 Sep 2021 14:45:52 +0000 (17:45 +0300)
committersmoskvin <smoskvin@opencascade.com>
Tue, 7 Sep 2021 17:01:40 +0000 (20:01 +0300)
Updated the math_DirectPolynomialRoots.cxx
Added the test case "bug30722"
Updated the command "b2dclassify" in the BOPTest_LowCommands.cxx

src/BOPTest/BOPTest_LowCommands.cxx
src/math/math_DirectPolynomialRoots.cxx
tests/bugs/modalg_7/bug30722 [new file with mode: 0644]

index 4f032f0..c7bdd09 100644 (file)
@@ -68,7 +68,11 @@ static  Standard_Integer bhaspc      (Draw_Interpretor& , Standard_Integer , con
   const char* g = "BOPTest commands";
   theCommands.Add("bclassify"    , "use bclassify Solid Point [Tolerance=1.e-7]",
                   __FILE__, bclassify   , g);
-  theCommands.Add("b2dclassify"  , "use b2dclassify Face Point2d [Tol] ",
+  theCommands.Add("b2dclassify"  , "use b2dclassify Face Point2d [Tol] [UseBox] [GapCheckTol]\n" 
+    "Classify  the Point  Point2d  with  Tolerance <Tol> on the face described by <Face>.\n" 
+    "<UseBox> == 1/0 (default <UseBox> = 0): switch on/off the use Bnd_Box in the classification.\n"
+    "<GapCheckTol> (default <GapCheckTol> = 0.1): this is for additional verification of\n" 
+    "the vertex with a tolerance >= <GapCheckTol>.",
                   __FILE__, b2dclassify , g);
   theCommands.Add("b2dclassifx"  , "use b2dclassifx Face Point2d [Tol] ",
                   __FILE__, b2dclassifx , g);
@@ -77,7 +81,7 @@ static  Standard_Integer bhaspc      (Draw_Interpretor& , Standard_Integer , con
 }
 
 
-//
+//lj cd
 //=======================================================================
 //function : b2dclassifx
 //purpose  : 
@@ -142,10 +146,10 @@ Standard_Integer b2dclassify (Draw_Interpretor& theDI,
   //
   DrawTrSurf::GetPoint2d (theArgVec[2], aP);
   const TopoDS_Face&  aF   = TopoDS::Face(aS);
-  const Standard_Real aTol = (theArgNb == 4) ? 
+  const Standard_Real aTol = (theArgNb >= 4) ? 
     Draw::Atof (theArgVec[3]) : BRep_Tool::Tolerance (aF);
-  const Standard_Boolean anUseBox = (theArgNb == 5 && Draw::Atof(theArgVec[4]) == 0) ?
-    Standard_False : Standard_True;
+  const Standard_Boolean anUseBox = (theArgNb >= 5 && Draw::Atof(theArgVec[4]) == 1) ?
+    Standard_True : Standard_False;
   const Standard_Real aGapCheckTol = (theArgNb == 6) ? Draw::Atof(theArgVec[5]) : 0.1;
   BRepClass_FaceClassifier aClassifier;
   aClassifier.Perform(aF, aP, aTol, anUseBox, aGapCheckTol);
index 50932dc..17ef931 100644 (file)
@@ -263,21 +263,19 @@ void math_DirectPolynomialRoots::Solve(const Standard_Real a,
   Q = Ydemi + SdiscrQ0;
   P1 = Ademi - P0;
   Q1 = Ydemi - SdiscrQ0;
-//  Modified by skv - Wed Apr 14 16:05:24 2004 IDEM(Airbus) Begin
-  Standard_Real eps;
+  //
+  Standard_Real anEps = 100 * EPSILON;
 
-  eps = Epsilon(100.*Max(Ademi, P0));
-  if (Abs(P) <= eps)
+  if (Abs(P) <= anEps)
     P = 0.;
-  if (Abs(P1) <= eps)
+  if (Abs(P1) <= anEps)
     P1 = 0.;
 
-  eps = Epsilon(100.*Max(Ydemi, SdiscrQ0));
-  if (Abs(Q) <= eps)
+  if (Abs(Q) <= anEps)
     Q = 0.;
-  if (Abs(Q1) <= eps)
+  if (Abs(Q1) <= anEps)
     Q1 = 0.;
-//  Modified by skv - Wed Apr 14 16:05:24 2004 IDEM(Airbus) End
+  //
   Ademi = 1.0;
 
   math_DirectPolynomialRoots ASol2(Ademi, P,  Q);
diff --git a/tests/bugs/modalg_7/bug30722 b/tests/bugs/modalg_7/bug30722
new file mode 100644 (file)
index 0000000..f768d5d
--- /dev/null
@@ -0,0 +1,16 @@
+puts "================================================================="
+puts "OCC30722: Modeling Algorithms - BRepExtrema_DistShapeShape computes wrong distances"
+puts "================================================================="
+puts ""
+
+restore [locate_data_file bug30722_1.brep] w
+restore [locate_data_file bug30722_2.brep] e
+
+explode w
+mkcurve c1 w_1
+mkcurve c2 e
+extrema c1 c2
+
+if { [isdraw ext_1] == 0 } {
+puts "Error: no solutions!"
+}
\ No newline at end of file