Ipelib
|
#include <ipeshape.h>
Public Types | |
enum | Type { EArc, ESegment, EQuad, EBezier, ESpline } |
Public Member Functions | |
Type | type () const |
int | countCP () const |
Vector | cp (int i) const |
Vector | last () const |
Matrix | matrix () const |
Bezier | bezier () const |
Arc | arc () const |
void | beziers (std::vector< Bezier > &bez) const |
void | draw (Painter &painter) const |
void | addToBBox (Rect &box, const Matrix &m, bool cp) const |
double | distance (const Vector &v, const Matrix &m, double bound) const |
void | snapVtx (const Vector &mouse, const Matrix &m, Vector &pos, double &bound) const |
void | snapBnd (const Vector &mouse, const Matrix &m, Vector &pos, double &bound) const |
Friends | |
class | Curve |
A segment on an SubPath.
A segment is either an elliptic arc, a straight segment, a quadratic Bezier spline, a cubic Bezier spline, or a B-spline curve, depending on its type(). This is a lightweight object, created on the fly by Curve::segment(). There is no public constructor, so the only way to create such an object is through that method.
The type() is one of the following:
ESegment:
the segment has two control points, and represents a line segment.EQuad:
a quadratic Bezier spline with three control points.EBezier:
a cubic Bezier spline with four control points.ESpline:
a B-spline curve with n control points. The first and last control point's knot value is repeated three times, so the curve begins and ends in these points.EArc:
an elliptic arc, with begin and end point. The supporting ellipse is defined by the matrix(), it is the image under the affine transformation matrix() of the unit circle. matrix() is such that its inverse transforms both start and end position to points (nearly) on the unit circle. The arc is the image of the positively (counter-clockwise) directed arc from the pre-image of the start position to the pre-image of the end position. Whether this is a positively or negatively oriented arc in user space depends on the matrix.
|
inline |
Type of segment.
Referenced by addToBBox(), arc(), bezier(), distance(), draw(), ipe::Shape::isSegment(), snapBnd(), and snapVtx().
|
inline |
Number of control points.
Referenced by addToBBox(), beziers(), and snapVtx().
|
inline |
Return control point.
Referenced by addToBBox(), arc(), bezier(), distance(), draw(), snapBnd(), and snapVtx().
|
inline |
Return last control point.
|
inline |
Referenced by addToBBox(), ipe::Path::draw(), and snapVtx().
Bezier CurveSegment::bezier | ( | ) | const |
Return segment as Bezier.
Panics if segment is not a quadratic or cubic Bezier spline.
References cp(), EBezier, EQuad, ipe::Bezier::quadBezier(), and type().
Referenced by addToBBox(), distance(), draw(), and snapBnd().
Arc CurveSegment::arc | ( | ) | const |
Return segment as Arc.
Panics if segment is not an arc.
References cp(), EArc, and type().
Referenced by addToBBox(), distance(), draw(), and snapBnd().
void CurveSegment::beziers | ( | std::vector< Bezier > & | bez | ) | const |
Convert B-spline to a sequence of Bezier splines.
References countCP(), and ipe::Bezier::spline().
Referenced by addToBBox(), distance(), draw(), and snapBnd().
void CurveSegment::draw | ( | Painter & | painter | ) | const |
Draw the segment.
Current position of the painter is already on first control point.
References arc(), bezier(), beziers(), cp(), ipe::Painter::curveTo(), ipe::Painter::drawArc(), EArc, EBezier, EQuad, ESegment, ESpline, ipe::Painter::lineTo(), and type().
Referenced by ipe::Curve::draw().
Add segment to bounding box.
Does not assume that first control point has already been added.
If cpf is true, then control points of splines, Bezier curves, and the center of arcs are included in the bbox (so that snapping can find them). Otherwise, a tight bounding box for the geometric object itself is computed.
References ipe::Rect::addPoint(), ipe::Rect::addRect(), arc(), bezier(), beziers(), countCP(), cp(), EArc, EBezier, EQuad, ESegment, ESpline, matrix(), and type().
Referenced by ipe::Curve::addToBBox().
void CurveSegment::snapBnd | ( | const Vector & | mouse, |
const Matrix & | m, | ||
Vector & | pos, | ||
double & | bound | ||
) | const |
References arc(), bezier(), beziers(), cp(), ipe::Arc::distance(), EArc, EBezier, EQuad, ESegment, ESpline, ipe::Segment::snap(), and type().
Referenced by ipe::Curve::snapBnd().
|
friend |