Re: plot data stream in realtime
- From: "Amish S. Dave" <dave amish gmail com>
- To: gtkdatabox-list gnome org
- Subject: Re: plot data stream in realtime
- Date: Mon, 12 Nov 2012 20:32:05 -0600
Just some thoughts on this topic. Basically, it gets at the idea of
trying to handle different representations for the input data. This is
assumed to be representable by static arrays of gfloats. That's fine,
but it means that all applications that don't start with that
representation need to adapt their representation to what gtkdatabox wants.
It should be fairly straightforward to implement a slightly different
scheme that could allow the inputs arrays to be
1. the current linear arrays [x0 x1 x2 .. xn] [y0 y1 y2 .. yn]
2. represent a ring-buffer e.g. [xn-1 xn x0 x1 x2 ... xn-2]
3. dynamically growing arrays
4. interleaved X&Y values [x0 y0 x1 y1 x2 y2 ... xn yn]
I'm thinking of something like this:
gtk_databox_graph_data_update(graph, int XYallocpts, void *X, void *Y,
int startpt, int numpts, int xstridebytes, int ystridebytes, GType
XYdatatype);
If this function is never called, backwards compatibility is assured by
assuming that
XYdatatype == G_TYPE_FLOAT;
xstridebytes = ystridebytes = sizeof(float);
startpt = 0;
numpts = XYallocpts
But, if this function *is* called, the graph replaces the existing X and
Y with the new pointers, and it forces a redraw, and updates any rulers
as needed.
For the example of a realtime plot of something where new data is coming
in and the graph is adding points to the rightward end, the calling
program could allocate an array at the beginning large enough to hold
the final size (XYallocpts), but by calling this function periodically
with numpts incremented to reflect number of points currently available,
it would have the effect of adding new data to the right of the
screen. No new allocations, and no unnecessary copying of arrays.
If you wanted to scroll the data, you could keep numpts fixed once it
reached your number_of_points_to_graph, and then start incrementing
startpt such that the most recently acquired point was startpt + numpts
- 1...
If you need to realloc() a larger array, then this function will note
the change in the XYallocpts value, or the X or Y pointers, and realize
that new arrays are being passed...
If the arrays were actually ring buffers, then calling
...
gtk_databox_graph_data_update(ptsgraph, 10, Xpts, Ypts, 0, 10,
sizeof(float), sizeof(float), G_TYPE_FLOAT);
Ypts[9] = get_data_from_adc();
gtk_databox_graph_data_update(ptsgraph, 10, Xpts, Ypts, 1, 10,
sizeof(float), sizeof(float), G_TYPE_FLOAT);
Ypts[0] = get_data_from_adc();
gtk_databox_graph_data_update(ptsgraph, 10, Xpts, Ypts, 2, 10,
sizeof(float), sizeof(float), G_TYPE_FLOAT);
Ypts[1] = get_data_from_adc();
gtk_databox_graph_data_update(ptsgraph, 10, Xpts, Ypts, 3, 10,
sizeof(float), sizeof(float), G_TYPE_FLOAT);
Ypts[2] = get_data_from_adc();
...
shows 10 points each time but the latest point is always on the right of
the graph. The X Axis could be kept constant, or the application could
update it if so desired by modifying Xpts[x].
This scheme is also an opportunity to add support for types other than
float... I'd suspect most of the time, GtkDatabox is being grafted onto
another already developed application that has it's own data
representations. It's annoying to have to convert doubles/ints/whatever
to floats for example. Most of what needs to be done to support
non-float data is in one function: gtk_databox_values_to_pixels... and
the modification is not hard.
What do people think?
Sincerely,
--
Amish
On 11/12/2012 02:30 PM, Johannes Deutsch wrote:
Hi all,
I'm very thankful for all of your echos. I received interesting
suggestions and was particularly pleased that the mailing list is very
active!
I already wrote a little demo that simulates plotting of data in
realtime. By now the code is messy but i will pretty it up
tomorrow and post i on this list.
Maybe it is a valid example. If not i would be thankful for any
comments to improve it further...
With best regards and thanks for this great project
_______________________________________________
gtkdatabox-list mailing list
gtkdatabox-list gnome org
https://mail.gnome.org/mailman/listinfo/gtkdatabox-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]