Section courante

A propos

Section administrative du site

Graphiques APPLE : L'unité TURTLEGRAPHICS

Ce paquet graphique est appelé TurtleGraphics car il est basé sur les tortues imaginées par S. Papert et ses collègues du MIT (Massachusetts Institute of Technology). Pour rendre les graphiques faciles pour les enfants pouvant avoir des difficultés à comprendre les coordonnées cartésiennes, Papert et al. a inventé l'idée d'une tortue pouvant marcher sur une distance donnée et tourner selon un angle spécifié tout en traînant un crayon. Des algorithmes très simples dans ce système (que l'on pourrait appeler «coordonnées polaires relatives») peuvent donner des images plus intéressantes qu'un algorithme de même longueur en coordonnées cartésiennes. Avant de pouvoir utiliser des graphiques, ils doivent être activés en plaçant cette déclaration immédiatement après l'entête du programme :

  1. USES TURTLEGRAPHICS;

Si cette déclaration apparaît, les procédures et fonctions graphiques décrites dans cette section peuvent être utilisées. Cette déclaration indique au système Pascal d'obtenir les programmes graphiques de la bibliothèque. Le fichier SYSTEM.LIBRARY doit être en ligne lorsque le programme est Run ou eXecuted.

L'écran d'Apple

L'écran Apple est un rectangle, avec l'origine (X = 0, Y = 0) dans le coin inférieur gauche. Le coin supérieur droit a les coordonnées (X = 279, Y = 191). Étant donné que les points ne peuvent être placés qu'aux coordonnées intégrales, tous les paramètres des fonctions graphiques sont des INTEGER. Vous pouvez fournir un paramètre REAL; il sera arrondi à un INTEGER. Deux images d'écran différentes sont entreposées dans la mémoire d'Apple. L'un d'eux contient le texte que vous voyez lorsque l'ordinateur est allumé pour la première fois. L'autre contient une image graphique. Il existe trois procédures permettant de basculer entre les modes. Ce sont INITTURTLE, TEXTMODE et GRAFMODE.

Procédure INITTURTLE

Cette procédure n'a pas de paramètres. Il efface l'écran et permet à l'écran d'être utilisé pour des graphiques plutôt que du texte. C'est une bonne idée d'utiliser cette routine avant de démarrer des graphiques. La procédure INITTURTLE fait également quelques autres choses : la tortue est placée au centre de l'écran vers la droite, la couleur du crayon est définie sur NONE et la fenêtre d'affichage est définie sur plein écran.

Procédure GRAFMODE

La procédure GRAFMODE n'a pas de paramètres. Il fait basculer le moniteur ou le téléviseur pour afficher l'écran graphique, sans l'autre initialisation que la procédure INITTURTLE fait. Il est généralement utilisé pour afficher des graphiques dans un programme qui bascule entre les graphiques et l'affichage de texte.

Procédure TEXTMODE

Cette procédure n'a pas de paramètres. Il passe du mode graphique (obtenu par INITTURTLE ou GRAFMODE) à l'affichage du texte. Lorsque vous passez en mode texte, l'image que vous avez vue dans GRAFMODE n'est pas perdue, mais sera toujours là lorsque vous utiliserez GRAFMODE pour passer à nouveau en mode graphique (à moins que vous ne l'ayez délibérément modifiée.) À la fin de tout programme utilisant des graphiques, le système revient automatiquement en mode texte.

Procédure VIEWPORT

Cette procédure a la syntaxe suivante :

VIEWPORT (LEFT, RIGHT, BOTTOM, TOP)

où les quatre paramètres donnent les limites que vous voulez que VIEWPORT ait. Si vous n'utilisez pas cette procédure, l'Apple Pascal suppose que vous souhaitez utiliser tout l'écran pour vos graphiques. Il y a des occasions où il est pratique de n'utiliser qu'une partie de l'écran, tout en protégeant le reste d'une utilisation accidentelle. Par exemple, un petit carré près du milieu de l'écran peut être sélectionné comme fenêtre par l'instruction :

  1. VIEWPORT (130, 150, 86, 106)

Cet exemple permettrait le tracé à l'écran de tous les points dont les coordonnées X sont comprises entre 130 et 150 et dont les coordonnées Y sont comprises entre 86 et 106.

Lorsqu'une ligne est dessinée à l'aide de l'une des commandes graphiques, elle est automatiquement coupée de sorte que seule la partie se trouvant dans la fenêtre courante soit affichée. Les points dont les coordonnées ne sont pas dans la fenêtre courante, même les points n'étant pas du tout à l'écran, sont autorisés mais sont ignorés. Il permet des effets dramatiques. Il vous permet également de tracer hors écran de tout jour, et de ne jamais rien voir ou de recevoir un message d'erreur. Le découpage ne peut pas être désactivé.

Utilisation de la couleur : PENCOLOR

La procédure PENCOLOR définit la couleur du crayon. Il a la suivante :

PENCOLOR (COLOR)

Les couleurs les plus simples sont :

Constante Description
WHITE Blanc
WHITE1 Deux points de large, à utiliser avec le vert et le violet.
WHITE2 Deux points de large, à utiliser avec l'orange et le bleu.
BLACK Noir
BLACK1 Deux points de large, à utiliser avec le vert et le violet.
BLACK2 Deux points de large, à utiliser avec l'orange et le bleu.
GREEN Vert
VIOLET Violet
ORANGE Orange
BLUE Bleu

Si vous souhaitez que le dessin soit en GREEN (en vert), utilisez l'instruction :

  1. PENCOLOR (GREEN)

Il peut sembler étrange qu'à part blanc, noir, vert, violet, orange et bleu, il existe deux saveurs supplémentaires de Blanc et Noir. Celles-ci sont dues à la manière complexe (pour ne pas dire bizarre) dont les téléviseurs couleur produisent leur couleur, interagissant avec la technique qu'Apple utilise pour obtenir beaucoup de couleurs de manière très économique. Plutôt que d'expliquer comment tout cela fonctionne, il suffit de dire ici que Blanc et Noir donnent les lignes les plus fines possibles, et les couleurs donnent une ligne plus large afin de faire ressortir les couleurs. Si vous souhaitez créer une ligne blanche ou noire correspondant exactement à la position et à la largeur avec une ligne verte ou violette, vous devez utiliser WHITE1 ou BLACK1. Si vous souhaitez créer une ligne blanche ou noire correspondant exactement en position et en largeur à une ligne orange ou bleue, vous devez utiliser WHITE2 ou BLACK2. Sur un moniteur ou un téléviseur en noir et blanc, utilisez simplement WHITE et BLACK.

Les couleurs restantes ne sont pas vraiment des couleurs du tout mais sont tout aussi utiles:

Constante Description
NONE Le dessin avec cette couleur ne produit aucun changement à l'écran. Il est utile pour déplacer la tortue sans tracer de ligne.
REVERSE Le dessin avec REVERSE change le BLACK (noir) en WHITE (blanc) et le WHITE (blanc) en BLACK (noir). Il change aussi le WHITE1 à BLACK1, WHITE2 à BLACK2, GREEN à VIOLET et ORANGE à BLUE et vice versa. C'est plutôt une couleur magique. Il vous permet de dessiner, par exemple, une ligne sur un arrière-plan complexe et de la faire apparaître.
RADAR Cette couleur n'a pas été utilisée pour les applications futures.

Plus de couleur : FILLSCREEN

La procédure FILLSCREEN a la syntaxe suivante :

FILLSCREEN (COLOR)

La procédure FILLSCREEN remplit toute la fenêtre avec la couleur spécifiée. Par exemple :

  1. FILLSCREEN (BLACK)

efface la fenêtre. La déclaration suivante :

  1. FILLSCREEN (REVERSE)

fait un «négatif» du contenu de la fenêtre.

Lorsque vous appelez TURTLEGRAPHICS, un nouveau type de variable appelé SCREENCOLOR est automatiquement créé. Il est défini comme suit :

SCREENCOLOR = (NONE, WHITE, BLACK, REVERSE, RADAR, BLACK1, GREEN, VIOLET, WHITE1, BLACK2, ORANGE, BLUE, WHITE2);

Le SCREENCOLOR a toutes les caractéristiques habituelles d'un type Pascal. Il est utile lorsque vous déclarez une variable servant à entreposer une couleur.

Procédures graphiques de la tortue : TURNTO, TURN et MOVE

Enfin, nous revenons à la tortue imaginaire. Au départ, la tortue se trouve au centre de l'écran, tournée vers la droite. La tortue ne peut faire que deux choses : elle peut tourner ou marcher dans la direction à laquelle elle fait face. En marchant, il laisse une trace d'encre (!) dans la couleur actuelle du crayon. La procédure TURNTO a la syntaxe suivante :

TURNTO (DEGREES)

DEGREES est un entier étant traité modulo 360; ainsi sa valeur effective est comprise entre -359 et 359. Lorsqu'elle est invoquée, cette procédure fait tourner la tortue de son angle actuel à l'angle indiqué. 0 est exactement à droite et la rotation dans le sens antihoraire représente des angles croissants. Cette commande ne modifie jamais l'image à l'écran. La procédure TURN a la syntaxe suivante :

TURN (DEGREES)

DEGREES est à nouveau un entier qui est traité modulo 360; sa valeur effective est donc comprise entre -359 et 359. Cette procédure entraîne la rotation de la tortue dans le sens inverse des aiguilles d'une montre depuis sa direction actuelle jusqu'à l'angle spécifié. Il ne modifie pas l'image à l'écran. La procédure MOVE a la syntaxe suivante :

MOVE (DISTANCE)

DISTANCE est un entier. Cette procédure fait bouger la tortue dans la direction dans laquelle elle pointe une distance donnée par l'entier DISTANCE. Il laisse une trace dans la couleur actuelle du crayon. La séquence d'instructions :

  1. PENCOLOR (WHITE);
  2. MOVE (50);
  3. TURN (120);
  4. MOVE (50);
  5. TURN (120);
  6. MOVE (50) 

dessine un triangle équilatéral, par exemple.

Fonctions graphiques de la tortue : TURTLEX, TURTLEY, TURTLEANG ET SCREENBIT

Ces fonctions vous permettent d'interroger l'ordinateur sur l'état actuel de la tortue et de l'écran. Les fonctions TURTLEX et TURTLEY (sans paramètres) renvoient des entiers donnant les coordonnées X et Y actuelles de la tortue. La fonction TURTLEANG (sans paramètre) renvoie un entier donnant l'angle actuel de la tortue sous la forme d'un nombre positif de degrés. Notez que si vous utilisez TURNTO puis TURTLEANG , la valeur renvoyée par TURTLEANG peut ne pas être la même valeur que vous avez donnée avec TURNTO. Par exemple, après :

  1. TURNTO(-90) 

la fonction TURTLEANG retournera 270, pas -90. La fonction SCREENBIT a la syntaxe suivante :

SCREENBIT (X,Y)

X et Y sont les coordonnées de l'écran. Cette fonction renvoie la valeur TRUE de BOOLEAN si l'emplacement spécifié à l'écran n'est pas noir et FALSE s'il est noir. Il ne vous dit pas quelle est la couleur à ce moment-là, mais seulement s'il y a quelque chose de non noir ou non.

Graphiques cartésiens : la procédure MOVETO

Plus tôt, nous avons dit que dans les graphiques de tortues, la tortue ne peut marcher que dans la direction à laquelle elle fait face. Mais dans les graphiques cartésiens, la tortue peut se déplacer vers un point spécifié de l'écran sans tourner. La procédure MOVETO a la syntaxe suivante :

MOVETO (X, Y)

X et Y sont les coordonnées de l'écran. La procédure MOVETO déplace la tortue jusqu'au point (X, Y). Il crée une ligne dans la couleur actuelle du crayon à partir de la dernière position de la tortue jusqu'au point (X, Y). La direction de la tortue n'est pas modifiée par MOVETO.

Tableaux graphiques: la procédure DRAWBLOCK

La procédure DRAWBLOCK a la syntaxe :

DRAWBLOCK (SOURCE, ROWSIZE, XSKIP, YSKIP, WIDTH, HEIGHT, XSCREEN, YSCREEN, MODE)

où le paramètre SOURCE est le nom (sans indice) d'une variable qui doit être un PACKED ARRAY OF BOOLEAN bidimensionnel. Tous les autres paramètres sont des entiers. La procédure DRAWBLOCK traite chaque élément BOOLEAN de SOURCE comme un point - TRUE pour le blanc ou FALSE pour le noir. Il copie le tableau de «points» (ou une partie de celui-ci) de la mémoire sur l'écran pour former une image d'écran. La première dimension du tableau est le nombre de lignes du tableau; la deuxième dimension est le nombre d'éléments dans chaque ligne. Vous pouvez choisir de copier l'ensemble du tableau SOURCE, ou vous pouvez choisir de copier n'importe quelle «fenêtre» spécifiée du tableau, en utilisant uniquement les points du tableau de XSKIP à XSKIP + WIDTH et de YSKIP à YSKIP + HEIGHT. De plus, vous pouvez spécifier la position de l'écran de départ pour la copie, dans (XSCREEN, YSCREEN).

Paramètres Description
SOURCE Ce paramètre est le nom du PACKED ARRAY OF BOOLEAN bidimensionnel à copier.
SIZE Ce paramètre permet d'indiquer le nombre d'octets (pas de points) par ligne dans le tableau. Vous pouvez calculer cela à partir de la formule :
2*( (X+15) DIV 16 )
X est le nombre de points dans chaque ligne.
XSKIP Ce paramètre permet d'indiquer le nombre de points horizontaux à ignorer dans le tableau avant le démarrage du processus de copie.
YSKIP Ce paramètre permet d'indiquer le nombre de points verticaux du tableau à sauter avant de commencer le processus de copie. Notez que les copies sont effectuées en commençant par le bas, c'est-à-dire que la première ligne copiée à partir du tableau est la ligne du bas de la copie d'écran.
WIDTH Ce paramètre permet d'indiquer la largeur de nombreux points du tableau, à partir de XSKIP, étant utilisée.
HEIGHT Ce paramètre permet d'indiquer la hauteur de nombreux points du tableau, à partir de YSKIP, étant utilisée.
XSCREEN et YSCREEN Ces paramètres sont les coordonnées du coin inférieur gauche de la zone à copier. La WIDTH et la HEIGHT déterminent la taille du rectangle.
MODE Ce paramètre permet d'indiquer un mode dans l'intervalle de 0 à 15. Le MODE détermine ce qui apparaît sur la partie de l'écran spécifiée par les autres paramètres. C'est une option assez puissante, pouvant simplement envoyer du blanc ou du noir à l'écran, quel que soit le contenu du tableau, copier le tableau littéralement ou combiner le contenu du tableau et de l'écran et envoyer le résultat à l'écran. Le tableau suivant spécifie quelle opération est effectuée sur les données du tableau et à l'écran, et donc ce qui apparaît à l'écran. (La notation logique utilise A pour le tableau et S pour l'écran. Le symbole ~ signifie NOT.)
Valeur Description
0 Cette valeur permet de remplir la zone à l'écran avec du noir.
1 Cette valeur permet d'indiquer le NOR de tableau avec écran. (A NOR S).
2 Cette valeur permet d'indiquer un AND de tableau avec complément d'écran. (A AND ~ s).
3 Cette valeur permet d'indiquer la zone de complément à l'écran. (~S)
4 Cette valeur permet d'indiquer un AND de complément de tableau avec écran. (~A AND S)
5 Cette valeur permet d'indiquer un complément de tableau. (~A)
6 Cette valeur permet d'indiquer un XOR du tableau avec écran. (A XOR S)
7 Cette valeur permet d'indiquer un NAND de tableau avec écran. (A NAND S)
8 Cette valeur permet d'indiquer AND de tableau avec écran. (A AND S)
9 Cette valeur permet d'indiquer un EQUIVALENCE de tableau avec écran. (A = S)
10 Cette valeur permet d'indiquer une copie de tableau à l'écran. (A)
11 Cette valeur permet d'indiquer un OR de tableau avec complément d'écran. (A OR ~S)
12 Cette valeur permet d'indiquer que l'écran remplace l'écran. (S)
13 Cette valeur permet d'indiquer un OR de complément de tableau avec écran. (~A OR S)
14 Cette valeur permet d'indiquer un OR de tableau avec écran. (A OR S)
15 Cette valeur permet d'indiquer qu'il faut remplir la zone à l'écran avec du blanc.

Le programme de démonstration GRAFDEMO.TEXT, sur APPLE3:, contient de nombreux exemples d'utilisation des routines turtlegraphics. En particulier, les procédures BUTTER1,..., donnent des chaînes de caractères à la procédure STUFF, les convertissant en un PACKED ARRAY OF BOOLEAN nommé BUTTER; et la procédure FLUTTER utilise la routine DRAWBLOCK pour afficher le tableau BUTTER à l'écran.

En fait, le paramètre SOURCE peut être de n'importe quel type à l'exception d'un type FILE; DRAWBLOCK traite en réalité d'un tableau de bits en mémoire qui commence à l'adresse de SOURCE et dont la taille et l'organisation dépendent des autres paramètres. Par exemple, la procédure suivante utilise une seule variable BOOLEAN au lieu d'un tableau. La procédure trace un point unique sur l'écran aux coordonnées spécifiées (X, Y) :

  1. PROCEDURE PLOTDOT(X,Y:INTEGER);
  2. VAR DOT:BOOLEAN;
  3. BEGIN
  4.  DRAWBLOCK(DOT,1,0,0,1,1,X,Y,3)
  5. END;

Cependant, pour la plupart des programmes, le moyen le plus pratique de gérer le tableau consiste à utiliser un PACKED ARRAY OF BOOLEAN bidimensionnel comme décrit précédemment.

Texte comme graphique: WCHAR, WSTRING ET CHARTYPE

Trois procédures vous permettent de mettre des caractères sur l'écran graphique. Si la tortue est à (X, Y), vous pouvez utiliser ces procédures pour mettre un caractère ou une chaîne de caractères à l'écran avec son coin inférieur gauche à (X, Y). Chaque caractère occupe une zone rectangulaire de 7 points de large et 8 points de haut sur l'écran. Ces procédures utilisent un tableau entreposé dans le fichier SYSTEM.CHARSET sur la disquette APPLE1:. Ce tableau contient tous les caractères utilisés et est lu par la routine d'initialisation lorsque votre programme «USES TURTLEGRAPHICS». Si vous créez un tableau contenant votre propre ensemble de caractères, vous devez renommer l'ancien SYSTEM.CHARSET puis nommer votre nouveau tableau SYSTEM.CHARSET. Les procédures WSTRING et WCHAR utilisent la procédure DRAWBLOCK pour copier chaque caractère du tableau sur l'écran. Le paramètre MODE qu'ils utilisent est défini par la procédure CHARTYPE. La procédure WCHAR a la syntaxe suivante :

WCHAR (CH)

CH est une expression de type CHAR. Cette procédure place le caractère sur l'écran avec son coin inférieur gauche à l'emplacement actuel de la tortue. Lorsque cette procédure est utilisée, la tortue est déplacée vers la droite de 7 points par rapport à son ancienne position. Par exemple, cela met un X au centre de l'écran :

  1. PENCOLOR (NONE);
  2. MOVETO (137,90);
  3. WCHAR ('X')

Dans cet exemple, notez qu'il n'était pas nécessaire de spécifier une nouvelle couleur de crayon avant d'appeler WCHAR. Le caractère n'est pas tracé avec la couleur de crayon actuelle; cela dépend plutôt du MODE actuel, tout comme le fait DRAWBLOCK.

La valeur CHAR transmise à WCHAR est limitée aux 128 premiers caractères de l'ensemble ASCII.

La procédure WSTRING a la syntaxe suivante :

WSTRING (S)

S est une expression de type STRING. Une chaîne de caractères entière de caractères est placée sur l'écran avec le coin inférieur gauche du premier caractère à la position actuelle de la tortue. La tortue est décalée de 7 points vers la droite pour chaque caractère de la chaîne de caractères. Cette procédure appelle WCHAR pour chaque caractère de la chaîne de caractères.

Les caractères de la valeur STRING transmise à WSTRING sont limités aux 128 premiers caractères de l'ensemble ASCII. La procédure CHARTYPE a la syntaxe suivante :

CHARTYPE (MODE)

MODE est un entier sélectionnant l'un des 16 MODE décrits ci-dessus pour DRAWBLOCK. Le MODE définit la manière dont les caractères sont écrits à l'écran; il fonctionne pour WCHAR et WSTRING tout comme il fonctionne pour DRAWBLOCK. Le MODE par défaut est 10, ce qui place chaque caractère à l'écran en blanc, entouré d'un rectangle noir. Le MODE 5 est l'inverse du MODE 10: chaque caractère est en noir entouré d'un rectangle blanc. L'un des autres modes les plus utiles est le 6, effectuant un OU exclusif du caractère avec le contenu actuel de l'écran. Si vous utilisez MODE 6 pour dessiner un caractère ou une chaîne de caractères, puis le redessinez au même emplacement que MODE 6, l'effet est d'effacer le caractère ou la chaîne de caractères, laissant l'image d'origine inchangée. Il est particulièrement utile pour les messages utilisateur dans un programme orienté graphique.

Si vous souhaitez créer votre propre fichier d'ensemble de caractères à utiliser avec WCHAR et WSTRING, il doit être structuré comme suit :

Un tel fichier peut être créé soit en langage de programmation assembleur, soit en Pascal. Dans Pascal, vous pouvez construire les représentations de caractères en mémoire comme des tableaux compactés du type 0..255 puisque chaque élément d'un tel tableau est en fait un octet. Par exemple, vous pouvez utiliser les déclarations :

  1. TYPE 
  2.    CHARIMAGE=PACKED ARRAY[0..7] OF 0..255;
  3.    CHARSET=PACKED ARRAY[0..127] OF CHARIMAGE;
  4.    CHARFILE=FILE OF CHARSET;
  5. VAR 
  6.    CHARACTERS:CHARSET;
  7.    OUTFILE:CHARFILE; 


Dernière mise à jour : Dimanche, le 28 mars 2021