Annexe B - Le module Camlgraph▲
B-1. Présentation▲
Le module Camlgraph est une adaptation du module graphics livré avec toutes les distributions de Objective Caml. Il reprend les mêmes fonctions avec les mêmes noms. La seule différence réside dans le fait que toutes les fonctions y sont décurryfiées.
Ce module permet de dessiner des points, des segments, des polygones, des cercles et de remplir certaines zones dans une fenêtre graphique. Cette fenêtre graphique peut être considérée comme un tableau de points repérés par leurs coordonnées (cf figure B.1). Ces coordonnées sont des nombres entiers. Seuls les points dont les deux coordonnées sont positives ou nulles et inférieures à la largeur et à la hauteur de la fenêtre sont visibles.
Le programme ci-dessous illustre une utilisation de ce module. Son exécution produit l'image présentée sur la figure B.2.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
(* auteur : EW *)
(* date : mai 2009 *)
(* objet : dessin de cercles *)
(* concentriques de *)
(* couleurs aléatoires *)
(* utilise le module Camlgraph *)
open
Camlgraph ;;
let
largeur =
600
(* largeur de la fenêtre graphique *)
and
hauteur =
400
(* hauteur de la fenêtre graphique *)
;;
let
n =
(hauteur -
20
) /
2
(* le nombre de cercles a dessiner *)
and
cx =
largeur /
2
(* abscisse du centre des cercles *)
and
cy =
hauteur /
2
(* ordonnée du centre des cercles *)
;;
begin
Random.init
(int_of_float
(Unix.time
()));
open_graph
(" "
^
string_of_int
(largeur)^
"x"
^
string_of_int
(hauteur)) ;
set_window_title
("Cercles"
) ;
for
i
=
1
to
n do
set_color
(rgb
(Random.int
(256
),Random.int
(256
),Random.int
(256
)));
draw_circle
(cx,cy,i
)
done
;
print_endline
"appuyez sur une touche pour terminer"
;
ignore
(read_key
()) ;
close_graph
()
end
B-2. Module Camlgraph▲
Auteur(s) : FIL
B-2-1. Gestion des fenêtres graphiques▲
val
open_graph
: string
->
unit
open_graph
(s) ouvre une fenêtre graphique dont les dimensions sont indiquées par la chaîne s Pour une ouverture de la fenêtre sur l'écran par défaut, la chaîne doit commencer par un espace.
val
close_graph
: unit ->
unit
close_graph
() ferme de la fenêtre graphique.
val
set_window_title
: string
->
unit
set_window_title
(s) donne un titre à la fenêtre graphique.
val
resize_window : int
*
int
->
unit
- resize_window (w,h) redimensionne la fenêtre graphique w = largeur, h = hauteur.
val
clear_graph
: unit ->
unit
clear_graph
() efface le contenu de la fenêtre graphique.
val
size_x
: unit ->
int
size_x
() donne la largeur de la fenêtre graphique.
val
size_y
: unit ->
int
size_y
() donne la hauteur de la fenêtre graphique.
B-2-2. Gestion des couleurs▲
type
color =
Graphics.color
- représentation des couleurs.
val
rgb
: int
*
int
*
int
->
color
rgb
(r,g,b) donne une couleur à partir de ses trois composantes rouge, vert, bleu.
val
set_color
: color ->
unit
set_color
(x) fixe la couleur courante.
val
background
: color
- couleur courante de l'arrière plan.
val
foreground
: color
- couleur courante de l'avant plan.
Couleurs prédéfinies
2.
3.
4.
5.
6.
7.
8.
val
black
: color
val
white
: color
val
red
: color
val
green
: color
val
blue
: color
val
yellow
: color
val
cyan
: color
val
magenta
: color
B-2-3. Point et dessin de lignes▲
val
plot
: int
*
int
->
unit
plot
(x,y) dessine un point de coordonnées (x,y).
val
point_color
: int
*
int
->
color
point_color
(x,y) donne la couleur du point de coordonnées (x,y).
val
moveto
: int
*
int
->
unit
moveto
(x,y) positionne le crayon au point de coordonnées (x,y).
val
rmoveto
: int
*
int
->
unit
rmoveto
(x,y) translate le crayon selon le vecteur de coordonnées (x,y).
val
current_x
: unit ->
int
current_x
() donne l'abscisse de la position courante du crayon.
val
current_y
: unit ->
int
current_y
() donne l'ordonnée de la position courante du crayon.
val
current_point
: unit ->
int
*
int
current_point
() donne les coordonnées de la position courante du crayon.
val
lineto
: int
*
int
->
unit
lineto
(x,y) trace un segment depuis la position courante jusqu'au point de coordonnées (x,y).
val
rlineto
: int
*
int
->
unit
rlineto
(x,y) trace un segment depuis la position courante selon le vecteur de coordonnées (x,y).
val
curveto
: (int
*
int
) *
(int
*
int
) *
(int
*
int
) ->
unit
curveto
(b,c,d) trace une courbe de Bézier du point courant jusqu'au point d avec les points b et c pour points de contrôle.
val
draw_rect
: int
*
int
*
int
*
int
->
unit
draw_rect
(x1,y1,x2,y2) dessine un rectangle dont le coin inférieur gauche a pour coordonnées (x1,y1) et le point supérieur droit (x2,y2).
val
draw_arc
: int
*
int
*
int
*
int
*
int
*
int
->
unit
draw_arc
(x,y,rx,ry,a1,a2) dessine un arc d'ellipse de centre (x,y), de rayon horizontal rx, de rayon vertical ry, entre les angles a1 et a2.
val
draw_ellipse
: int
*
int
*
int
*
int
->
unit
draw_ellipse
(x,y,rx,ry) dessine une ellipse de centre (x,y), de rayon horizontal rx, de rayon vertical ry.
val
draw_circle
: int
*
int
*
int
->
unit
draw_circle
(x,y,r) dessine un cercle de centre (x,y), de rayon r.
val
set_line_width
: int
->
unit
set_line_width
(n) fixe l'épaisseur des traits.
B-2-4. Texte▲
val
draw_char
: char
->
unit
draw_char
(c) dessine le caractère c à la position courante.
val
draw_string
: string
->
unit
draw_string
(s) dessine la chaîne de caractères s à la position courante.
val
set_font
: string
->
unit
set_font
(s) fixe la police pour dessiner les textes.
val
set_text_size
: int
->
unit
set_text_size
(n) fixe la taille des caractères pour dessiner les textes.
val
text_size
: string
->
int
*
int
text_size
(s) donne les dimensions du texte s s'il était dessiné avec les polices et tailles courantes.
B-2-5. Remplissage▲
val
fill_rect
: int
*
int
*
int
*
int
->
unit
fill_rect
(x,y,w,h) remplit le rectangle dont le coin inférieur gauche a pour coordonnées (x,y), de largeur w et de hauteur w, avec la couleur courante.
val
fill_arc
: int
*
int
*
int
*
int
*
int
*
int
->
unit
fill_arc
(x,y,rx,ry,a1,a2) remplit l'arc d'ellipse dont le centre a pour coordonnées (x,y), de rayon horizontal rx et de rayon vertical ry, entre les angles a1 et a2, avec la couleur courante.
val
fill_ellipse
: int
*
int
*
int
*
int
->
unit
fill_ellipse
(x,y,rx,ry) remplit l'ellipse dont le centre a pour coordonnées (x,y), de rayon horizontal rx et de rayon vertical ry, avec la couleur courante.
val
fill_circle
: int
*
int
*
int
->
unit
fill_circle
(x,y,r) remplit le cercle dont le centre a pour coordonnées (x,y), de rayon r, avec la couleur courante.