Re: Adding and rendering additional data to exsisting plot
Andy Fletcher <[email protected]> Wed, 3 Nov 2010 13:18:41 -0700
| Newsgroups | gmane.comp.scigraphica.gtkextra |
|---|---|
| Message-ID | <[email protected]> |
--===============3920401018539808626== Content-Type: multipart/alternative; boundary=20cf30549dcb5ac22604942bbf4d --20cf30549dcb5ac22604942bbf4d Content-Type: text/plain; charset=ISO-8859-1 Arne, Thanks for the help. I added the plot_canvas_refresh and it all works now. Andy On Mon, Nov 1, 2010 at 11:05 PM, Arne Pagel <[email protected]> wrote: > try: > > gtk_plot_canvas_paint (GTK_PLOT_CANVAS(canvas)); > gtk_plot_canvas_refresh (GTK_PLOT_CANVAS(canvas)); > > -- > Arne > > > Andy Fletcher schrieb: > >> 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 >> >> >> ------------------------------------------------------------------------ >> >> >> ------------------------------------------------------------------------------ >> 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 >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Scigraphica-gtkextra mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/scigraphica-gtkextra >> > > --20cf30549dcb5ac22604942bbf4d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Arne,<br><br>Thanks for the help. I added the plot_canvas_refresh and it al= l works now.<br><br>Andy<br><br><div class=3D"gmail_quote">On Mon, Nov 1, 2= 010 at 11:05 PM, Arne Pagel <span dir=3D"ltr"><<a href=3D"mailto:arne@pa= gelnet.de">[email protected]</a>></span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt 0.8ex; borde= r-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">try:<div class=3D= "im"><br> =A0gtk_plot_canvas_paint (GTK_PLOT_CANVAS(canvas));<br></div> =A0gtk_plot_canvas_refresh (GTK_PLOT_CANVAS(canvas));<br> <br> --<br> Arne<br> <br> <br> Andy Fletcher schrieb:<br> <blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt 0.8ex; borde= r-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div></div><= div class=3D"h5"> Hi,<br> <br> 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= .<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 double= 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 <gtkextra/gtkextra.h><br> <br> <br> GtkWidget *active_plot;<br> GtkWidget *top_window;<br> GtkWidget *vbox1;<br> GtkPlotCanvasChild *child;<br> GtkWidget *canvas;<br> <br> <br> static void quit()<br> {<br> =A0 =A0gtk_main_quit();<br> }<br> <br> void on_button_clicked(GtkToolButton *toolbutton, gpointer user_data)<br> {<br> =A0 =A0GdkColor color;<br> =A0 =A0GtkPlotAxis *axis;<br> =A0 =A0GtkPlotData *second_dataset;<br> =A0 =A0gdouble height;<br> =A0 =A0gdouble width;<br> <br> =A0 =A0static gdouble px2[]=3D{0., -0.2, -0.4, -0.6, -0.8, -1.0};<br> =A0 =A0static gdouble py2[]=3D{.2, .4, .5, .35, .30, .40};<br> <br> =A0 =A0second_dataset =3D GTK_PLOT_DATA(gtk_plot_data_new());<br> =A0 =A0gtk_plot_add_data(GTK_PLOT(active_plot), second_dataset);<br> =A0 =A0gtk_widget_show(GTK_WIDGET(second_dataset));<br> =A0 =A0gtk_plot_data_dimension_set_points(second_dataset, "x", p= x2);<br> =A0 =A0gtk_plot_data_dimension_set_points(second_dataset, "y", p= y2);<br> =A0 =A0gtk_plot_data_set_numpoints(second_dataset, 6);<br> =A0 =A0gtk_plot_data_draw_points(second_dataset, 6);<br> =A0 =A0gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));<br> <br> =A0 =A0gdk_color_parse("red", &color);<br> =A0 =A0gdk_color_alloc(gdk_colormap_get_system(), &color);<br> <br> =A0 =A0gtk_plot_data_set_symbol(second_dataset, GTK_PLOT_SYMBOL_EMPTY, GTK= _PLOT_SYMBOL_FILLED, 5, 2, &color, &color);<br> =A0 =A0gtk_plot_data_set_line_attributes(second_dataset, GTK_PLOT_LINE_SOL= ID, 0, 0, 1, &color);<br> <br> =A0 =A0gtk_widget_show(GTK_WIDGET(active_plot));<br> }<br> <br> void build_first_plot()<br> {<br> =A0 =A0GdkColor color;<br> =A0 =A0GtkPlotAxis *axis;<br> =A0 =A0GtkPlotData *dataset;<br> <br> =A0 =A0static gdouble px1[]=3D{0., 0.2, 0.4, 0.6, 0.8, 1.0};<br> =A0 =A0static gdouble py1[]=3D{.2, .4, .5, .35, .30, .40};<br> <br> =A0 =A0dataset =3D GTK_PLOT_DATA(gtk_plot_data_new());<br> =A0 =A0gtk_plot_add_data(GTK_PLOT(active_plot), dataset);<br> =A0 =A0gtk_widget_show(GTK_WIDGET(dataset));<br> =A0 =A0gtk_plot_data_dimension_set_points(dataset, "x", px1);<br= > =A0 =A0gtk_plot_data_dimension_set_points(dataset, "y", py1);<br= > =A0 =A0gtk_plot_data_set_numpoints(dataset, 6);<br> =A0 =A0gtk_plot_data_draw_points(dataset, 6);<br> =A0 =A0gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));<br> <br> =A0 =A0gdk_color_parse("blue", &color);<br> =A0 =A0gdk_color_alloc(gdk_colormap_get_system(), &color);<br> <br> =A0 =A0gtk_plot_data_set_symbol(dataset, GTK_PLOT_SYMBOL_EMPTY, GTK_PLOT_S= YMBOL_FILLED, 5, 2, &color, &color);<br> =A0 =A0gtk_plot_data_set_line_attributes(dataset, GTK_PLOT_LINE_SOLID, 0, = 0, 1, &color);<br> <br> =A0 =A0gtk_widget_show(GTK_WIDGET(active_plot));<br> }<br> <br> <br> <br> int main(int argc, char *argv[])<br> {<br> =A0 =A0GtkWidget *button; =A0 =A0 =A0GtkWidget *tmp_image;<br> =A0 =A0GtkIconSize tmp_toolbar_icon_size;<br> <br> =A0 =A0gtk_init(&argc, &argv);<br> <br> =A0 =A0/* Top level window*/<br> =A0 =A0top_window =3D gtk_window_new(GTK_WINDOW_TOPLEVEL);<br> =A0 =A0gtk_window_set_title(GTK_WINDOW(top_window), "2 plots in one g= raph");<br> =A0 =A0gtk_window_set_default_size(GTK_WINDOW(top_window), 550, 350);<br> =A0 =A0gtk_container_set_border_width(GTK_CONTAINER(top_window), 0);<br> =A0 =A0g_signal_connect(GTK_OBJECT(top_window), "destroy", G_CAL= LBACK(quit), NULL);<br> <br> =A0 =A0/* vbox that will store Button and Canvas_plot*/<br> =A0 =A0vbox1 =3D gtk_vbox_new(FALSE, 0);<br> =A0 =A0gtk_container_add(GTK_CONTAINER(top_window), vbox1);<br> <br> =A0 =A0tmp_image =3D gtk_image_new_from_stock ("gtk-cancel", tmp= _toolbar_icon_size);<br> =A0 =A0button =3D (GtkWidget*)gtk_tool_button_new(tmp_image, ("TEST&q= uot;));<br> =A0 =A0gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FALSE, 0);<br> =A0 =A0g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBAC= K(on_button_clicked), NULL);<br> <br> =A0 =A0canvas =3D gtk_plot_canvas_new(550, 325, 1.0);<br> =A0 =A0/* Set Canvas Flags (Select Region=3DFALSE; Select_Item=3DTRUE; Dra= g-n-Drop_Item=3DTRUE */<br> =A0 =A0GTK_PLOT_CANVAS_SET_FLAGS(GTK_PLOT_CANVAS(canvas), GTK_PLOT_CANVAS_= DND_FLAGS);<br> =A0 =A0gtk_box_pack_start(GTK_BOX(vbox1), canvas, FALSE, FALSE, 0);<br> <br> =A0 =A0active_plot =3D gtk_plot_new(NULL);<br> <br> =A0 =A0/* Set the graph boundaries */<br> =A0 =A0gtk_plot_set_range(GTK_PLOT(active_plot), -1., 1., -1., 1.4);<br> =A0 =A0gtk_plot_legends_move(GTK_PLOT(active_plot), .500, .05);<br> =A0 =A0gtk_plot_set_legends_border(GTK_PLOT(active_plot), 0, 0);<br> =A0 =A0gtk_plot_axis_hide_title(gtk_plot_get_axis(GTK_PLOT(active_plot), G= TK_PLOT_AXIS_TOP));<br> =A0 =A0gtk_plot_axis_show_ticks(gtk_plot_get_axis(GTK_PLOT(active_plot), G= TK_PLOT_AXIS_BOTTOM), 15, 3);<br> <br> =A0 =A0gtk_plot_set_ticks(GTK_PLOT(active_plot), GTK_PLOT_AXIS_X, 1., 1);<= br> =A0 =A0gtk_plot_set_ticks(GTK_PLOT(active_plot), GTK_PLOT_AXIS_Y, 1., 1);<= br> =A0 =A0gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(active_plot), = GTK_PLOT_AXIS_TOP), TRUE);<br> =A0 =A0gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(active_plot), = GTK_PLOT_AXIS_RIGHT), TRUE);<br> =A0 =A0gtk_plot_x0_set_visible(GTK_PLOT(active_plot), TRUE);<br> =A0 =A0gtk_plot_y0_set_visible(GTK_PLOT(active_plot), TRUE);<br> <br> =A0 =A0child =3D gtk_plot_canvas_plot_new(GTK_PLOT(active_plot));<br> =A0 =A0gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(canvas), child, .15, .06,= .90, .85);<br> <br> =A0 =A0build_first_plot();<br> <br> =A0 =A0gtk_widget_show_all(top_window);<br> <br> =A0 =A0gtk_main();<br> =A0 =A0return 0;<br> <br> }<br> <br> Any help would be greatly appreciated.<br> <br> Andy<br> <br> <br></div></div> ------------------------------------------------------------------------<br= > <br> ---------------------------------------------------------------------------= ---<br> Nokia and AT&T present the 2010 Calling All Innovators-North America co= ntest<br> Create new apps & games for the Nokia N8 for consumers in =A0U.S. and C= anada<br> $10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketin= g<br> Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store <a= href=3D"http://p.sf.net/sfu/nokia-dev2dev" target=3D"_blank">http://p.sf.n= et/sfu/nokia-dev2dev</a><br> <br> <br> ------------------------------------------------------------------------<br= > <br> _______________________________________________<br> Scigraphica-gtkextra mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_bl= ank">[email protected]</a><br> <a href=3D"https://lists.sourceforge.net/lists/listinfo/scigraphica-gtkextr= a" target=3D"_blank">https://lists.sourceforge.net/lists/listinfo/scigraphi= ca-gtkextra</a><br> </blockquote> <br> </blockquote></div><br> --20cf30549dcb5ac22604942bbf4d-- --===============3920401018539808626== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------------ Achieve Improved Network Security with IP and DNS Reputation. Defend against bad network traffic, including botnets, malware, phishing sites, and compromised hosts - saving your company time, money, and embarrassment. Learn More! http://p.sf.net/sfu/hpdev2dev-nov --===============3920401018539808626== 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 --===============3920401018539808626==--