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())