Ipelib
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
ipe::Bezier Class Reference

#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]
 

Detailed Description

A cubic Bezier spline.

Constructor & Destructor Documentation

ipe::Bezier::Bezier ( )
inline

Default constructor, uninitialized curve.

Referenced by closedSpline(), intersect(), quadBezier(), and spline().

ipe::Bezier::Bezier ( const Vector p0,
const Vector p1,
const Vector p2,
const Vector p3 
)
inline

Constructor with four control points.

References iV.

Member Function Documentation

Vector Bezier::point ( double  t) const

Return point on curve with parameter t (from 0.0 to 1.0).

References iV.

Referenced by snap().

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

void Bezier::subdivide ( Bezier l,
Bezier r 
) const

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

bool Bezier::snap ( const Vector v,
double &  t,
Vector pos,
double &  bound 
) const

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

Bezier Bezier::quadBezier ( const Vector p0,
const Vector p1,
const Vector p2 
)
static

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

void Bezier::spline ( int  n,
const Vector v,
std::vector< Bezier > &  result 
)
static

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

void Bezier::closedSpline ( int  n,
const Vector v,
std::vector< Bezier > &  result 
)
static

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

void Bezier::intersect ( const Line l,
std::vector< Vector > &  result 
) const

Compute intersection points of Bezier with Line.

References intersect(), ipe::Segment::intersects(), iV, ipe::Line::side(), straight(), and subdivide().

Referenced by intersect().

void Bezier::intersect ( const Segment l,
std::vector< Vector > &  result 
) const

Compute intersection points of Bezier with Segment.

References Bezier(), ipe::Segment::iP, and ipe::Segment::iQ.

void Bezier::intersect ( const Bezier b,
std::vector< Vector > &  result 
) const

Compute intersection points of Bezier with Bezier.

Member Data Documentation

Vector ipe::Bezier::iV[4]

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