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">&lt;<a href=3D"mailto:arne@pa=
gelnet.de">[email protected]</a>&gt;</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 &lt;stdio.h&gt;<br>
#include &lt;gtk/gtk.h&gt;<br>
#include &lt;gdk/gdk.h&gt;<br>
#include &lt;gtkextra/gtkextra.h&gt;<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, &quot;x&quot;, p=
x2);<br>
 =A0 =A0gtk_plot_data_dimension_set_points(second_dataset, &quot;y&quot;, 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(&quot;red&quot;, &amp;color);<br>
 =A0 =A0gdk_color_alloc(gdk_colormap_get_system(), &amp;color);<br>
<br>
 =A0 =A0gtk_plot_data_set_symbol(second_dataset, GTK_PLOT_SYMBOL_EMPTY, GTK=
_PLOT_SYMBOL_FILLED, 5, 2, &amp;color, &amp;color);<br>
 =A0 =A0gtk_plot_data_set_line_attributes(second_dataset, GTK_PLOT_LINE_SOL=
ID, 0, 0, 1, &amp;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, &quot;x&quot;, px1);<br=
>
 =A0 =A0gtk_plot_data_dimension_set_points(dataset, &quot;y&quot;, 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(&quot;blue&quot;, &amp;color);<br>
 =A0 =A0gdk_color_alloc(gdk_colormap_get_system(), &amp;color);<br>
<br>
 =A0 =A0gtk_plot_data_set_symbol(dataset, GTK_PLOT_SYMBOL_EMPTY, GTK_PLOT_S=
YMBOL_FILLED, 5, 2, &amp;color, &amp;color);<br>
 =A0 =A0gtk_plot_data_set_line_attributes(dataset, GTK_PLOT_LINE_SOLID, 0, =
0, 1, &amp;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(&amp;argc, &amp;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), &quot;2 plots in one g=
raph&quot;);<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), &quot;destroy&quot;, 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 (&quot;gtk-cancel&quot;, tmp=
_toolbar_icon_size);<br>
 =A0 =A0button =3D (GtkWidget*)gtk_tool_button_new(tmp_image, (&quot;TEST&q=
uot;));<br>
 =A0 =A0gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FALSE, 0);<br>
 =A0 =A0g_signal_connect(GTK_OBJECT(button), &quot;clicked&quot;, 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&amp;T present the 2010 Calling All Innovators-North America co=
ntest<br>
Create new apps &amp; 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==--