0030647: Geom2dGcc_Circ2d2TanRad not giving all the solutions
authorifv <ifv@opencascade.com>
Mon, 15 Apr 2019 09:47:08 +0000 (12:47 +0300)
committerbugmaster <bugmaster@opencascade.com>
Tue, 16 Apr 2019 11:07:45 +0000 (14:07 +0300)
Method for calculation of correct number of sampling points is added for
Adaptor2d_OffsetCurve.
Now number of sampling points correspond with similar method for
Geom2dAdaptor_Curve for curve type GeomAbs_OffsetCurve
Test case added

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

index 4c4fa9b..16e5dc4 100644 (file)
@@ -458,7 +458,7 @@ GeomAbs_CurveType Adaptor2d_OffsetCurve::GetType() const {
       return GeomAbs_Circle;
       
     default:
-      return GeomAbs_OtherCurve;
+      return GeomAbs_OffsetCurve;
       
     }
   }
@@ -650,3 +650,34 @@ Handle(Geom2d_BSplineCurve) Adaptor2d_OffsetCurve::BSpline() const
                                   "Adaptor2d_OffsetCurve::BSpline() - wrong curve type");
   return myCurve->BSpline();
 }
+
+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)
+  {
+    nbs = 3 + theCurve->NbPoles();
+  }
+  else if (theCurve->GetType() == GeomAbs_BSplineCurve) {
+    nbs = theCurve->NbKnots();
+    nbs *= theCurve->Degree();
+  }
+
+  if (nbs > 200)
+    nbs = 200;
+  return nbs;
+
+}
+//=======================================================================
+//function : NbSamples
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Adaptor2d_OffsetCurve::NbSamples() const
+{
+  return  nbPoints(myCurve);
+}
index b1b1c35..fc379a0 100644 (file)
@@ -174,6 +174,7 @@ public:
   
   Standard_EXPORT Handle(Geom2d_BSplineCurve) BSpline() const Standard_OVERRIDE;
 
+  Standard_EXPORT  Standard_Integer NbSamples() const Standard_OVERRIDE;
 
 
 
diff --git a/tests/bugs/modalg_7/bug30647 b/tests/bugs/modalg_7/bug30647
new file mode 100644 (file)
index 0000000..51f88b4
--- /dev/null
@@ -0,0 +1,30 @@
+puts "========"
+puts "0030647: Geom2dGcc_Circ2d2TanRad not giving all the solutions"
+puts "========"
+puts ""
+
+restore [locate_data_file bug30647_curve1_720.brep] c1
+restore [locate_data_file bug30647_curve2_720.brep] c2
+
+explode c1 e
+mk2dcurve q1 c1_1
+explode c2 e
+mk2dcurve q2 c2_1
+
+cirtang r -c q1 -c q2 -r 0.4
+
+smallview  -2D-
+
+2dclear q1
+2dfit
+display q1
+
+xwd ${imagedir}/${test_image}.png
+
+set NbCurv [llength [directory r_*]]
+
+if { $NbCurv == 8 } {
+  puts "OK: Number of circles is good"
+} else {
+  puts "Error: Not all solutions"
+}