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