[cairo] Path Representation In Qahirah
tweenk.pl at gmail.com
Wed Mar 25 17:12:13 PDT 2015
2015-03-24 23:09 GMT+01:00 Lawrence D'Oliveiro <ldo at geek-central.gen.nz>:
> So I have changed the internal representation I use. This is now a
> sequence of Segments, each of which is a sequence of Points, together
> with an open/closed indication for the Segment. Each Point has a
> coordinate Vector, together with an on-curve/off-curve flag. Two
> successive on-curve points produce a straight line; a single off-curve
> point in-between defines a quadratic Bézier, while two off-curve points
> in-between make for a cubic Bézier. Each Segment must begin and end
> with an on-curve Point.
You may find this approach hard to generalize to elliptical arcs, as
encountered in SVG.
For comparison, Inkscape's geometry library lib2geom stores paths as a
sequence of curves (functions mapping the unit interval to the plane),
each of which can store different data. A Bezier segment stores all
control points, an elliptical arc segment stores the same data as an
SVG elliptical arc command plus some precomputed values, and there is
also a segment that represents a curve in symmetric power basis
(SBasis). Linear segment is just a Bezier with 2 control points.
Although this representation is somewhat redundant (in the worst case
of a path with linear segments only, all points are stored twice), it
is very convenient and leads to an easy to use API.
More information about the cairo