[cairo] multiple paths

Behdad Esfahbod behdad at behdad.org
Mon Nov 5 10:31:34 PST 2007

On Mon, 2007-11-05 at 08:56 -0500, control H wrote:
> Hi,


> I have a list of measured values and want to plot them. For every x_i
> from the list I do cairo_line_to(i,x_i) and when I've processed the
> whole list I stroke. Simple.
> However, every x_i also has its own variance. And I want to plot a
> variance band around the line connecting the x_i's. For the code to be
> as efficient as possible I thought it's best when I iterate through
> the list of x_i's only once.

Normally, you should go ahead and write the code the easiest way
possible.  Then if it's slow, profile it and find a bottleneck and
optimize that.  This kind of assumption you are making most probably
falls in the premature-optimization zone.

> I was thinking of a solution like this: make 3 cairo paths. For every
> x_i, line_to in path1, line_to(i,x_i - variance_x_i) in path2 and
> line_to (i,x_i + variance_x_i) in path three. At the end, stroke
> path1, reverse path3, concat path3 to path2 and close path2, stroke
> path2.

I'd say build path1, path2, and path3, then just stroke them, and fixup
anything on the sides if you need.  Avoid the reversing.

> Now for the questions:
> first: how to make these paths in cairo
> second: is this the way to do it? Or is it really clumsy? I feel I'm
> missing something.

It definitely is clumsy.  The only way to do that in cairo is to create
three cairo_t objects for your surface and use each for one of the
paths.  This is because cairo doesn't have separate path creation API
other than that in cairo_t.

> thanks for your input,
> CH

Have fun with cairo!


"Those who would give up Essential Liberty to purchase a little
 Temporary Safety, deserve neither Liberty nor Safety."
        -- Benjamin Franklin, 1759

More information about the cairo mailing list