Ipelib
|
#include <ipegeo.h>
Public Member Functions | |
Bezier () | |
Bezier (const Vector &p0, const Vector &p1, const Vector &p2, const Vector &p3) | |
Vector | point (double t) const |
Vector | tangent (double t) const |
double | distance (const Vector &v, double bound) |
bool | straight (double precision) const |
void | subdivide (Bezier &l, Bezier &r) const |
void | approximate (double precision, std::vector< Vector > &result) const |
Rect | bbox () const |
bool | snap (const Vector &v, double &t, Vector &pos, double &bound) const |
void | intersect (const Line &l, std::vector< Vector > &result) const |
void | intersect (const Segment &l, std::vector< Vector > &result) const |
void | intersect (const Bezier &b, std::vector< Vector > &result) const |
Static Public Member Functions | |
static Bezier | quadBezier (const Vector &p0, const Vector &p1, const Vector &p2) |
static void | spline (int n, const Vector *v, std::vector< Bezier > &result) |
static void | closedSpline (int n, const Vector *v, std::vector< Bezier > &result) |
Public Attributes | |
Vector | iV [4] |
A cubic Bezier spline.
|
inline |
Default constructor, uninitialized curve.
Referenced by closedSpline(), intersect(), quadBezier(), and spline().
|
inline |
Constructor with four control points.
References iV.
Vector Bezier::point | ( | double | t | ) | const |
Vector Bezier::tangent | ( | double | t | ) | const |
Return tangent direction of curve at parameter t (from 0.0 to 1.0).
The returned vector is not normalized.
References iV.
Referenced by ipe::Snap::setEdge().
double Bezier::distance | ( | const Vector & | v, |
double | bound | ||
) |
Return distance to Bezier spline.
But may just return bound if actual distance is larger. The Bezier spline is approximated to a precision of 1.0, and the distance to the approximation is returned.
References ipe::Rect::addPoint(), approximate(), ipe::Rect::certainClearance(), and iV.
bool Bezier::straight | ( | double | precision | ) | const |
Returns true if the Bezier curve is nearly identical to the line segment iV[0]..iV[3].
References ipe::Line::distance(), iV, and ipe::Line::through().
Referenced by approximate(), intersect(), ipe::Arc::intersect(), and snap().
Subdivide this Bezier curve in the middle.
References iV.
Referenced by approximate(), intersect(), ipe::Arc::intersect(), and snap().
void Bezier::approximate | ( | double | precision, |
std::vector< Vector > & | result | ||
) | const |
Approximate by a polygonal chain.
result must be empty when calling this.
References approximate(), iV, straight(), and subdivide().
Referenced by approximate(), bbox(), and distance().
Rect Bezier::bbox | ( | ) | const |
Return a tight bounding box (accurate to within 0.5).
References ipe::Rect::addPoint(), approximate(), ipe::Rect::bottomLeft(), iV, and ipe::Rect::topRight().
Referenced by ipe::BBoxPainter::doCurveTo().
Find (approximately) nearest point on Bezier spline.
Find point on spline nearest to v, but only if it is closer than bound. If a point is found, sets t to the parameter value and pos to the actual point, and returns true.
References ipe::Rect::addPoint(), ipe::Rect::certainClearance(), iV, point(), ipe::Segment::project(), ipe::Vector::snap(), snap(), straight(), and subdivide().
Referenced by ipe::Snap::setEdge(), and snap().
Convert a quadratic Bezier-spline to a cubic one.
The quadratic Bezier-spline with control points p0, p1, p2 is identical to the cubic Bezier-spline with control points q0 = p0, q1 = (2p1 + p0)/3, q2 = (2p1 + p2)/3, q3 = p2.
References Bezier().
Referenced by ipe::CurveSegment::bezier().
Convert a uniform cubic B-spline to a series of Bezier splines.
First and last control point are given multiplicity 3. Bezier splines are appended to result.
References Bezier().
Referenced by ipe::CurveSegment::beziers().
Convert a closed uniform cubic B-spline to a series of Bezier splines.
Bezier splines are appended to result.
References Bezier().
Referenced by ipe::ClosedSpline::beziers().
Compute intersection points of Bezier with Line.
References intersect(), ipe::Segment::intersects(), iV, ipe::Line::side(), straight(), and subdivide().
Referenced by intersect().
Compute intersection points of Bezier with Segment.
References Bezier(), ipe::Segment::iP, and ipe::Segment::iQ.
Vector ipe::Bezier::iV[4] |
Referenced by approximate(), bbox(), Bezier(), ipe::Painter::curveTo(), distance(), intersect(), ipe::Arc::intersect(), ipe::Matrix::operator*(), point(), snap(), straight(), subdivide(), and tangent().