63 return deBoorNet.n_points;
69 const ts::rational* end = begin + deBoorNet.n_points*deBoorNet.dim;
70 return std::vector<ts::rational>(begin, end);
77 return std::vector<ts::rational>(begin, end);
85 #ifndef TINYSPLINE_DISABLE_CXX11_FEATURES
103 if (&other !=
this) {
146 if (points.size() % dim != 0)
147 throw std::runtime_error(
"#points % dim == 0 failed");
149 points.data(), points.size()/dim, dim, &bspline);
161 if (&other !=
this) {
181 return bspline.order;
191 return bspline.n_ctrlp;
196 return bspline.n_knots;
202 const ts::rational* end = begin + bspline.n_ctrlp*bspline.dim;
203 return std::vector<ts::rational>(begin, end);
210 return std::vector<ts::rational>(begin, end);
229 if (ctrlp.size() != nCtrlp() * dim()) {
230 throw std::runtime_error(
"The number of values must be equals to the"
231 " spline's number of control points multiplied by the dimension"
232 " of each control point.");
241 if (knots.size() != nKnots()) {
242 throw std::runtime_error(
"The number of values must be equals to the"
243 " spline's number of knots.");
255 &bspline, type, min, max, &bs.
bspline);
317 #ifndef TINYSPLINE_DISABLE_CXX11_FEATURES
326 if (&other !=
this) {
335 if (&other !=
this) {
static bool fequals(const rational x, const rational y)
tsError ts_bspline_interpolate(const tsRational *points, const size_t n, const size_t dim, tsBSpline *bspline)
tsError ts_bspline_set_knots(const tsBSpline *bspline, const tsRational *knots, tsBSpline *result)
void setKnots(const std::vector< rational > knots)
BSpline toBeziers() const
static std::string enum_str(const tsError err)
tsError ts_bspline_derive(const tsBSpline *original, tsBSpline *derivative)
tsError ts_str_enum(const char *str)
DeBoorNet evaluate(const rational u) const
tsError ts_bspline_set_ctrlp(const tsBSpline *bspline, const tsRational *ctrlp, tsBSpline *result)
void swap(BSpline &other)
tsError ts_bspline_new(const size_t deg, const size_t dim, const size_t n_ctrlp, const tsBSplineType type, tsBSpline *bspline)
BSpline & operator=(const BSpline &other)
DeBoorNet operator()(const rational u) const
BSpline insertKnot(const rational u, const size_t n) const
std::vector< rational > result() const
void ts_bspline_free(tsBSpline *bspline)
static tsError str_enum(const std::string str)
void setCtrlp(const std::vector< rational > ctrlp)
tsError ts_bspline_setup_knots(const tsBSpline *original, const tsBSplineType type, const tsRational min, const tsRational max, tsBSpline *result)
tsError ts_bspline_copy(const tsBSpline *original, tsBSpline *copy)
tsError ts_deboornet_copy(const tsDeBoorNet *original, tsDeBoorNet *copy)
tsError ts_bspline_insert_knot(const tsBSpline *bspline, const tsRational u, const size_t n, tsBSpline *result, size_t *k)
std::vector< rational > ctrlp() const
BSpline setupKnots(const tsBSplineType type, const rational min, const rational max) const
tsError ts_bspline_buckle(const tsBSpline *original, const tsRational b, tsBSpline *buckled)
int ts_fequals(const tsRational x, const tsRational y)
BSpline buckle(const rational b) const
BSpline split(const rational u) const
void swap(DeBoorNet &other)
DeBoorNet & operator=(const DeBoorNet &other)
std::vector< rational > knots() const
char * ts_enum_str(const tsError err)
std::vector< rational > points() const
tsError ts_bspline_split(const tsBSpline *bspline, const tsRational u, tsBSpline *split, size_t *k)
BSpline resize(const int n, const int back) const
void ts_deboornet_default(tsDeBoorNet *deBoorNet)
tsError ts_bspline_resize(const tsBSpline *bspline, const int n, const int back, tsBSpline *resized)
void ts_bspline_default(tsBSpline *bspline)
tsError ts_bspline_to_beziers(const tsBSpline *bspline, tsBSpline *beziers)
void ts_deboornet_free(tsDeBoorNet *deBoorNet)
tsError ts_bspline_evaluate(const tsBSpline *bspline, const tsRational u, tsDeBoorNet *deBoorNet)