Adding and rendering additional data to exsisting plot
Andy Fletcher <[email protected]> Mon, 1 Nov 2010 18:40:57 -0700
| Newsgroups | gmane.comp.scigraphica.gtkextra |
|---|---|
| Message-ID | <[email protected]> |
--===============1809327591212636425==
Content-Type: multipart/alternative; boundary=00163628392426bae70494080434
--00163628392426bae70494080434
Content-Type: text/plain; charset=ISO-8859-1
Hi,
I have been plotting data using gtkplot. I am trying to add additional data
to an exsisting plot but the new data will not render unless I resize the
plot or double click on the plot. I would like this to happen automatically.
I have tried gtk_plot_refresh and gtk_plot_canvas_refresh with no success.
The test program below adds data to an exsisting plot when you click on the
button, but the new data will not render until I resize the plot or double
click on the plot.
Here is my source code:
#include <stdio.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gtkextra/gtkextra.h>
GtkWidget *active_plot;
GtkWidget *top_window;
GtkWidget *vbox1;
GtkPlotCanvasChild *child;
GtkWidget *canvas;
static void quit()
{
gtk_main_quit();
}
void on_button_clicked(GtkToolButton *toolbutton, gpointer user_data)
{
GdkColor color;
GtkPlotAxis *axis;
GtkPlotData *second_dataset;
gdouble height;
gdouble width;
static gdouble px2[]={0., -0.2, -0.4, -0.6, -0.8, -1.0};
static gdouble py2[]={.2, .4, .5, .35, .30, .40};
second_dataset = GTK_PLOT_DATA(gtk_plot_data_new());
gtk_plot_add_data(GTK_PLOT(active_plot), second_dataset);
gtk_widget_show(GTK_WIDGET(second_dataset));
gtk_plot_data_dimension_set_points(second_dataset, "x", px2);
gtk_plot_data_dimension_set_points(second_dataset, "y", py2);
gtk_plot_data_set_numpoints(second_dataset, 6);
gtk_plot_data_draw_points(second_dataset, 6);
gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));
gdk_color_parse("red", &color);
gdk_color_alloc(gdk_colormap_get_system(), &color);
gtk_plot_data_set_symbol(second_dataset, GTK_PLOT_SYMBOL_EMPTY,
GTK_PLOT_SYMBOL_FILLED, 5, 2, &color, &color);
gtk_plot_data_set_line_attributes(second_dataset, GTK_PLOT_LINE_SOLID,
0, 0, 1, &color);
gtk_widget_show(GTK_WIDGET(active_plot));
}
void build_first_plot()
{
GdkColor color;
GtkPlotAxis *axis;
GtkPlotData *dataset;
static gdouble px1[]={0., 0.2, 0.4, 0.6, 0.8, 1.0};
static gdouble py1[]={.2, .4, .5, .35, .30, .40};
dataset = GTK_PLOT_DATA(gtk_plot_data_new());
gtk_plot_add_data(GTK_PLOT(active_plot), dataset);
gtk_widget_show(GTK_WIDGET(dataset));
gtk_plot_data_dimension_set_points(dataset, "x", px1);
gtk_plot_data_dimension_set_points(dataset, "y", py1);
gtk_plot_data_set_numpoints(dataset, 6);
gtk_plot_data_draw_points(dataset, 6);
gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));
gdk_color_parse("blue", &color);
gdk_color_alloc(gdk_colormap_get_system(), &color);
gtk_plot_data_set_symbol(dataset, GTK_PLOT_SYMBOL_EMPTY,
GTK_PLOT_SYMBOL_FILLED, 5, 2, &color, &color);
gtk_plot_data_set_line_attributes(dataset, GTK_PLOT_LINE_SOLID, 0, 0, 1,
&color);
gtk_widget_show(GTK_WIDGET(active_plot));
}
int main(int argc, char *argv[])
{
GtkWidget *button;
GtkWidget *tmp_image;
GtkIconSize tmp_toolbar_icon_size;
gtk_init(&argc, &argv);
/* Top level window*/
top_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(top_window), "2 plots in one graph");
gtk_window_set_default_size(GTK_WINDOW(top_window), 550, 350);
gtk_container_set_border_width(GTK_CONTAINER(top_window), 0);
g_signal_connect(GTK_OBJECT(top_window), "destroy", G_CALLBACK(quit),
NULL);
/* vbox that will store Button and Canvas_plot*/
vbox1 = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(top_window), vbox1);
tmp_image = gtk_image_new_from_stock ("gtk-cancel",
tmp_toolbar_icon_size);
button = (GtkWidget*)gtk_tool_button_new(tmp_image, ("TEST"));
gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FALSE, 0);
g_signal_connect(GTK_OBJECT(button), "clicked",
G_CALLBACK(on_button_clicked), NULL);
canvas = gtk_plot_canvas_new(550, 325, 1.0);
/* Set Canvas Flags (Select Region=FALSE; Select_Item=TRUE;
Drag-n-Drop_Item=TRUE */
GTK_PLOT_CANVAS_SET_FLAGS(GTK_PLOT_CANVAS(canvas),
GTK_PLOT_CANVAS_DND_FLAGS);
gtk_box_pack_start(GTK_BOX(vbox1), canvas, FALSE, FALSE, 0);
active_plot = gtk_plot_new(NULL);
/* Set the graph boundaries */
gtk_plot_set_range(GTK_PLOT(active_plot), -1., 1., -1., 1.4);
gtk_plot_legends_move(GTK_PLOT(active_plot), .500, .05);
gtk_plot_set_legends_border(GTK_PLOT(active_plot), 0, 0);
gtk_plot_axis_hide_title(gtk_plot_get_axis(GTK_PLOT(active_plot),
GTK_PLOT_AXIS_TOP));
gtk_plot_axis_show_ticks(gtk_plot_get_axis(GTK_PLOT(active_plot),
GTK_PLOT_AXIS_BOTTOM), 15, 3);
gtk_plot_set_ticks(GTK_PLOT(active_plot), GTK_PLOT_AXIS_X, 1., 1);
gtk_plot_set_ticks(GTK_PLOT(active_plot), GTK_PLOT_AXIS_Y, 1., 1);
gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(active_plot),
GTK_PLOT_AXIS_TOP), TRUE);
gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(active_plot),
GTK_PLOT_AXIS_RIGHT), TRUE);
gtk_plot_x0_set_visible(GTK_PLOT(active_plot), TRUE);
gtk_plot_y0_set_visible(GTK_PLOT(active_plot), TRUE);
child = gtk_plot_canvas_plot_new(GTK_PLOT(active_plot));
gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(canvas), child, .15, .06, .90,
.85);
build_first_plot();
gtk_widget_show_all(top_window);
gtk_main();
return 0;
}
Any help would be greatly appreciated.
Andy
--00163628392426bae70494080434
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Hi,<br><br>I have been plotting data using gtkplot. I am trying to add addi=
tional data to an exsisting plot but the new data will not render unless I =
resize the plot or double click on the plot. I would like this to happen au=
tomatically. I have tried gtk_plot_refresh and gtk_plot_canvas_refresh with=
no success. <br>
<br>The test program below adds data to an exsisting plot when you click on=
the button, but the new data will not render until I resize the plot or do=
uble click on the plot.<br><br>Here is my source code:<br><br>#include <=
stdio.h><br>
#include <gtk/gtk.h><br>#include <gdk/gdk.h><br>#include <gt=
kextra/gtkextra.h><br><br><br>GtkWidget *active_plot;<br>GtkWidget *top_=
window;<br>GtkWidget *vbox1;<br>GtkPlotCanvasChild *child;<br>GtkWidget *ca=
nvas;<br>
<br><br>static void quit()<br>{<br>=A0=A0=A0 gtk_main_quit();<br>}<br><br>v=
oid on_button_clicked(GtkToolButton *toolbutton, gpointer user_data)<br>{<b=
r>=A0=A0=A0 GdkColor color;<br>=A0=A0=A0 GtkPlotAxis *axis;<br>=A0=A0=A0 Gt=
kPlotData *second_dataset;<br>
=A0=A0=A0 gdouble height;<br>=A0=A0=A0 gdouble width;<br><br>=A0=A0=A0 stat=
ic gdouble px2[]=3D{0., -0.2, -0.4, -0.6, -0.8, -1.0};<br>=A0=A0=A0 static =
gdouble py2[]=3D{.2, .4, .5, .35, .30, .40};<br><br>=A0=A0=A0 second_datase=
t =3D GTK_PLOT_DATA(gtk_plot_data_new());<br>
=A0=A0=A0 gtk_plot_add_data(GTK_PLOT(active_plot), second_dataset);<br>=A0=
=A0=A0 gtk_widget_show(GTK_WIDGET(second_dataset));<br>=A0=A0=A0 gtk_plot_d=
ata_dimension_set_points(second_dataset, "x", px2);<br>=A0=A0=A0 =
gtk_plot_data_dimension_set_points(second_dataset, "y", py2);<br>
=A0=A0=A0 gtk_plot_data_set_numpoints(second_dataset, 6);<br>=A0=A0=A0 gtk_=
plot_data_draw_points(second_dataset, 6);<br>=A0=A0=A0 gtk_plot_canvas_pain=
t(GTK_PLOT_CANVAS(canvas));<br><br>=A0=A0=A0 gdk_color_parse("red"=
;, &color);<br>=A0=A0=A0 gdk_color_alloc(gdk_colormap_get_system(), &am=
p;color); <br>
<br>=A0=A0=A0 gtk_plot_data_set_symbol(second_dataset, GTK_PLOT_SYMBOL_EMPT=
Y, GTK_PLOT_SYMBOL_FILLED, 5, 2, &color, &color);<br>=A0=A0=A0 gtk_=
plot_data_set_line_attributes(second_dataset, GTK_PLOT_LINE_SOLID, 0, 0, 1,=
&color);<br>
<br>=A0=A0=A0 gtk_widget_show(GTK_WIDGET(active_plot));<br>}<br><br>void bu=
ild_first_plot()<br>{<br>=A0=A0=A0 GdkColor color;<br>=A0=A0=A0 GtkPlotAxis=
*axis;<br>=A0=A0=A0 GtkPlotData *dataset;<br><br>=A0=A0=A0 static gdouble =
px1[]=3D{0., 0.2, 0.4, 0.6, 0.8, 1.0};<br>
=A0=A0=A0 static gdouble py1[]=3D{.2, .4, .5, .35, .30, .40};<br><br>=A0=A0=
=A0 dataset =3D GTK_PLOT_DATA(gtk_plot_data_new());<br>=A0=A0=A0 gtk_plot_a=
dd_data(GTK_PLOT(active_plot), dataset);<br>=A0=A0=A0 gtk_widget_show(GTK_W=
IDGET(dataset));<br>=A0=A0=A0 gtk_plot_data_dimension_set_points(dataset, &=
quot;x", px1);<br>
=A0=A0=A0 gtk_plot_data_dimension_set_points(dataset, "y", py1);<=
br>=A0=A0=A0 gtk_plot_data_set_numpoints(dataset, 6);<br>=A0=A0=A0 gtk_plot=
_data_draw_points(dataset, 6);<br>=A0=A0=A0 gtk_plot_canvas_paint(GTK_PLOT_=
CANVAS(canvas));<br>
<br>=A0=A0=A0 gdk_color_parse("blue", &color);<br>=A0=A0=A0 g=
dk_color_alloc(gdk_colormap_get_system(), &color); <br><br>=A0=A0=A0 gt=
k_plot_data_set_symbol(dataset, GTK_PLOT_SYMBOL_EMPTY, GTK_PLOT_SYMBOL_FILL=
ED, 5, 2, &color, &color);<br>
=A0=A0=A0 gtk_plot_data_set_line_attributes(dataset, GTK_PLOT_LINE_SOLID, 0=
, 0, 1, &color);<br><br>=A0=A0=A0 gtk_widget_show(GTK_WIDGET(active_plo=
t));<br>}<br><br><br><br>int main(int argc, char *argv[])<br>{<br>=A0=A0=A0=
GtkWidget *button;=A0=A0 <br>
=A0=A0=A0 GtkWidget *tmp_image;<br>=A0=A0=A0 GtkIconSize tmp_toolbar_icon_s=
ize;<br><br>=A0=A0=A0 gtk_init(&argc, &argv);<br><br>=A0=A0=A0 /* T=
op level window*/<br>=A0=A0=A0 top_window =3D gtk_window_new(GTK_WINDOW_TOP=
LEVEL);<br>=A0=A0=A0 gtk_window_set_title(GTK_WINDOW(top_window), "2 p=
lots in one graph");<br>
=A0=A0=A0 gtk_window_set_default_size(GTK_WINDOW(top_window), 550, 350);<br=
>=A0=A0=A0 gtk_container_set_border_width(GTK_CONTAINER(top_window), 0);<br=
>=A0=A0=A0 g_signal_connect(GTK_OBJECT(top_window), "destroy", G_=
CALLBACK(quit), NULL);<br>
<br>=A0=A0=A0 /* vbox that will store Button and Canvas_plot*/<br>=A0=A0=A0=
vbox1 =3D gtk_vbox_new(FALSE, 0);<br>=A0=A0=A0 gtk_container_add(GTK_CONTA=
INER(top_window), vbox1);<br><br>=A0=A0=A0 tmp_image =3D gtk_image_new_from=
_stock ("gtk-cancel", tmp_toolbar_icon_size);<br>
=A0=A0=A0 button =3D (GtkWidget*)gtk_tool_button_new(tmp_image, ("TEST=
"));<br>=A0=A0=A0 gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FA=
LSE, 0);<br>=A0=A0=A0 g_signal_connect(GTK_OBJECT(button), "clicked&qu=
ot;, G_CALLBACK(on_button_clicked), NULL);<br>
<br>=A0=A0=A0 canvas =3D gtk_plot_canvas_new(550, 325, 1.0);<br>=A0=A0=A0 /=
* Set Canvas Flags (Select Region=3DFALSE; Select_Item=3DTRUE; Drag-n-Drop_=
Item=3DTRUE */<br>=A0=A0=A0 GTK_PLOT_CANVAS_SET_FLAGS(GTK_PLOT_CANVAS(canva=
s), GTK_PLOT_CANVAS_DND_FLAGS);<br>
=A0=A0=A0 gtk_box_pack_start(GTK_BOX(vbox1), canvas, FALSE, FALSE, 0);<br><=
br>=A0=A0=A0 active_plot =3D gtk_plot_new(NULL);<br><br>=A0=A0=A0 /* Set th=
e graph boundaries */<br>=A0=A0=A0 gtk_plot_set_range(GTK_PLOT(active_plot)=
, -1., 1., -1., 1.4);<br>
=A0=A0=A0 gtk_plot_legends_move(GTK_PLOT(active_plot), .500, .05);<br>=A0=
=A0=A0 gtk_plot_set_legends_border(GTK_PLOT(active_plot), 0, 0);<br>=A0=A0=
=A0 gtk_plot_axis_hide_title(gtk_plot_get_axis(GTK_PLOT(active_plot), GTK_P=
LOT_AXIS_TOP));<br>
=A0=A0=A0 gtk_plot_axis_show_ticks(gtk_plot_get_axis(GTK_PLOT(active_plot),=
GTK_PLOT_AXIS_BOTTOM), 15, 3);<br><br>=A0=A0=A0 gtk_plot_set_ticks(GTK_PLO=
T(active_plot), GTK_PLOT_AXIS_X, 1., 1);<br>=A0=A0=A0 gtk_plot_set_ticks(GT=
K_PLOT(active_plot), GTK_PLOT_AXIS_Y, 1., 1);<br>
=A0=A0=A0 gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(active_plot)=
, GTK_PLOT_AXIS_TOP), TRUE);<br>=A0=A0=A0 gtk_plot_axis_set_visible(gtk_plo=
t_get_axis(GTK_PLOT(active_plot), GTK_PLOT_AXIS_RIGHT), TRUE);<br>=A0=A0=A0=
gtk_plot_x0_set_visible(GTK_PLOT(active_plot), TRUE);<br>
=A0=A0=A0 gtk_plot_y0_set_visible(GTK_PLOT(active_plot), TRUE);<br><br>=A0=
=A0=A0 child =3D gtk_plot_canvas_plot_new(GTK_PLOT(active_plot));<br>=A0=A0=
=A0 gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(canvas), child, .15, .06, .90=
, .85);<br><br>=A0=A0=A0 build_first_plot();<br>
<br>=A0=A0=A0 gtk_widget_show_all(top_window);<br><br>=A0=A0=A0 gtk_main();=
<br>=A0=A0=A0 return 0;<br><br>}<br><br>Any help would be greatly appreciat=
ed. <br><br>Andy<br>
--00163628392426bae70494080434--
--===============1809327591212636425==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
--===============1809327591212636425==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Scigraphica-gtkextra mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/scigraphica-gtkextra
--===============1809327591212636425==--