Help on first program

[email protected] Thu, 14 Jul 2005 14:26:07 -0300
Newsgroups gmane.comp.scigraphica.gtkextra
Message-ID <[email protected]>
Hello.

I am just trying to learn GtkPlot for drawing scientific
graphics. I am suffering with the lack of documentation,
especially for newcommers.

Based on some of the test programs found on the
distribution, I have written my first program, attached
below. There are some pieces of code I did not
understand completly. I would like to

1. receive comments on this program, especially if
   something is wrong or could be done better

2. understand the meaning of the second parameter of
   the function call

      gtk_plot_data_draw_points(dataset, 1)

3. receive help on how to label and tip the bottom and left
   axes

Regards,

Romildo

---------------------
WEBMAIL UBER INTERNET
plot.c (text/x-csrc, 2.7 KB)
/* plot.c */

#include <gtk/gtk.h>
#include <gtkextra/gtkplot.h>
#include <gtkextra/gtkplotcanvas.h>
#include <gtkextra/gtkplotcanvasplot.h>
#include <gtkextra/gtkplotdata.h>

#define NPOINTS 20

void quit()
{
   gtk_main_quit();
}

int main(int argc, char *argv[])
{
   GtkWidget *window;
   GtkWidget *vbox;
   GtkWidget *scroll;
   GtkWidget *button;
   GtkWidget *canvas;
   GtkWidget *plot;
   GtkPlotAxis *axis_x;
   GtkPlotAxis *axis_y;
   GtkPlotCanvasChild *child;
   GtkPlotData *dataset;

   gdouble px[NPOINTS];
   gdouble py[NPOINTS];

   int i;

   gtk_init(&argc, &argv);

   /* main window */
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title(GTK_WINDOW(window), "Plot");
   gtk_container_border_width(GTK_CONTAINER(window), 0);
   gtk_widget_set_size_request(window, 430, 430);
   g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(quit), NULL);
   gtk_widget_show(window);

   /* vertical box */
   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_add(GTK_CONTAINER(window), vbox);
   gtk_widget_show(vbox);

   /* quit button */
   button = gtk_button_new_with_label("Quit");
   g_signal_connect_swapped(G_OBJECT(button), "clicked",
			    G_CALLBACK(gtk_widget_destroy),
			    G_OBJECT(window));
   gtk_box_pack_end(GTK_BOX(vbox), button, FALSE, FALSE, 0);
   gtk_widget_show(button);

   /* scrolled window */
   scroll = gtk_scrolled_window_new(NULL, NULL);
   gtk_container_set_border_width(GTK_CONTAINER (scroll), 0);
   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
   gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0);
   gtk_widget_show(scroll);
   
   /* canvas */
   canvas = gtk_plot_canvas_new(400, 400, 1.0);
   gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), canvas);
   gtk_widget_show(canvas);

   /* plot */
   plot = gtk_plot_new(NULL);
   gtk_plot_set_range(GTK_PLOT(plot), 0, NPOINTS - 1, 0, NPOINTS - 1);
   gtk_plot_set_ticks(GTK_PLOT(plot), GTK_PLOT_AXIS_X, 2, 1);
   gtk_plot_set_ticks(GTK_PLOT(plot), GTK_PLOT_AXIS_Y, 2, 1);

   /* plot dataset */
   child = gtk_plot_canvas_plot_new(GTK_PLOT(plot));
   gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(canvas), child, 0.02, 0.02, 0.98, 0.98);
   gtk_widget_show(plot);

   for (i = 0; i < NPOINTS; i++)
      {
 	 px[i] = i;
 	 py[i] = rand() % NPOINTS;
      }
   
   dataset = GTK_PLOT_DATA(gtk_plot_data_new());
   gtk_plot_add_data(GTK_PLOT(plot), dataset);
   gtk_plot_data_set_points(dataset, px, py, NULL, NULL, NPOINTS);
   gtk_plot_data_draw_points(dataset, 1);
   gtk_widget_show(GTK_WIDGET(dataset));

   gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));
   gtk_plot_canvas_refresh(GTK_PLOT_CANVAS(canvas));
   
   gtk_main();

   return 0;
}