]> OCCT Git - occt-copy.git/commitdiff
0030647: Geom2dGcc_Circ2d2TanRad not giving all the solutions
authorifv <ifv@opencascade.com>
Tue, 16 Apr 2019 07:49:26 +0000 (10:49 +0300)
committerifv <ifv@opencascade.com>
Tue, 16 Apr 2019 07:49:26 +0000 (10:49 +0300)
Correct choice od number of sampling points is added for Adaptor2d_OffsetCurve

src/Adaptor2d/Adaptor2d_OffsetCurve.cxx
src/Adaptor2d/Adaptor2d_OffsetCurve.hxx

index 4c4fa9b8323309d595d626fb0f3441a3137d07d5..8805b4bccd6c3e489192fbdcf669e6184f0691b7 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,30 @@ 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;
+
+}
+
+Standard_Integer Adaptor2d_OffsetCurve::NbSamples() const
+{
+  return  nbPoints(myCurve);
+}
index b1b1c356f30f757c6bffc78f79f268c2a2a7e82a..1d5b2caf4e5d5ad1f0b1998c54d9b994df585fd3 100644 (file)
@@ -174,6 +174,8 @@ public:
   
   Standard_EXPORT Handle(Geom2d_BSplineCurve) BSpline() const Standard_OVERRIDE;
 
+  Standard_EXPORT  Standard_Integer NbSamples() const Standard_OVERRIDE;;
+