LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ts::BSpline Class Reference

#include <tinysplinecpp.h>

Collaboration diagram for ts::BSpline:

Public Member Functions

 BSpline ()
 
 BSpline (const BSpline &other)
 
 BSpline (const size_t deg, const size_t dim, const size_t nCtrlp, const tsBSplineType type)
 
 BSpline (const std::vector< rational > points, const size_t dim)
 
 ~BSpline ()
 
BSplineoperator= (const BSpline &other)
 
DeBoorNet operator() (const rational u) const
 
size_t deg () const
 
size_t order () const
 
size_t dim () const
 
size_t nCtrlp () const
 
size_t nKnots () const
 
std::vector< rationalctrlp () const
 
std::vector< rationalknots () const
 
tsBSplinedata ()
 
DeBoorNet evaluate (const rational u) const
 
void setCtrlp (const std::vector< rational > ctrlp)
 
void setKnots (const std::vector< rational > knots)
 
BSpline setupKnots (const tsBSplineType type, const rational min, const rational max) const
 
BSpline insertKnot (const rational u, const size_t n) const
 
BSpline resize (const int n, const int back) const
 
BSpline split (const rational u) const
 
BSpline buckle (const rational b) const
 
BSpline toBeziers () const
 
BSpline derive () const
 
 BSpline (BSpline &&other)
 
BSplineoperator= (BSpline &&other)
 
void swap (BSpline &other)
 

Private Attributes

tsBSpline bspline
 

Friends

void swap (BSpline &left, BSpline &right)
 

Detailed Description

Definition at line 44 of file tinysplinecpp.h.

Constructor & Destructor Documentation

ts::BSpline::BSpline ( )

Definition at line 122 of file tinysplinecpp.cpp.

123 {
125 }
void ts_bspline_default(tsBSpline *bspline)
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::BSpline::BSpline ( const BSpline other)

Definition at line 127 of file tinysplinecpp.cpp.

128 {
129  const tsError err = ts_bspline_copy(&other.bspline, &bspline);
130  if (err < 0)
131  throw std::runtime_error(ts_enum_str(err));
132 }
tsError ts_bspline_copy(const tsBSpline *original, tsBSpline *copy)
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
ts::BSpline::BSpline ( const size_t  deg,
const size_t  dim,
const size_t  nCtrlp,
const tsBSplineType  type 
)

Definition at line 134 of file tinysplinecpp.cpp.

136 {
137  const tsError err = ts_bspline_new(deg, dim, nCtrlp, type, &bspline);
138  if (err < 0)
139  throw std::runtime_error(ts_enum_str(err));
140 }
size_t dim() const
size_t deg() const
tsError ts_bspline_new(const size_t deg, const size_t dim, const size_t n_ctrlp, const tsBSplineType type, tsBSpline *bspline)
size_t nCtrlp() const
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
ts::BSpline::BSpline ( const std::vector< rational points,
const size_t  dim 
)
ts::BSpline::~BSpline ( )

Definition at line 154 of file tinysplinecpp.cpp.

155 {
157 }
void ts_bspline_free(tsBSpline *bspline)
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::BSpline::BSpline ( ts::BSpline &&  other)

Definition at line 318 of file tinysplinecpp.cpp.

319 {
321  swap(other);
322 }
void swap(BSpline &other)
void ts_bspline_default(tsBSpline *bspline)
tsBSpline bspline
Definition: tinysplinecpp.h:92

Member Function Documentation

ts::BSpline ts::BSpline::buckle ( const rational  b) const

Definition at line 290 of file tinysplinecpp.cpp.

291 {
292  ts::BSpline bs;
293  const tsError err = ts_bspline_buckle(&bspline, b, &bs.bspline);
294  if (err < 0)
295  throw std::runtime_error(ts_enum_str(err));
296  return bs;
297 }
tsError ts_bspline_buckle(const tsBSpline *original, const tsRational b, tsBSpline *buckled)
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
std::vector< ts::rational > ts::BSpline::ctrlp ( ) const

Definition at line 199 of file tinysplinecpp.cpp.

200 {
201  const ts::rational* begin = bspline.ctrlp;
202  const ts::rational* end = begin + bspline.n_ctrlp*bspline.dim;
203  return std::vector<ts::rational>(begin, end);
204 }
tsRational * ctrlp
Definition: tinyspline.h:95
size_t dim
Definition: tinyspline.h:92
tsRational rational
Definition: tinysplinecpp.h:9
size_t n_ctrlp
Definition: tinyspline.h:93
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsBSpline * ts::BSpline::data ( )

Definition at line 213 of file tinysplinecpp.cpp.

214 {
215  return &bspline;
216 }
tsBSpline bspline
Definition: tinysplinecpp.h:92
size_t ts::BSpline::deg ( ) const

Definition at line 174 of file tinysplinecpp.cpp.

175 {
176  return bspline.deg;
177 }
size_t deg
Definition: tinyspline.h:88
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::BSpline ts::BSpline::derive ( ) const

Definition at line 308 of file tinysplinecpp.cpp.

309 {
310  ts::BSpline bs;
311  const tsError err = ts_bspline_derive(&bspline, &bs.bspline);
312  if (err < 0)
313  throw std::runtime_error(ts_enum_str(err));
314  return bs;
315 }
tsError ts_bspline_derive(const tsBSpline *original, tsBSpline *derivative)
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
size_t ts::BSpline::dim ( ) const

Definition at line 184 of file tinysplinecpp.cpp.

185 {
186  return bspline.dim;
187 }
size_t dim
Definition: tinyspline.h:92
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::DeBoorNet ts::BSpline::evaluate ( const rational  u) const

Definition at line 218 of file tinysplinecpp.cpp.

219 {
220  DeBoorNet deBoorNet;
221  const tsError err = ts_bspline_evaluate(&bspline, u, deBoorNet.data());
222  if (err < 0)
223  throw std::runtime_error(ts_enum_str(err));
224  return deBoorNet;
225 }
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
tsError ts_bspline_evaluate(const tsBSpline *bspline, const tsRational u, tsDeBoorNet *deBoorNet)
ts::BSpline ts::BSpline::insertKnot ( const rational  u,
const size_t  n 
) const

Definition at line 261 of file tinysplinecpp.cpp.

262 {
263  ts::BSpline bs;
264  size_t k;
265  const tsError err = ts_bspline_insert_knot(&bspline, u, n, &bs.bspline, &k);
266  if (err < 0)
267  throw std::runtime_error(ts_enum_str(err));
268  return bs;
269 }
tsError ts_bspline_insert_knot(const tsBSpline *bspline, const tsRational u, const size_t n, tsBSpline *result, size_t *k)
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
std::vector< ts::rational > ts::BSpline::knots ( ) const

Definition at line 206 of file tinysplinecpp.cpp.

207 {
208  const ts::rational* begin = bspline.knots;
209  const ts::rational* end = begin + bspline.n_knots;
210  return std::vector<ts::rational>(begin, end);
211 }
tsRational * knots
Definition: tinyspline.h:96
tsRational rational
Definition: tinysplinecpp.h:9
size_t n_knots
Definition: tinyspline.h:94
tsBSpline bspline
Definition: tinysplinecpp.h:92
size_t ts::BSpline::nCtrlp ( ) const

Definition at line 189 of file tinysplinecpp.cpp.

190 {
191  return bspline.n_ctrlp;
192 }
size_t n_ctrlp
Definition: tinyspline.h:93
tsBSpline bspline
Definition: tinysplinecpp.h:92
size_t ts::BSpline::nKnots ( ) const

Definition at line 194 of file tinysplinecpp.cpp.

195 {
196  return bspline.n_knots;
197 }
size_t n_knots
Definition: tinyspline.h:94
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::DeBoorNet ts::BSpline::operator() ( const rational  u) const

Definition at line 169 of file tinysplinecpp.cpp.

170 {
171  return evaluate(u);
172 }
DeBoorNet evaluate(const rational u) const
ts::BSpline & ts::BSpline::operator= ( const BSpline other)

Definition at line 159 of file tinysplinecpp.cpp.

160 {
161  if (&other != this) {
162  const tsError err = ts_bspline_copy(&other.bspline, &bspline);
163  if (err < 0)
164  throw std::runtime_error(ts_enum_str(err));
165  }
166  return *this;
167 }
tsError ts_bspline_copy(const tsBSpline *original, tsBSpline *copy)
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
ts::BSpline & ts::BSpline::operator= ( ts::BSpline &&  other)

Definition at line 324 of file tinysplinecpp.cpp.

325 {
326  if (&other != this) {
328  swap(other);
329  }
330  return *this;
331 }
void swap(BSpline &other)
void ts_bspline_free(tsBSpline *bspline)
tsBSpline bspline
Definition: tinysplinecpp.h:92
size_t ts::BSpline::order ( ) const

Definition at line 179 of file tinysplinecpp.cpp.

180 {
181  return bspline.order;
182 }
size_t order
Definition: tinyspline.h:89
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::BSpline ts::BSpline::resize ( const int  n,
const int  back 
) const

Definition at line 271 of file tinysplinecpp.cpp.

272 {
273  ts::BSpline bs;
274  const tsError err = ts_bspline_resize(&bspline, n, back, &bs.bspline);
275  if (err < 0)
276  throw std::runtime_error(ts_enum_str(err));
277  return bs;
278 }
char * ts_enum_str(const tsError err)
tsError ts_bspline_resize(const tsBSpline *bspline, const int n, const int back, tsBSpline *resized)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
void ts::BSpline::setCtrlp ( const std::vector< rational ctrlp)

Definition at line 227 of file tinysplinecpp.cpp.

228 {
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.");
233  }
234  const tsError err = ts_bspline_set_ctrlp(&bspline, ctrlp.data(), &bspline);
235  if (err < 0)
236  throw std::runtime_error(ts_enum_str(err));
237 }
size_t dim() const
tsError ts_bspline_set_ctrlp(const tsBSpline *bspline, const tsRational *ctrlp, tsBSpline *result)
size_t nCtrlp() const
std::vector< rational > ctrlp() const
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
void ts::BSpline::setKnots ( const std::vector< rational knots)

Definition at line 239 of file tinysplinecpp.cpp.

240 {
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.");
244  }
245  const tsError err = ts_bspline_set_knots(&bspline, knots.data(), &bspline);
246  if (err < 0)
247  throw std::runtime_error(ts_enum_str(err));
248 }
tsError ts_bspline_set_knots(const tsBSpline *bspline, const tsRational *knots, tsBSpline *result)
size_t nKnots() const
std::vector< rational > knots() const
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
ts::BSpline ts::BSpline::setupKnots ( const tsBSplineType  type,
const rational  min,
const rational  max 
) const

Definition at line 250 of file tinysplinecpp.cpp.

252 {
253  ts::BSpline bs;
254  const tsError err = ts_bspline_setup_knots(
255  &bspline, type, min, max, &bs.bspline);
256  if (err < 0)
257  throw std::runtime_error(ts_enum_str(err));
258  return bs;
259 }
tsError ts_bspline_setup_knots(const tsBSpline *original, const tsBSplineType type, const tsRational min, const tsRational max, tsBSpline *result)
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
ts::BSpline ts::BSpline::split ( const rational  u) const

Definition at line 280 of file tinysplinecpp.cpp.

281 {
282  ts::BSpline bs;
283  size_t k;
284  const tsError err = ts_bspline_split(&bspline, u, &bs.bspline, &k);
285  if (err < 0)
286  throw std::runtime_error(ts_enum_str(err));
287  return bs;
288 }
char * ts_enum_str(const tsError err)
tsError ts_bspline_split(const tsBSpline *bspline, const tsRational u, tsBSpline *split, size_t *k)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError
Definition: tinyspline.h:41
void ts::BSpline::swap ( ts::BSpline other)

Definition at line 333 of file tinysplinecpp.cpp.

334 {
335  if (&other != this) {
336  std::swap(bspline.deg, other.bspline.deg);
337  std::swap(bspline.order, other.bspline.order);
338  std::swap(bspline.dim, other.bspline.dim);
339  std::swap(bspline.n_ctrlp, other.bspline.n_ctrlp);
340  std::swap(bspline.n_knots, other.bspline.n_knots);
341  std::swap(bspline.ctrlp, other.bspline.ctrlp);
342  std::swap(bspline.knots, other.bspline.knots);
343  }
344 }
tsRational * ctrlp
Definition: tinyspline.h:95
size_t dim
Definition: tinyspline.h:92
size_t order
Definition: tinyspline.h:89
tsRational * knots
Definition: tinyspline.h:96
size_t n_ctrlp
Definition: tinyspline.h:93
size_t n_knots
Definition: tinyspline.h:94
size_t deg
Definition: tinyspline.h:88
tsBSpline bspline
Definition: tinysplinecpp.h:92
ts::BSpline ts::BSpline::toBeziers ( ) const

Definition at line 299 of file tinysplinecpp.cpp.

300 {
301  ts::BSpline bs;
302  const tsError err = ts_bspline_to_beziers(&bspline, &bs.bspline);
303  if (err < 0)
304  throw std::runtime_error(ts_enum_str(err));
305  return bs;
306 }
char * ts_enum_str(const tsError err)
tsBSpline bspline
Definition: tinysplinecpp.h:92
tsError ts_bspline_to_beziers(const tsBSpline *bspline, tsBSpline *beziers)
tsError
Definition: tinyspline.h:41

Friends And Related Function Documentation

void swap ( BSpline left,
BSpline right 
)
friend

Definition at line 88 of file tinysplinecpp.h.

88 { left.swap(right); }

Member Data Documentation

tsBSpline ts::BSpline::bspline
private

Definition at line 92 of file tinysplinecpp.h.


The documentation for this class was generated from the following files: