Re: Adding and rendering additional data to exsisting plot

Arne Pagel <[email protected]> Tue, 02 Nov 2010 07:05:46 +0100
Newsgroups gmane.comp.scigraphica.gtkextra
Message-ID <[email protected]>
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


------------------------------------------------------------------------------
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