Présentation des codes spéciaux

Vous pouvez utiliser des codes spéciaux pour créer des formes géométriques supplémentaires et spécifier certaines actions.

Le deuxième caractère de la chaîne de trois caractères (spécification de la longueur du vecteur) doit être 0, mais vous pouvez aussi spécifier le numéro du code spécial. Par exemple, 008 et 8 sont des définitions correctes.

Codes d'octet de définition

Code

Description

000

Fin de la définition de forme

Le dessin est activé au début de chaque forme. Lorsque le mode Dessiner est activé (code 1), les vecteurs génèrent le tracé. Lorsque le mode Dessiner est désactivé (code 2), les vecteurs se déplacent sans aucun tracé.

001

Activer le mode Dessiner (plume abaissée)

002

Désactiver le mode Dessiner (plume levée)

003

Diviser les longueurs de vecteur par l'octet suivant

La hauteur spécifiée avec la commande FORMES est initialement considérée comme la longueur d'un vecteur orthogonal unique (direction 0, 4, 8 ou C). Le code 3 divise les longueurs de vecteur par l'octet suivant. Le code 4 multiplie les longueurs de vecteur par l'octet suivant. Les codes 3 et 4 sont suivis d'un octet de définition contenant un facteur d'échelle exprimé par un entier (1 à 255).

Pour que la hauteur spécifie la taille totale de la forme et que celle‑ci soit dessinée avec 10 longueurs de vecteur, vous pouvez mettre à l'échelle la définition de la hauteur avec 3,10. Le facteur d'échelle est cumulatif au sein d'une forme ; ainsi, le fait de multiplier par 2 puis par 6 génère un facteur d'échelle égal à 12. Généralement, vous devez inverser l'effet des facteurs d'échelle à la fin de la forme, notamment pour les formes secondaires et les formes de police de texte. Le programme ne réinitialise pas le facteur d'échelle automatiquement.

004

Multiplier les longueurs de vecteur par l'octet suivant

005

Placer l'emplacement courant dans la pile

Vous devez retirer de la pile tout ce que vous y placez. La profondeur de la pile de position ne contient que quatre emplacements. En cas de dépassement de pile en raison d'un nombre trop élevé de placements ou de retraits, le message suivant apparaît lorsque la forme est dessinée.

dépassement de la pile nnn

De même, si vous essayez de retirer de la pile davantage d'emplacements que vous n'y en avez placés, le message suivant apparaît lorsque la forme est dessinée.

dépassement en négatif de la pile nnn

006

Retirer l'emplacement courant de la pile

007

Dessiner le numéro de forme secondaire indiqué par l'octet suivant

Dans le cas d'une police non‑Unicode, l'octet de définition qui suit le code 7 est un numéro de forme compris entre 1 et 255. Dans le cadre d'une police Unicode, le code 7 est suivi d'un numéro de forme Unicode compris entre 1 et 65 535. Les numéros de forme Unicode doivent être considérés comme des ensembles de deux octets.

La forme qui porte ce numéro (dans le même fichier formes) est dessinée à cet instant. Le mode Dessiner n'est pas réinitialisé pour la nouvelle forme. Lorsque la forme secondaire est terminée, le dessin de la forme courante reprend.

008

Déplacement X-Y indiqué par les deux octets suivants

Les octets de définition de vecteur normaux ne dessinent que dans 16 directions prédéfinies et la longueur la plus étendue est de 15. Ces restrictions optimisent les définitions de forme mais sont parfois contraignantes. Le code 8 spécifie le déplacement X-Y indiqué par les deux octets suivants. Le code 8 doit être suivi de deux octets de définition de la façon suivante :

8,X-displacement,Y-displacement

Les déplacements X-Y peuvent aller de –128 à +127. Le signe + initial est facultatif et vous pouvez utiliser des parenthèses pour améliorer la lisibilité. L'exemple suivant aboutit à un vecteur qui dessine (ou déplace) 10 unités vers la gauche et 3 unités vers le haut.

8,(-10,3)

Après les deux octets de définition de déplacement, la forme passe en mode vecteur normal.

Vous pouvez utiliser le code 9 pour dessiner une séquence de vecteurs non standard. Le code 9 spécifie un nombre quelconque de paires de déplacements X-Y. La séquence de codes se termine par une paire (0,0). L'exemple suivant montre comment dessiner trois vecteurs non standard et passer en mode vecteur normal.

9,(3,1),(3,2),(2,-3),(0,0)

Vous devez terminer la séquence des paires de déplacements X-Y par une paire (0,0) afin que le programme reconnaisse les vecteurs normaux ou les codes spéciaux qui suivent.

009

Plusieurs déplacements X-Y, se terminant par (0,0)

00A

Octant défini par les deux octets suivants

Celui-ci est appelé octant, car il englobe un ou plusieurs octants de 45 degrés, en commençant et finissant sur un contour d'octant. Les octants sont numérotés de façon trigonométrique à partir de la position "3 heures", comme l'illustre la figure suivante :

La spécification de l'arc est

10,radius,(-)0SC

Le rayon peut être toute valeur comprise entre 1 et 255. Le second octet de définition indique la direction de l'arc (trigonométrique s'il est positif et horaire s'il est négatif), son octant de départ ( s , une valeur comprise entre 0 et 7) et le nombre d'octants qu'il englobe ( c , une valeur comprise entre 0 et 7, 0 représentant huit octants, soit un cercle complet). Vous pouvez utiliser des parenthèses pour améliorer la lisibilité. Par exemple, examinez le fragment de définition de forme suivant :

...012,10,(1,-032),01E,...

Ce code dessine un vecteur d'une unité vers le haut et vers la droite, un arc horaire à partir de l'octant 3 (avec un rayon d'une unité pour deux octants), puis un vecteur d'une unité vers le bas et vers la droite, comme l'illustre la figure suivante :

00B

Arc fractionnaire défini par les cinq octets suivants

Cinq octets de définition sont utilisés.

11,start_offset,end_offset,high_radius,radius,(-)0SC

Les paramètres décalage_début et décalage_fin indiquent la distance à laquelle l'arc commence ou finit par rapport à un contour d'octant. Le paramètre octet_poids_fort_rayon représente les huit bits de poids fort du rayon ; l'octet de poids fort du rayon a pour valeur 0 sauf si le rayon est supérieur à 255 unités. Multipliez la valeur octet_poids_fort_rayon par 256 et ajoutez le résultat à la valeur rayon pour générer un rayon d'arc supérieur à 255. Le rayon et l'octet de définition de fin sont les mêmes que ceux de la définition de l'octant (code 00A, décrit précédemment).

Pour déterminer le décalage de début, calculez la différence en degrés entre le contour de l'octant de départ (un multiple de 45 degrés) et le début de l'arc. Ensuite, multipliez cette différence par 256, puis divisez le résultat par 45. Si l'arc commence sur un contour d'octant, son décalage de début est égal à 0.

Calculez le décalage de fin de manière similaire, mais en utilisant le nombre de degrés compris entre le contour du dernier octant et la fin de l'arc. Si l'arc finit sur un contour d'octant, son décalage de fin est égal à 0.

Par exemple, un arc fractionnaire de 55 à 95 degrés avec un rayon de 3 unités serait codé comme suit :

11,(56,28,0,3,012)

Voici une explication détaillée :

start_offset     = 56 because ((55 - 45) * 256 / 45) = 56 
end_offset       = 28 because ((95 - 90) * 256 / 45) = 28
high_radius      = 0  because (radius < 255) 
radius           = 3 
starting octant  = 1  because arc starts in the 45 degree octant
ending octant    = 2  because arc ends in the 90 degree octant

00C

Arc défini par le déplacement X-Y et la courbure

Ils sont similaires aux codes 8 et 9 en ce sens que vous pouvez les utiliser pour spécifier des déplacements X-Y. Toutefois, les codes 00C et 00D dessinent les arcs en appliquant un facteur de courbure au vecteur de déplacement. Le code 00C dessine un segment d'arc, alors que le code 00D en dessine plusieurs (polyarcs) jusqu'à son achèvement par un déplacement (0,0).

Le code 00C doit être suivi de trois octets décrivant l'arc :

0C,X-displacement,Y-displacement,Bulge

Les déplacements X et Y, de même que la courbure qui définit la courbe de l'arc, sont compris entre –127 et +127. Si D est la longueur du segment de ligne spécifié par le déplacement et H est la hauteur de la distance perpendiculaire à partir du milieu de ce segment, la magnitude de la courbure est ((2* H / D) * 127). Le signe est négatif si l'arc compris entre l'emplacement courant et le nouvel emplacement est horaire.

Un demi-cercle possède une courbure égale à 127 (ou -127), soit l'arc le plus étendu pouvant être représenté sous la forme d'un segment à arc unique à l'aide de ces codes (utilisez deux segments d'arc consécutifs pour obtenir des arcs plus grands). Une définition de courbure égale à 0 est valide et représente un segment de ligne droite. Toutefois, l'utilisation du code 8 pour un segment de ligne droite a pour effet d'enregistrer un octet dans la description de la forme.

Le code des polyarcs (00D ou 13) est suivi de 0 ou d'autres triplets de segments d'arc et est terminé par un déplacement (0,0). Notez qu'aucune courbure n'est spécifiée après le dernier déplacement. Par exemple, la séquence suivante peut définir la lettre S :

13,(0,5,127),(0,5,-127),(0,0)

Au sein des polyarcs, les segments à courbure nulle permettent de représenter les segments droits ; leur utilisation est plus efficace que le fait de terminer le polyarc, d'insérer un segment droit puis de commencer un autre polyarc.

Le nombre –128 ne peut pas être utilisé dans les définitions de segment d'arc et de polyarc.

00D

Plusieurs arcs à courbure spécifiée

00E

Traiter la commande suivante uniquement en cas de texte vertical

Lorsque ce code spécial figure dans une définition de caractère, le code suivant est traité ou ignoré, en fonction de l'orientation. Si l'orientation est verticale, le code suivant est traité ; si elle est horizontale, il est ignoré.

Dans un texte horizontal, le point initial de chaque caractère correspond à l'extrémité gauche de la ligne de base. Dans un texte vertical, le point initial est le point central supérieur du caractère. Normalement, à la fin de chaque caractère, un segment plume levée est réalisé jusqu'au point initial du caractère suivant. L'opération est effectuée vers la droite ou vers le bas selon que le texte est horizontal ou vertical. Le code spécial 00E (14) est essentiellement utilisé pour homogénéiser les points initiaux et finaux, afin que la même définition de forme de caractère soit utilisable horizontalement et verticalement. Par exemple, vous pouvez utiliser la définition d'un D majuscule suivante dans un texte horizontal ou vertical :

*68,22,ucd 
2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0