[Lazarus] TAchart multiple reticules and vertical series alignment
Alexander Klenin
klenin at gmail.com
Sat Jun 5 18:31:53 CEST 2010
2010/6/5 Rick <rick at sloservers.com>:
> Well of course I don't look at the entire graph at once. I zoom in to maybe
> 10 or 20 points at
> a time and use a scroll bar the pan the chart. It's a run of data that I captured from a
> logic analyzer. So when I'm zoomed-in, there's an appreciable distance
> between data points :)
Ah, I see now -- this completely changes things.
> I can take a data set of 100 points and zoom
> in so I'm displaying only 10 points and drag a vertical line around just
> fine. Expand the data
> set to 10k points and look at the same 10-point window, but now the line
> lags and the draw
> event seems to be much slower. The calls to ACanvas.Line should be the same
> in both cases,
> shouldn't they? In other words, the time to draw should be unchanged.
Of course. I optimized the slowest case -- that is the drawing of the
full extent.
It did became much faster.
Zoomed-in case for large zoom factors stayed about the same, because I thought
it is already (relatively) fast.
> What was different/what I think
> was faster was the mapping between the chart's logical extent and my data set.
Yes, for the extremely-zoomed-in case your previous comment about
using binary search definitely makes sense.
This is yet another long-standing todo item.
[I should publish my todo list somewhere... maybe as feature requests
on issue tracker?]
It is hard to implement properly due to many possible combinations of
data sources and axis transformations (consider inverted logarithmic
axis case, for example).
Still, I think I did it in r25912:25925.
This is a complex code, so I please test *and* review it, if you can.
The bugs like this one:
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/tachart/tacustomseries.pas?root=lazarus&r1=25923&r2=25922&pathrev=25923
are really easy to miss with just one set of eyeballs ;-)
To turn on the optimization, you must set Sorted property to true on
your chart source.
It defaults to false for compatibility -- look at dragdrop demo to see
the difference.
--
Alexander S. Klenin
More information about the Lazarus
mailing list