29 #ifndef __CU_CUBIC_SPLINE_H__
30 #define __CU_CUBIC_SPLINE_H__
39 #define DEFAULT_TOLERANCE 0.25
42 #pragma mark CubicSpline
135 #pragma mark Constructors
187 CubicSpline(
const float* points,
int size,
int offset=0);
240 #pragma mark Attribute Accessors
281 void setClosed(
bool flag);
315 void setPoint(
float tp,
const Vec2& point);
328 Vec2 getAnchor(
int index)
const;
346 void setAnchor(
int index,
const Vec2& point);
364 bool getSmooth(
int index)
const;
388 void setSmooth(
int index,
bool flag);
408 Vec2 getTangent(
int index)
const;
436 void setTangent(
int index,
const Vec2& tang,
bool symmetric=
false);
487 #pragma mark Anchor Editting Methods
520 int addAnchor(
const Vec2& point,
const Vec2& tang);
536 void deleteAnchor(
int index);
560 #pragma mark Nearest Point Methods
578 Vec2
nearestPoint(
const Vec2& point)
const {
return getPoint(nearestParameter(point)); }
593 float nearestParameter(
const Vec2& point)
const;
606 int nearestAnchor(
const Vec2& point,
float threshold)
const;
619 int nearestTangent(
const Vec2& point,
float threshold)
const;
622 #pragma mark Polygon Approximation
638 vector<Vec2> approximate(
float tolerance=DEFAULT_TOLERANCE,
639 Criterion criterion=Criterion::DISTANCE)
const;
661 vector<float> approximateParameters(
float tolerance=DEFAULT_TOLERANCE,
662 Criterion criterion=Criterion::DISTANCE)
const;
684 vector<Vec2> approximateTangents(
float tolerance=DEFAULT_TOLERANCE,
685 Criterion criterion=Criterion::DISTANCE)
const;
707 vector<Vec2> approximateNormals(
float tolerance=DEFAULT_TOLERANCE,
708 Criterion criterion=Criterion::DISTANCE)
const;
723 CubicSpline refine(
float tolerance=DEFAULT_TOLERANCE,
724 Criterion criterion=Criterion::DISTANCE)
const;
726 #pragma mark Rendering Data
752 Poly2* allocPath(
float tolerance=DEFAULT_TOLERANCE,
753 Criterion criterion=Criterion::DISTANCE)
const;
773 Poly2* allocTangents()
const;
795 Poly2* allocAnchors(
float radius,
int segments=4)
const;
817 Poly2* allocHandles(
float radius,
int segments=4)
const;
820 #pragma mark Internal Helpers
835 Vec2 getPoint(
int segment,
float tp)
const;
856 void insertAnchor(
int segment,
float param);
870 void subdivide(
int segment,
float tp, vector<Vec2>& left, vector<Vec2>& rght)
const {
871 subdivide(_points,6*segment,tp,left,rght);
891 static void subdivide(
const vector<Vec2>& src,
int soff,
float tp,
892 vector<Vec2>& left, vector<Vec2>& rght);
909 Polynomial getProjectionPolynomial(
const Vec2& point,
int segment)
const;
932 Vec2 getProjectionSlow(
const Vec2& point,
int segment)
const;
960 Vec2 getProjectionFast(
const Vec2& point,
int segment)
const;
964 #pragma mark Recursive Data Generation
1006 static int generate_data(
const vector<Vec2>& src,
int soff,
float tp,
1007 float tolerance, Criterion criterion,
1008 void* buffer, Buffer bufferType,
int depth);
Vec2 nearestPoint(const Vec2 &point) const
Definition: CUCubicSpline.h:578
CubicSpline(const Vec2 &point)
Definition: CUCubicSpline.h:153
int _size
Definition: CUCubicSpline.h:82
Definition: CUPolynomial.h:50
bool getClosed() const
Definition: CUCubicSpline.h:265
vector< Vec2 > _points
Definition: CUCubicSpline.h:91
CubicSpline()
Definition: CUCubicSpline.h:142
~CubicSpline()
Definition: CUCubicSpline.h:237
Criterion
Definition: CUCubicSpline.h:109
const vector< Vec2 > getControlPoints() const
Definition: CUCubicSpline.h:484
int addAnchor(const Vec2 &point)
Definition: CUCubicSpline.h:503
void insertAnchor(float param)
Definition: CUCubicSpline.h:557
int getSize() const
Definition: CUCubicSpline.h:249
Definition: CUCubicSpline.h:124
bool _closed
Definition: CUCubicSpline.h:97
void subdivide(int segment, float tp, vector< Vec2 > &left, vector< Vec2 > &rght) const
Definition: CUCubicSpline.h:870
Vec2 getPoint(float tp) const
Definition: CUCubicSpline.h:296
vector< bool > _smooth
Definition: CUCubicSpline.h:94
Definition: CUCubicSpline.h:78
Definition: CUCubicSpline.h:116