def InterpolatePoints(self):
     curgp_Array1CurvePoles2d = point_list_to_TColgp_Array1OfPnt2d(self.Poles2d)
     curgp_Array1CurvePoles = point_list_to_TColgp_Array1OfPnt(self.Poles)
     # self.FindPoints(self.Poles2d)
     # self.FindPoints(self.Poles)
     try:
         myGeom2d_BSplineCurve = Geom2dAPI_PointsToBSpline(curgp_Array1CurvePoles2d)
         if myGeom2d_BSplineCurve.IsDone():
             self.myGeom2d_BSplineCurve = myGeom2d_BSplineCurve.Curve()
     except Exception as e:
         print(e)
     try:
         myGeom_BSplineCurve = GeomAPI_PointsToBSpline(curgp_Array1CurvePoles)
         if myGeom_BSplineCurve.IsDone():
             self.myGeom_BSplineCurve = myGeom_BSplineCurve.Curve()
     except Exception as e:
         print(e)
def approx_points_by_piecewise_bezier(points_3d, degree, tol):
    if degree not in (2, 3):
        raise RuntimeError(
            "SVG files only support Bezier curves of degree 2 or 3")

    points_3d_occ = [gp_Pnt(*p) for p in points_3d]
    approx_spline = GeomAPI_PointsToBSpline(
        point_list_to_TColgp_Array1OfPnt(points_3d_occ), degree, degree,
        GeomAbs_C1, tol)
    # TO DO:
    # why the following string doesn't yield a spline of degree < 3
    # approx_spline = GeomConvert_ApproxCurve(spline, tol, order, max_segments, max_degree)

    if not approx_spline.IsDone():
        raise RuntimeError(
            "Could not approximate points within a given tolerance")

    return GeomConvert_BSplineCurveToBezierCurve(approx_spline.Curve())