Introduction

La bibliothèque graphics a été écrite par Xavier Leroy pour le langage Caml. Elle a été adaptée par Christophe Prieur.

La bibliothèque graphics devrait fonctionner sur tout système Unix (Linux, FreeBSD, OpenBSD, MacOS X...)

Instructions d'utilisation

Les fonctions de la bibliothèque graphics sont accessibles depuis l'en-tête graphics.h. Lorsque l'on compile un programme qui utilise graphics.h, l'en-tête X11/Xlib.h doit également être accessible.

Il faut lier le programme avec la bibliothèque graphics ainsi que la bibliothèque X11. Cela donne quelque chose comme :

gcc -O -Wall -W -ansi -pedantic -I /usr/X11R6/include -I /repertoire/de/la/libgraphics/include -c programme-graphique.c
gcc -o programme-graphique programme-graphique.o -L /usr/X11R6/lib -L /repertoire/de/la/libgraphics -lgraphics -lX11
Remplacer /repertoire/de/la/libgraphics/include par le répertoire contenant le fichier graphics.h, et /repertoire/de/la/libgraphics/include par le répertoire contenant le fichier graphics.a. Par exemple, avec l'installation par défaut :

gcc -O -Wall -W -ansi -pedantic -I /usr/X11R6/include -I /usr/local/include -c programme-graphique.c
gcc -o programme-graphique programme-graphique.o -L /usr/X11R6/lib -L /usr/local/lib -lgraphics -lX11

Installation

Vous pouvez télécharger la bibliothèque graphics ici-même (l'URL originale). Téléchargez également la documentation, qui est le fichier que vous êtes en train de lire (l'URL originale). Pour compiler la bibliothèque, extrayez les fichiers de l'archive à l'aide de la commande tar -xzf graphics.tar.gz. Placez-vous dans le répertoire Libgraphics et tapez make. Si cela échoue, vous devrez probablement installer les bibliothèques X Window ou changer l'emplacement où le Makefile les cherche. Si make réussit, tapez make test puis ./test pour vérifier que la bibliothèque graphics fonctionne. Tapez make install pour installer la bibliothèque sous /usr/local. Vous pouvez également éditer les lignes INCLUDE=... et LIB=... pour choisir un autre lieu d'installation.

Description des fonctions de la bibliothèque

Gestion de la fenêtre

void gr_open_graph(char* arg);
Ouvre une fenêtre graphique. L'argument indique l'emplacement et la taille de la fenêtre. On peut utiliser la chaîne vide pour arg. Si on le souhaite, arg permet de spécifier la taille et la position de la fenêtre, par exemple pour une fenêtre de largeur 400 et de hauteur 200 : opengraph(" 400x200") (noter l'espace initiale !).

void gr_close_graph(void);
Ferme la fenêtre graphique. En l'absence d'appel à cette fonction, la fenêtre graphique disparaît quand le programme se termine.

void gr_clear_graph(void);
Efface tout le contenu de la fenêtre graphique.

int gr_size_x(void);
int gr_size_y(void);

Renvoient respectivement la largeur et la hauteur de la fenêtre.

Fonctions de dessin

Dessin de base

Le point en bas à gauche de la fenêtre graphique a les coordonnées (0, 0). À tout instant, la bibliothèque maintient une position courante.

void gr_plot(int x, int y);
Affiche un point aux coordonnées (x, y).

void gr_moveto(int x, int y);
Déplace la position courante vers les coordonnées (x, y). Cette fonction n'a pas d'effet direct sur l'affichage.

void gr_current_point(int *x, int *y);
Place les coordonnées de la position courante à l'endroit pointé par x et y.

void gr_lineto(int x, int y);
Trace une ligne de la position courante aux coordonnées (x, y). La nouvelle position courante est (x, y).

Polygones et courbes

Ces fonctions ne modifient pas la position courante.

void gr_draw_poly(int* array, int npoints);
Dessine un polygone de sommets (array[0], array[1]), (array[2], array[3]), ..., (array[2*npoints-1], array[2*npoints]).

void gr_draw_circle(int x, int y, int r);
Dessine un cercle de centre (x, y) et de rayon r.

void gr_draw_ellispe(int x, int y, int rx, int ry);
Dessine une ellipse de centre (x, y), de rayon horizontal rx et de rayon vertical ry.

void gr_draw_arc(int x, int y, int rx, int ry, int a1, int a2);
Dessine un arc d'ellipse de centre (x, y), de rayon horizontal rx et de rayon vertical ry, allant de l'angle a1 à l'angle a2 (en degrés).

Remplissage

void gr_fill_rect(int x, int y, int w, int h);
Dessine un rectangle plein de sommet (x, y), de largeur w et de hauteur h.

void gr_fill_poly(int* array, int npoints);
Dessine un Polygone rempli.

void gr_fill_circle(int x, int y, int r);
void gr_fill_ellipse(int x, int y, int rx, int ry);
void gr_fill_arc(int x, int y, int rx, int ry, int a1, int a2);
Ces fonctions dessinent respectivement un cercle plein, une ellipse pleine, un secteur d'ellipse.

Attributs de dessin

void gr_set_line_width(int width);
Règle la largeur du trait pour le dessin de lignes.

Couleurs

typedef unsigned long color;

#define RGB(r,g,b) (((r) << 16) + ((g) << 8) + b)

#define black   0x000000
#define white   0xFFFFFF
#define red     0xFF0000
#define green   0x00FF00
#define blue    0x0000FF
#define yellow  0xFFFF00
#define cyan    0x00FFFF
#define magenta 0xFF00FF

#define background white
#define foreground black

void gr_set_color(color c);

color gr_get_color(int x, int y);
Ces deux fonctions permettent respectivement de choisir la couleur pour les dessins futurs, et d'obtenir la couleur d'un point. Exemples :
gr_set_color(white); /* Dessine en blanc */
gr_set_color(yellow); /* Dessine en jaune */
gr_set_color(RGB(128,128,128)); /* Dessine en gris */

Affichage de texte

void gr_set_font(char *fontname);
Change la police de caractères qui sera utilisée pour dessiner du texte.

void gr_draw_char(char chr);
Dessine le caractère chr à la position courante.

void gr_draw_string(char *str);
Dessine la chaîne de caractères str à partir de la position courante.

void gr_text_size(char *str, int *w, int *h);
Calcule la largeur en pixels du texte str dans la police courante.

Événements : lecture du clavier et de la souris

struct status {
  int mouse_x;
  int mouse_y;
  Bool button;
  Bool key_pressed;
  char key;
};

#define BUTTON_DOWN  0x00000001
#define BUTTON_UP    0x00000002
#define KEY_PRESSED  0x00000004
#define MOUSE_MOTION 0x00000008
#define POLL         0x00000010

struct status* gr_wait_event(int eventmask);
La fonction gr_wait_event suspend le programme jusqu'à ce qu'un des événements spécifiés se produise. Elle renvoie des informations sur l'état du clavier et de la souris. Exemples :
gr_wait_event(BUTTON_DOWN); /* attend un clic de souris */
gr_wait_event(BUTTON_DOWN | BUTTON_UP | MOUSE_MOTION); /* attend un clic, un déclic ou un déplacement de souris */
gr_wait_event(KEY_PRESSED); /* attend une frappe de touche */
char * status; status = gr_wait_event(POLL); /* lit l'état du clavier et de la souris sans attendre */

void gr_mouse_pos(int *x, int *y);
Place aux adresses données la position courante de la souris.

Bool gr_button_down(void);
Teste si au moins un bouton de la souris est enfoncé.

Bool gr_key_pressed(void);
Teste si une touche est enfoncée.

char gr_read_key(void);
Attend une frappe de touche et renvoie la touche enfoncée.

Exemple

Le programme hexagone ouvre une fenêtre graphique, dessine un hexagone régulier, et attend que l'utilisateur appuie sur une touche.
Last modified: Fri Oct 11 22:39:05 CEST 2002