[cairo] multiple paths
behdad at behdad.org
Mon Nov 5 10:31:34 PST 2007
On Mon, 2007-11-05 at 08:56 -0500, control H wrote:
> 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
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,
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