0031260: Geom2dGcc_Circ2d2TanRad fails in this case (720)
authorifv <ifv@opencascade.com>
Thu, 16 Jan 2020 09:07:33 +0000 (12:07 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Jan 2020 15:20:01 +0000 (18:20 +0300)
Adaptor2d/Adaptor2d_OffsetCurve.cxx:
Function nbPoints(...) is modified

Test case added

src/Adaptor2d/Adaptor2d_OffsetCurve.cxx
tests/bugs/modalg_7/bug31260 [new file with mode: 0644]

index f5251eea7fe7a3174e420ca1b79f4272dbc645ea..3f4587603200e26ae348914f1ca5d7ddb0bea5e2 100644 (file)
@@ -656,19 +656,16 @@ static Standard_Integer nbPoints(const Handle(Adaptor2d_HCurve2d)& theCurve)
 
   Standard_Integer nbs = 20;
 
-  if (theCurve->GetType() == GeomAbs_Line)
-    nbs = 2;
-  else if (theCurve->GetType() == GeomAbs_BezierCurve)
+  if (theCurve->GetType() == GeomAbs_BezierCurve)
   {
-    nbs = 3 + theCurve->NbPoles();
+    nbs = Max(nbs, 3 + theCurve->NbPoles());
   }
   else if (theCurve->GetType() == GeomAbs_BSplineCurve) {
-    nbs = theCurve->NbKnots();
-    nbs *= theCurve->Degree();
+    nbs = Max(nbs, theCurve->NbKnots() * theCurve->Degree());
   }
 
-  if (nbs > 200)
-    nbs = 200;
+  if (nbs > 300)
+    nbs = 300;
   return nbs;
 
 }
diff --git a/tests/bugs/modalg_7/bug31260 b/tests/bugs/modalg_7/bug31260
new file mode 100644 (file)
index 0000000..2c71e8d
--- /dev/null
@@ -0,0 +1,27 @@
+puts "========"
+puts "0031260: Geom2dGcc_Circ2d2TanRad fails in this case (720)"
+puts "========"
+puts ""
+
+restore [locate_data_file bug31260.brep] t
+
+mkcurve c t
+plane p 0.0 0.0 12.649999618530273 0.0 0.0 1.0
+to2d c2d c p
+point pnt 11.9850 12.0585
+
+cirtang r -c c2d -p pnt -r 0.5
+
+smallview  -2D-
+
+2dfit
+
+xwd ${imagedir}/${test_image}.png
+
+set NbCurv [llength [directory r_*]]
+
+if { $NbCurv == 2 } {
+  puts "OK: Number of circles is good"
+} else {
+  puts "Error: Not all solutions"
+}