Main Page | Modules | Class Hierarchy | Class List | Class Members

IpePath Class Reference
[Ipe Objects]

The path object (polylines, polygons, and generalizations). More...

Inherits IpeFillable.

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

The path object (polylines, polygons, and generalizations).

This object follows the PDF rendering model, but is actually a bit more complicated since we add new subtypes: arcs, parabolas, uniform B-splines (in PDF, all of these are converted to cubic Bezier splines). Unlike Ipe 5, we can now represent objects consisting of more than one subpath. Note that Ipe 5's spline and arc objects are now represented as IpePath objects.

A path object consists of a set of subpaths (IpeSubPath), each of which is either open or closed, and which are rendered by stroking and filling as a whole. The distinction between open and closed is meaningful for stroking only, for filling any open subpath is implicitely closed. Stroking a set of subpaths is identical to stroking them individually. This is not true for filling: using several subpaths, one can construct objects with holes, and more complicated pattern. The filling algorithm is the even-odd rule of PDF: To determine whether a point lies inside the filled shape, draw a ray from that point in any direction, and count the number of path segments that cross the ray. If this number is odd, the point is inside; if even, the point is outside. (IpePath objects can also render using the winding fill rule by setting the StrokeStyle attribute. This isn't really supported by the Ipe user interface, which doesn't show the orientation of paths.)

A subpath consists of a sequence of segments. (A complete ellipse and a closed B-spline curve can appear as special cases of subpaths that cannot be further decomposed into segments.) Segments are either straight, a quadratic Bezier spline, a cubic Bezier spline, an elliptic arc, or a uniform cubic B-spline. The segmented subpath class IpeSegmentSubPath returns segments as IpePathSegment (but they are not internally stored that way).


Constructor & Destructor Documentation

IpePath::IpePath IpeRepository rep,
const IpeXmlAttributes attr,
IpeString  data
[explicit]
 

Construct from XML data.

IpePath::IpePath const IpeAllAttributes attr  )  [explicit]
 

Create empty path object, and null/default attributes.

IpePath::IpePath const IpeAllAttributes attr,
const IpeRect rect
[explicit]
 

Create a rectangle.

IpePath::IpePath const IpeAllAttributes attr,
const IpeSegment seg
[explicit]
 

Create a single line segment from seg.iP to seg.iQ.

IpePath::IpePath const IpeAllAttributes attr,
const IpeVector center,
double  radius
[explicit]
 

Create circle with center and radius.

IpePath::IpePath const IpeAllAttributes attr,
const IpeVector center,
double  radius,
double  alpha0,
double  alpha1
[explicit]
 

Create circular arc with center, radius, between given angles.

If alpha1 is larger than alpha0, the arc is oriented positively, otherwise negatively.

IpePath::IpePath const IpePath rhs  ) 
 

Copy constructor (takes care of reference counting).

IpePath::~IpePath  ) 
 

Destructor (takes care of reference counting).


Member Function Documentation

IpePath & IpePath::operator= const IpePath rhs  ) 
 

Assignment operator (constant-time).

IpeObject * IpePath::Clone  )  const [virtual]
 

Return a clone (constant-time).

Implements IpeObject.

IpePath * IpePath::AsPath  )  [virtual]
 

Return pointer to this object.

Reimplemented from IpeObject.

void IpePath::SaveAsXml IpePainter painter,
IpeStream stream,
IpeString  layer
const [virtual]
 

Save the object in XML format.

Implements IpeObject.

void IpePath::Draw IpePainter painter  )  const [virtual]
 

Draw the object.

Implements IpeObject.

void IpePath::Accept IpeVisitor visitor  )  const [virtual]
 

Call VisitPath of visitor.

Implements IpeObject.

void IpePath::AddToBBox IpeRect box,
const IpeMatrix m
const [virtual]
 

Extend box to include the object transformed by m.

For Ipe objects in a page, don't call this directly. The IpePgObject caches the bounding box, so it is far more efficient to call IpePgObject::BBox.

If called with an empty box, the result of this function is a tight bounding box for the object, with a little leeway in case the boundary is determined by a spline (it has to be approximated to perform this operation).

Implements IpeObject.

double IpePath::Distance const IpeVector v,
const IpeMatrix m,
double  bound
const [virtual]
 

Return distance of transformed object to point v. If larger than bound, can just return bound.

Implements IpeObject.

void IpePath::SnapVtx const IpeVector mouse,
const IpeMatrix m,
IpeVector pos,
double &  bound
const [virtual]
 

Compute possible vertex snapping position for transformed object.

Looks only for positions closer than bound. If successful, modify pos and bound.

Implements IpeObject.

void IpePath::SnapBnd const IpeVector mouse,
const IpeMatrix m,
IpeVector pos,
double &  bound
const [virtual]
 

Compute boundary snapping position for transformed object.

Looks only for positions closer than bound. If successful, modify pos and bound. The default implementation does nothing.

Reimplemented from IpeObject.

void IpePath::CheckStyle const IpeStyleSheet sheet,
IpeAttributeSeq seq
const [virtual]
 

Check all symbolic attributes.

Reimplemented from IpeFillable.

IpeAttribute IpePath::ForwardArrow  )  const [inline]
 

Return arrow of the object.

IpeAttribute IpePath::BackwardArrow  )  const [inline]
 

Return backward arrow of the object.

void IpePath::SetForwardArrow IpeAttribute  size  ) 
 

Set forward arrow (if the object can take it).

void IpePath::SetBackwardArrow IpeAttribute  size  ) 
 

Set backward arrow (if the object can take it).

void IpePath::DrawArrow IpePainter painter,
IpeVector  pos,
IpeAngle  alpha,
IpeAttribute  size
[static]
 

Draw an arrow of size with tip at v1 directed from v0 to v1.

int IpePath::NumSubPaths  )  const [inline]
 

Return number of subpaths.

const IpeSubPath* IpePath::SubPath int  i  )  const [inline]
 

Return subpath.

void IpePath::AddSubPath IpeSubPath sp  ) 
 

Add a subpath to object.

This can only be used directly after the creation of this path object. Once the object has been copied or assigned, this method will panic.

IpePath takes ownership of the subpath.


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