document original : http://para.inria.fr/~peskine/enseignement/iup-2002/graphics-doc.html

Introduction

La bibliothïiuml;¿½ue graphics a ïiuml;¿½ïiuml;¿½ïiuml;¿½rite par Xavier Leroy pour le langage Caml. Elle a ïiuml;¿½ïiuml;¿½adaptïiuml;¿½ par Christophe Prieur.

La bibliothïiuml;¿½ue graphics devrait fonctionner sur tout systïiuml;¿½e Unix (Linux, FreeBSD, OpenBSD, MacOS X...)

Instructions d'utilisation

Les fonctions de la bibliothïiuml;¿½ue graphics sont accessibles depuis l'en-tïiuml;¿½e graphics.h. Lorsque l'on compile un programme qui utilise graphics.h, l'en-tïiuml;¿½e X11/Xlib.h doit ïiuml;¿½alement ïiuml;¿½re accessible.

Il faut lier le programme avec la bibliothïiuml;¿½ue graphics ainsi que la bibliothïiuml;¿½ue 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ïiuml;¿½ertoire contenant le fichier graphics.h, et /repertoire/de/la/libgraphics/include par le rïiuml;¿½ertoire contenant le fichier graphics.a. Par exemple, avec l'installation par dïiuml;¿½aut :

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ïiuml;¿½ïiuml;¿½harger la bibliothïiuml;¿½ue graphics ici-mïiuml;¿½e (l'URL originale). Tïiuml;¿½ïiuml;¿½hargez ïiuml;¿½alement la documentation, qui est le fichier que vous ïiuml;¿½es en train de lire (l'URL originale). Pour compiler la bibliothïiuml;¿½ue, extrayez les fichiers de l'archive ïiuml;¿½l'aide de la commande tar -xzf graphics.tar.gz. Placez-vous dans le rïiuml;¿½ertoire Libgraphics et tapez make. Si cela ïiuml;¿½houe, vous devrez probablement installer les bibliothïiuml;¿½ues X Window ou changer l'emplacement o le Makefile les cherche. Si make rïiuml;¿½ssit, tapez make test puis ./test pour vïiuml;¿½ifier que la bibliothïiuml;¿½ue graphics fonctionne. Tapez make install pour installer la bibliothïiuml;¿½ue sous /usr/local. Vous pouvez ïiuml;¿½alement ïiuml;¿½iter les lignes INCLUDE=... et LIB=... pour choisir un autre lieu d'installation.

Description des fonctions de la bibliothïiuml;¿½ue

Gestion de la fenïiuml;¿½re

void gr_open_graph(char* arg);
Ouvre une fenïiuml;¿½re graphique. L'argument indique l'emplacement et la taille de la fenïiuml;¿½re. On peut utiliser la chaïiuml;¿½e vide pour arg. Si on le souhaite, arg permet de spïiuml;¿½ifier la taille et la position de la fenïiuml;¿½re, par exemple pour une fenïiuml;¿½re de largeur 400 et de hauteur 200 : opengraph(" 400x200") (noter l'espace initiale !).

void gr_close_graph(void);
Ferme la fenïiuml;¿½re graphique. En l'absence d'appel ïiuml;¿½cette fonction, la fenïiuml;¿½re graphique disparaïiuml;¿½ quand le programme se termine.

void gr_clear_graph(void);
Efface tout le contenu de la fenïiuml;¿½re graphique.

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

Renvoient respectivement la largeur et la hauteur de la fenïiuml;¿½re.

Fonctions de dessin

Dessin de base

Le point en bas ïiuml;¿½gauche de la fenïiuml;¿½re graphique a les coordonnïiuml;¿½s (0, 0). ïiuml;¿½tout instant, la bibliothïiuml;¿½ue maintient une position courante.

void gr_plot(int x, int y);
Affiche un point aux coordonnïiuml;¿½s (x, y).

void gr_moveto(int x, int y);
Dïiuml;¿½lace la position courante vers les coordonnïiuml;¿½s (x, y). Cette fonction n'a pas d'effet direct sur l'affichage.

void gr_current_point(int *x, int *y);
Place les coordonnïiuml;¿½s de la position courante ïiuml;¿½l'endroit pointïiuml;¿½par x et y.

void gr_lineto(int x, int y);
Trace une ligne de la position courante aux coordonnïiuml;¿½s (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 ïiuml;¿½l'angle a2 (en degrïiuml;¿½).

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ïiuml;¿½le 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ïiuml;¿½es qui sera utilisïiuml;¿½ pour dessiner du texte.

void gr_draw_char(char chr);
Dessine le caractïiuml;¿½e chr ïiuml;¿½la position courante.

void gr_draw_string(char *str);
Dessine la chaïiuml;¿½e de caractïiuml;¿½es str ïiuml;¿½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.

ïiuml;¿½ïiuml;¿½ements : 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'ïiuml;¿½ce qu'un des ïiuml;¿½ïiuml;¿½ements spïiuml;¿½ifiïiuml;¿½ se produise. Elle renvoie des informations sur l'ïiuml;¿½at 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ïiuml;¿½lic ou un dïiuml;¿½lacement de souris */
gr_wait_event(KEY_PRESSED); /* attend une frappe de touche */
char * status; status = gr_wait_event(POLL); /* lit l'ïiuml;¿½at du clavier et de la souris sans attendre */

void gr_mouse_pos(int *x, int *y);
Place aux adresses donnïiuml;¿½s la position courante de la souris.

Bool gr_button_down(void);
Teste si au moins un bouton de la souris est enfoncïiuml;¿½

Bool gr_key_pressed(void);
Teste si une touche est enfoncïiuml;¿½.

char gr_read_key(void);
Attend une frappe de touche et renvoie la touche enfoncïiuml;¿½.

Exemple

Le programme hexagone ouvre une fenïiuml;¿½re graphique, dessine un hexagone rïiuml;¿½ulier, et attend que l'utilisateur appuie sur une touche.
Last modified: Fri Oct 11 22:39:05 CEST 2002