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