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 &lt;=
stdio.h&gt;<br>
#include &lt;gtk/gtk.h&gt;<br>#include &lt;gdk/gdk.h&gt;<br>#include &lt;gt=
kextra/gtkextra.h&gt;<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, &quot;x&quot;, px2);<br>=A0=A0=A0 =
gtk_plot_data_dimension_set_points(second_dataset, &quot;y&quot;, 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(&quot;red&quot=
;, &amp;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, &amp;color, &amp;color);<br>=A0=A0=A0 gtk_=
plot_data_set_line_attributes(second_dataset, GTK_PLOT_LINE_SOLID, 0, 0, 1,=
 &amp;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&quot;, px1);<br>
=A0=A0=A0 gtk_plot_data_dimension_set_points(dataset, &quot;y&quot;, 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(&quot;blue&quot;, &amp;color);<br>=A0=A0=A0 g=
dk_color_alloc(gdk_colormap_get_system(), &amp;color); <br><br>=A0=A0=A0 gt=
k_plot_data_set_symbol(dataset, GTK_PLOT_SYMBOL_EMPTY, GTK_PLOT_SYMBOL_FILL=
ED, 5, 2, &amp;color, &amp;color);<br>
=A0=A0=A0 gtk_plot_data_set_line_attributes(dataset, GTK_PLOT_LINE_SOLID, 0=
, 0, 1, &amp;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(&amp;argc, &amp;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), &quot;2 p=
lots in one graph&quot;);<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), &quot;destroy&quot;, 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 (&quot;gtk-cancel&quot;, tmp_toolbar_icon_size);<br>
=A0=A0=A0 button =3D (GtkWidget*)gtk_tool_button_new(tmp_image, (&quot;TEST=
&quot;));<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), &quot;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==--