Drawing
Procédures de WindowTools permettant de dessiner.
Version: 1.0
Date: Le 13 août 1997
Rédaction: Jocelyn Houle
Direction: Jean Vaucher
Introduction
WindowTools permet de dessiner plusieurs formes: rectangles,
cercles, arcs, polygones quelconques. On peut également afficher du
texte comme dessin. Sur les stations Indigos, on peut même afficher en
couleur!
Pour ce faire, WindowTools dispose de plusieurs
procédures.
Pour bien montrer ces appels, nous avons créés un tutoriel
compilable... Compte tenu de la longueur, il n'est pas décrit
exhaustivement ici, mais vous pouvez toujours l'essayer... (Drawing.sim)
Informations sur les instructions de dessin
Les instructions de base sont:
|
- procedure DrawPoint(X, Y); integer X, Y;
- Trace un point à la coordonnée (x, y).
|
|
- procedure DrawLine( X1, Y1, X2, Y2 ); integer X1, Y1, X2,
Y2;
- Trace une ligne du point (x1, y1) au point (x2,
y2).
|
|
- procedure DrawRectangle( X, Y, Width, Height ); integer X1,
Y1, Width, Height;
- Trace un rectangle dont le coin supéieur gauche est au point
(x, y) et dont la taille est de WidthXHeight pixels
de long.
|
|
- procedure DrawCircle( X, Y, R); integer X, Y, R;
- Trace un cercle du centré au point (x1, y1) et ayant
un rayon de R.
|
|
- procedure DrawEllipse( X, Y, Width, Height); integer X, Y,
Width, Height;
- Trace une ellipse inscrite dans le rectangle définit par les
4 paramètres.
|
|
- procedure DrawArc( X, Y, Width, Height, Angle1, Angle2 );
integer X, Y, Width, Height, Angle1, Angle2;
- Trace un arc inscrit dans le rectangle définit par les 4
premiers paramètres et dont l'angle de départ est Angle1
et ayant Angle2 degrés d'amplitude.
Note: L'angle 0 est situé à droite de l'écran et
l'amplitude croît en sens anti-horaire (donc l'angle 90 est en haut de
l'écran). Référez-vous au tutoriel.
|
|
- procedure DrawPolygon( X_Coords, Y_Coords, n ); integer array
X_Coords, Y_Coords; integer n;
- Trace un polygone à n somments dont les
coordonnées sont définies par les tableaux d'entiers
X_Coords et Y_Coords.
|
Mais ces appels ne traceront que le trait contour des formes. Il existe
également des procédures Fill qui rempliront les
formes.
|
procedure FillRectangle( X, Y, Width, Height ); integer X1, Y1,
Width, Height; |
|
procedure FillCircle( X, Y, R); integer X, Y, R; |
|
procedure FillEllipse( X, Y, Width, Height); integer X, Y, Width,
Height; |
|
procedure FillArc( X, Y, Width, Height, Angle1, Angle2 ); integer
X, Y, Width, Height, Angle1, Angle2; |
|
procedure FillPolygon( X_Coords, Y_Coords, n ); integer array
X_Coords, Y_Coords; integer n; |
Il existe aussi des procédures d'inversion, servant à inverser les
pixels (i.e. un pixel noir devient blanc, etc.).
|
procedure InvertPoint(X, Y); integer X, Y; |
|
procedure InvertLine( X1, Y1, X2, Y2 ); integer X1, Y1, X2,
Y2; |
|
procedure InvertRectangle( X, Y, Width, Height ); integer X1, Y1,
Width, Height; |
|
procedure Invert; (inverse toute la fenêtre) |
|
procedure Flash; (fait clignoter une fois la
fenêtre) |
Il existe aussi des procédures destinées à effacer:
|
- procedure Clear;
- Vide complètement le contenu de la fenêtre.
|
|
- procedure ClearRectangle(X, Y, Width, Height); integer X, Y,
Width, Height;
- Vide complètement le contenu du rectangle défini.
|
On peut aussi copier des zônes rectanglaires dans une fenêtre:
|
- procedure CopyRectangle(srcx, srcy, width, height, destx,
desty); integer srcx, srcy, width, height, destx, desty;
- Copie le rectangle défini par les 4 premiers paramètres
au point (destx, desty).
|
Il existe aussi plusieurs appels servant à définir l'environnement
de dessin:
|
- procedure SetForeground(ColorName); text ColorName;
- Change le foreground pour la couleur définie par
ColorName.
Note: Si la couleur n'existe pas, une couleur aléatoire sera
utilisée.
Les codes RGB sont aussi possibles pourvu que le dièse (#) le
précède (ex: #FF0000 pour rouge).
|
|
- procedure SetBackground(ColorName); text ColorName;
- Change le background pour la couleur définie par
ColorName.
|
|
- procedure SetFill(ColorName); text ColorName;
- Change la couleur de remplissage pour la couleur définie par
ColorName.
|
|
- procedure SetLineWidth(Width); integer Width;
- Change la taille du trait pour qu'il ait Width pixels de
large.
|
On peut finalement dessiner du texte:
|
- procedure DrawText( x, y, t ); integer x, y; text t;
- Dessine le texte t aux coordonnées (x, y).
|
|
- procedure EraseText( x, y, t ); integer x, y; text t;
- Efface une zône correspondant au texte t aux
coordonnées (x, y).
|
|
- procedure DrawTextCenterIn( x, y, t ); integer x, y; text
t;
- Dessine le texte t centré aux coordonnées
(x, y).
|
|
- procedure DrawCenterText( t ); text t;
- Dessine le texte t centré dans la fenêtre.
|
|
- procedure DrawTextPos( x, y, t, hpos, vpos ); text t; integer
x, y, hpos, vpos
- Dessine le texte t aux coordonnées (x, y)
selon les paramètres d'alignement hpos et vpos.
Notes: hpos peut prendre les valeurs CenterPos,
LeftPos et RightPos. vpos peut prendre les valeurs
CenterPos, TopPos et BottomPos.
|
|
- procedure EraseTextPos( x, y, t, hpos, vpos ); text t;
integer x, y, hpos, vpos
- Efface la zône correspondant au texte t aux
coordonnées (x, y) selon les paramètres d'alignement
hpos et vpos.
|
|
- integer procedure WidthOfText( t ); text t;
- Retourne la longueur en pixels du texte t.
|
|
- integer procedure Font_Height;
- Retourne la hauteur en pixels du jeu de caractères.
|
|
- integer procedure SetTypeFace(typeface, size, bold, slanted);
text typeface; integer size; boolean bold, slanted;
- Définit la fonte courante selon les paramètres.
Typeface est le nom (ex: courrier, times,
helvetica). Size est la grandeur (ex: 8, 10, 12). Bold
et slanted sont respectivement les attributs de gras et
italic...
|
Notes concernant la couleur
WindowTools utilise le fichier rgb.txt comme
dictionnaire des couleurs. Sur JSP, on peut le trouver dans /usr/lib/X11. Ce
fichier répertorie tout simplement en codes RGB une série assez
impressionnante de couleurs (en anglais). La casse n'importe pas. Si la
couleur n'est pas répertoriée, une couleur aléatoire sera
utilisée.
On peut aussi définir la couleur que l'on veut à l'aide de codes
RGB. Le format de ces couleurs est simple: le premier caractère doit
être le caractère '#', puis on code chaque couleur avec 1
ou 2 caractères hexadécimaux (de 0 à F). Ainsi, bleu
serait #00F ou #0000FF.
Exemples de programmes
[Retour à l'index de WindowTools...]