document original : http://para.inria.fr/~peskine/enseignement/iup-2002/graphics-doc.html
La bibliothïiuml;¿½ue graphics devrait fonctionner sur tout systïiuml;¿½e Unix (Linux, FreeBSD, OpenBSD, MacOS X...)
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
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.
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.
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).
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;¿½).
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.
void gr_set_line_width(int width);
Rïiuml;¿½le la largeur du trait pour le dessin de lignes.
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 */
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.
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;¿½.