The basics of the Model Editor

Ce chapitre vous permettra de vous familiariser avec l'Editeur de code. Durant cette session d'entrainement, il vous sera demandé de faire des choses totalement inutiles. Désolé! Cela ne devrait pas être trop long...

Avant de lancer l'Editeur de code, il vous faut faire quelques préparations. Il convient notamment de créer des "supports de texture". Nous verrons un peu plus tard comment faire. Il serait également préférable que vous ayez créé deux ou trois sub-assies (en plus du desk) dans lesquels se trouvent quelques polygones... Ah, j'allais oublier: serait-ce trop vous demander que de copier un fichier bitmap 256 couleurs (128x128, 256x256 ou 512x512) dans le répertoire de votre project?

On y est. Je suppose que ça n'a pas été long. Sélectionnez l'un des polygones que vous avez créé et activez l'option Define as texture support du menu Utilities. Recommencez cette opération avec deux ou trois autres polygones.

Lancez l'Editeur de code (10ème bouton de la barre d'outils ou option Model Editor du menu File. La fenêtre de l'Editeur de code apparait à l'écran.


La fenêtre de l'Editeur de code comprend:

Chaque instruction affichée dans le panneau blanc est composé de trois champs (label, code, données). Lorsque vous cliquez sur une instruction, vous la sélectionnez. Un gros point rouge s'affiche dans la marge à côté de cette instruction. Le nombre total d'instructions de la liste est indiqué dans l'un des champs de la barre d'état, ainsi que le numéro de la ligne sélectionnée. L'autre champ est utilisé pour afficher les messages d'erreur ou d'alerte. Si vous cliquez sur une instruction puis sur une autre en appuyant sur la touche SHIFT, vous sélectionnez plusieurs instructions.

Pour l'instant, la liste est courte : quelques lignes. Il s'agit de la page de code principale du projet. Les seules instructions présentes sont des instructions de déclaration des sub-assies (supposons que MYNAME soit le nom du projet et MYSUB1, MYSUB2... les noms des sub-assies. A moins que ce ne soient TOTO and TOTO1...):
MYNAME  MASTER
MYSUB1  SUBASSY,T click to open sub-assy
MYSUB2  SUBASSY,T click to open sub-assy
MYSUB3  SUBASSY,T click to open sub-assy
        ENDBLOCK

Si vous n'aviez pas coché la case master project lors de la création du projet, vous verrez quelque chose d'un peu différent:
MYNAME  ASSEMBLY
MYSUB1  SUBASSY,T  click to open sub-assy
MYSUB2  SUBASSY,T  click to open sub-assy
MYSUB3  SUBASSY,T  click to open sub-assy
        ENDBLOCK

Double-cliquez sur le champ de données d'une instruction SUBASSY,T (ce champ comprend la mention "click to open sub-assy"). Ceci a pour effet d'afficher la page de code associée au sub-assy correspondant:
MYSUB1  SUBASSY,T  click to come back
        TPOLY      3; 1, 2, 3
        TPOLY      ...
        ...
        RETURN

Chaque instruction TPOLY represente un polygone du sub-assy. Prenez quelques instants pour jouer avec ces instructions. Sélectionnez l'une des instructions TPOLY en cliquant dessus. Cliquez ensuite sur le bouton de la barre d'outils qui représente des ciseaux (le quatrième). Rien ne se passe, si ce n'est l'apparition d'un message d'alerte dans la barre d'état. Vous ne pouvez pas supprimer un polygone à partir de l'Editeur de code. Vous ne pouvez pas non plus supprimer la première instruction, ni la dernière. Cliquez de nouveau sur une instruction TPOLY. Cliquez ensuite sur le troisième bouton de la barre d'outils. L'apparence du curseur est modifiée, vous êtes passé dans le mode Move To de l'Editeur de code. Cliquez sur une autre instruction (à condition que ce ne soit pas la première). L'instruction en cours de sélection est déplacée de manière à s'insérer juste avant l'instruction sur laquelle vous avez cliqué et le curseur reprend son apparence normale. Recommencez l'opération mais, cette fois, cliquez sur le premier bouton de la barre d'outils au lieu de cliquer sur une autre instruction: le curseur reprend son apparence normale et rien ne se passe. Essayez de déplacer la première ou la dernière instruction: rien ne se passe et un message d'alerte s'affiche dans la barre d'état. Dans l'Editeur de code, il y a différentes catégories d'instructions:

Retournez à la page de code principale en double-cliquant sur le champ de données de la première instruction ou en cliquant sur le neuvième bouton de la barre d'outils (celui qui représente une flêche verticale).

Insérer une instruction

Sélectionnez la deuxième instruction de la liste. Cliquez ensuite sur le deuxième bouton de la barre d'outils (ou appuyez sur la touche INSER du clavier). Une fenêtre de sélection d'instruction s'ouvre qui vous propose les options suivantes :


L'option Insert Assembly n'est affichée que si vous travaillez dans un master project. Cliquez successivement sur les différents boutons de sélection. Le panneau de droite de la fenêtre de sélection s'adapte en fonction de l'option choisie. Par exemple, si vous sélectionnez le bouton Jump, le panneau de gauche présente le choix suivant:

Sélectionnez une option et validez en cliquant sur le bouton OK. Une instruction est insérée dans la liste devant l'instruction que vous aviez sélectionnée. Exercez-vous à insérer d'autres instructions à la suite de la première. En réalité, si vous aviez sélectionné une instruction de type Jump, ce n'est pas une, mais deux instructions qui ont été insérées. C'est l'une des caractéristiques de l'Editeur de code: certaines instructions sont créées par paires. Elles sont indissociables. Vous ne pouvez pas insérer d'instructions entre les deux éléments d'une paire. Vous ne pouvez pas sélectionner l'une sans sélectionner l'autre. Vous ne pouvez pas effacer l'une sans effacer l'autre. Elles sont appelées paires d'instructions combinées.

Insérez une autre instruction: choisissez un RETURN par exemple. Si cela ne vous satisfait pas, double-cliquez sur le champ de code de ce RETURN. La fenêtre de sélection d'instruction est affichée de nouveau et vous pouvez modifier votre choix. Créez d'autres instructions (GOSUB, GOTO, RETURN...) sans vous préoccuper pour le moment de leur signification.

Le presse-papiers

L'Editeur de code possède un presse-papiers. Pour placer une instruction dans le presse-papiers, sélectionnez-la et activez l'option Copy du menu Edit ou cliquez sur le sixième bouton de la barre d'outils.


Vous pouvez aussi sélectionner plusieurs instructions à la fois. Cliquez par exemple sur la deuxième instruction, puis cliquez sur une autre instruction de la liste tout en appuyant sur la touche SHIFT (je fais l'hypothèse que vous avez inséré plusieurs instructions dans la liste). Dans ce cas, c'est l'ensemble de la sélection que vous pouvez copier dans le presse-papiers. Si vous sélectionnez une autre instruction de la liste (en dehors de la sélection), vous pouvez, au choix, coller le contenu du presse-papiers à la place de la sélection (septième bouton de la barre d'outils) ou l'insérer juste avant la sélection (huitième bouton de la barre d'outils). Les restrictions qui s'appliquent au presse-papiers sont décrites dans un chapitre du fichier d'aide.

Instructions de saut et labels

De nombreuses instructions de l'Editeur de code doivent être complétées par une adresse de destination dans leur champ de données. C'est le cas par exemple des instructions de test, des appels de sous-programmes ou des instructions associées aux parties mobiles. Nous verrons plus tard comment utiliser ces instructions, nous allons voir maintenant comment leur affecter une adresse de destination.

Insérez quelques instructions au sein de la page de code d'un sub-assy. Par exemple, insérez la séquence suivante dans le sub-assy MYSUB1:
MYSUB1  SUBASSY,T  click to come back
        GOSUB      ?
        JUMP PROP  ?
        RANGE      0,60
        RETURN
        GCOLOR     ?
        GOTO       ?
        RETURN
        TPOLY      3; 1, 2, 3
        TPOLY      3; 4, 5, 6
        TPOLY      ...
        ...
        RETURN

La signification de cette séquence importe peu pour le moment. Nous allons juste chercher à affecter une adresse de destination aux instructions qui le nécessitent. Ces instructions sont marquées par un petit point bleu dans la marge.

Double-cliquez dans le champ de données de la première instruction GOSUB de la liste. Le curseur change de forme: c'était une petite flèche inclinée, c'est maintenant un doigt pointé vers le haut. L'Editeur de code est passé en mode d'adressage. Il y a trois façons de sortir de ce mode: soit vous pointez sur un label existant (il n'y en a pas pour le moment), soit vous cliquez sur une instruction sans label située au dessous de l'instruction avec laquelle vous travaillez, soit vous cliquez sur le premier bouton de la barre d'outils pour annuler l'opération en cours. Ceci ne nous avancerait à rien: cliquez donc avec le doigt pointé sur la première instruction TPOLY de la liste. Le curseur reprend sa forme normale et une fenêtre de saisie d'adresse apparaît. Entrez un label alphanumerique (8 caractères maximum): allons-y pour MYLABEL. Validez en cliquant sur le bouton OK.

MYLABEL, ce n'est pas mal, mais je suis sûr que nous aurons besoin d'autres labels. Je propose que nous remplacions MYLABEL par MYLABEL1. Pour faire cela, double-cliquez sur le label que vous venez de créer. La fenêtre de saisie d'adresse est affichée de nouveau. Entrez MYLABEL1 et validez. Jetez un oeil à l'instruction GOSUB à partir de laquelle vous aviez créé le label MYLABEL. Cette instruction a été mise à jour et pointe désormais sur MYLABEL1. Aircraft Designer 2000 crée des liens dynamiques entre les labels et les adresses de destination des instructions de saut.

Double-cliquez maintenant sur le champ "label" de la deuxième instruction TPOLY et donnez lui le label MYLABEL2. Revenez à l'instruction GOSUB de tout à l'heure. Double-cliquez sur son champ de données (pour le moment, il pointe sur MYLABEL1). L'éditeur de code repasse en mode d'adressage et le curseur en forme de doigt pointé reparaît. Cliquez sur MYLABEL2 avec le doigt pointé: le champ de données du GOSUB indique maintenant MYLABEL2 au lieu de MYLABEL1.

Encore une petite expérience? Sélectionnez l'instruction GOSUB MYLABEL2 en cliquant dessus. Copiez la dans le presse-papiers (sixième bouton de la barre d'outils). Insérez et collez le presse-papiers (huitième bouton de la barre d'outils) quelque part dans la liste avant l'instruction MYLABEL2 TPOLY. Une autre instruction GOSUB MYLABEL2 est créée. Double-cliquez sur le champ "label" de l'instruction MYLABEL2 TPOLY. Modifiez le label MYLABEL2 en MYLABEL3. Vous pourrez constater que les adresses de destination des deux instructions GOSUB sont mises à jour.

Couleur et Texture

Si vous avez suivi les instructions de ce tutoriel, il devrait y avoir une instruction de type "couleur ombrée" (GCOLOR) dans la liste. Si ce n'est pas le cas, insérez en une (groupe COLOR/TEXTURE, option shaded color) quelque part dans la liste. Souvenez-vous que vous ne pouvez pas insérer une instruction entre deux instructions combinées.
        GCOLOR      ?

Double-cliquez sur le point d'interrogation: une fenêtre de sélection de couleur apparaît. Sélectionnez une couleur et validez. Le point d'interrogation est remplacé par l'indice de la couleur. Ce n'est pas la bonne couleur? Double-cliquez sur l'indice de couleur et choisissez une autre couleur.


Une couleur ombrée ne s'applique qu'à des polygones ombrés (GPOLY). Tous les polygones de ce sub-assy sont du type texturé (TPOLY). Pour passer du type ombré au type texturé, vous pouvez procéder de deux façons: ou bien vous sélectionnez toutes les instructions TPOLY puis vous activez l'option Polygon type du menu Code, ou bien vous double-cliquez successivement sur le champ de code de chacune de ces instructions. Dans les deux cas, une fenêtre de sélection de type apparaît: cliquez sur le bouton-radio shaded. Sachez que le choix d'un mauvais type de polygone est la source d'une erreur fréquente. Très souvent, on oublie de transformer les instructions TPOLY en instructions GPOLY après avoir inséré une instruction GCOLOR. De plus, si aucune texture n'a été définie au préalable, une erreur de compilation se produira.

Justement: insérons maintenant une instruction de texture (groupe COLOR/TEXTURE, option texture). Une paire d'instructions combinées est créée:
        TEXTURE    ?
        LIMITS     undefined limits

Double-cliquez sue le point d'interrogation de l'instruction TEXTURE: une fenêtre de sélection de texture apparaît.


La fenêtre de sélection de texture comprend :

Si vous avez copié un fichier bitmap 256 couleurs dans le répertoire de votre projet comme je vous l'avez demandé, il devrait apparaître dans la liste à droitre de la fenêtre. Sélectionnez ce fichier: il sera visualisé sur le panneau carré de gauche. Amusez-vous avec les boutons-radio du panneau "masque" en bas à droite de la fenêtre. Le fait de cliquer sur half1 ou half2 applique un masque sur la texture. Vous pouvez de la sorte utiliser le même fichier texture pour différentes applications. Validez en cliquant sur le bouton OK. Double-cliquez ensuite sur le champ de données de l'instructions LIMITS. Si vous avez défini plusieurs supports de texture dans l'Editeur Graphique, une fenêtre de sélection de support s'affiche à l'écran.

Dans la partie haute de la fenêtre, on peut voir trois boutons: une flêche vers la gauche, une flêche vers la droite et un bouton central. Le bouton central est sans effet dans cette fenêtre. En cliquant sur les flêches, vous pouvez naviguer dans la liste des supports de texture. Les limites de texture définies à partir du support courant apparaissent dans la fenêtre. Validez votre sélection: ces mêmes limites sont reportées dans le champ de données de l'instruction LIMITS. Si ces limites ne vous satisfont pas, double-cliquez à nouveau sur ce champ de données. La fenêtre de sélection de support de texture s'affiche de nouveau et vous pouvez modifier votre choix.

Nota : FS2000 et CFS2 permettent de déclarer des textures de nuit qui, comme leur nom l'indique, remplacent la texture de base de la tombée de la nuit jusqu'à l'aube. Le nom de ces textures doit être construit à partir de celui de la texture de jour. Si le nom de la texture de jour est MATEXTU.bmp, celui de la texture de nuit doit être MATEXTU_LM.bmp.

Les lignes

Les polygones ne sont pas les seules pièces élémentaires que vous pouvez créer avec Aircraft Designer 2000. Vous aurez parfois besoin de lignes brisées. Fermez la fenêtre l'Editeur de code et revenez à l'Editeur Graphique. Sélectionnez un polygone et éditez le. Dans l'éditeur de chaîne, cliquez sur le bouton line. Le polygone a été transformé en ligne brisée. Pendant que vous êtes dans l'Editeur Graphique, profitez en pour créer un nouveau sub-assy avec quelques chaînes. Une fois cela réalisé, effacez quelques unes des chaînes au sein des autres sub-assies. Hé... pas celle là! Pas la ligne que vous venez de créer, nous allons en avoir besoin!

Relancez l'Editeur de code. Vous pouvez constater plusieurs choses:

Les instructions MOVE TO et LINE TO définissent les points d'une ligne brisée. Une instruction LINE TO est une sorte de "deuxième instruction" d'une paire d'instructions combinées. Vous ne pouvez pas séparer cette instruction de l'instruction MOVE TO qui défint le premier point de la ligne. Si vous avez le temps, revenez à l'Editeur Graphique et rééditez la ligne brisée pour la retransformer en polygone. Relancez l'Editeur de code. Les instructions MOVE TO/LINE TO ont disparu et une instruction TPOLY les remplace.

Instructions avancées

Les groupes Flight Control et misc. advanced regroupent les instructions nécessaires à l'animation des parties mobiles. Je vous conseille de lire les chapitres qui leur sont consacrés dans le fichier d'aide pour mieux comprendre leur fonctionnement. Pour le moment, il nous suffira de dire que ce sont des instructions combinées. Une instruction VECTOR leur est associée. Cette instruction VECTOR fait appel à un vecteur, qui doit être défini au préalable dans l'Editeur Graphique, et à trois angles de rotation. Les vecteurs sont créés au moyen de l'option Make a vector du menu Utilities.


Si des vecteurs ont été définis, double-cliquez sur le champ de données d'une instruction VECTOR. Une fenêtre de saisie s'affiche. Cette fenêtre vous permet de choisir le vecteur de translation (flêches gauche et droite) et les trois angles de rotation.

L'instruction INSERT vous permet d'insérer un assembly dans le master project. Cet assembly doit avoir été compilé au préalable. Un assembly se comporte comme un sub-assy. Il est conseillé de l'appeler au moyen d'une instruction GOSUB de préférence à tout autre instruction de saut.

Fermer la fenêtre de l'Editeur de code.


copyright Hervé Devred, 2001