3-13 Interfaces utilisateur (modules contrôlés par la souris)

3-13-2. Principes généraux à propos des modules d'interface utilisateur
3-13-3. Liste des attributs de l'interface souris

3-13-4. Les boîtes à cocher

Les boîtes à cocher simples

Les boîtes à cocher vectorielles

Les boutons radio

3-13-4. Les ascenceurs

Les ascenceurs scalaires

Les ascenceurs vectoriels

3-13-5. Le module d'incrémentation scalaire

3-13-6. Choix d'un scalaire parmi les éléments d'un vecteur: le module Vecteur - >Scalar

3-13-7. Basculer entre plusieurs opérations: le module Choix

Comment marche le module Choix?

Le module Choix

3-13-8. Les vecteurs

3-13-9. Comment initialiser la sortie d'une macro d'interface souris?

3-13-10. Comment garder la valeur sélectionnée quand le programme est réinitialisé?

3-13-11. Les interfaces souris composées

Un exemple d'interface composite complexe, avec une boucle de réaction,

Un autre exemple: choisir plusieurs lignes composites

 

Les outils de l'interface utilisateur sont des modules contrôlés par la souris (boîtes à cocher, ascenseurs, listes à cocher,…) qui rendent l'usage de vos applications beaucoup plus confortable, rapide et intuitif. Ils sont localisés dans la boîte Utilités / Interfaces Souris de la Bibliothèque standard MUSTIG.

3-13-2. Principes généraux à propos de modules d'interface utilisateur

Les outils d'interface utilisateur sont des macros spéciales qui n'ont aucun nom. Les éléments affichés sur la face avant de la macro dépendent seulement des éléments placés à l'intérieur de la macro.

Dans tous les cas la macro doit contenir un module dinterface nommé Module qui peut être trouvé dans les Utilités / Interface Souris / Les Attributs de la Bibliothèque:

À l'intérieur de ce module élémentaire, un ou plusieurs des modules suivants doivent être placés :

En plus du module élémentaire Module, la macro d'interface peut contenir d'autres modules spécialisés appelés des Attributs. Les attributs modifient le comportement du module d'interface. Par exemple, ils peuvent être utilisés pour changer le signe du cochage, fixer les min et max et l'incrément pour les scalaires qui sortent d'un ascenseur, etc. Les attributs sont dans Utilités / Interface Souris / Les Attributs de la Bibliothèque.

3-13-3. Liste des attributs de l'interface souris

Les attributs qui peuvent être utilisés avec un module de l'interface utilisateur donné sont inscrits dans la section relative à ce module. Quelques attributs sont utilisés comme ils sont, d'autres exigent que des modules d'entrée ou de sortie soient mis à l'intérieur pour initialisation.

Nous recommandons fortement d'ouvrir les modules d'interface utilisateur fournis et jeter un coup d'oeil sur tous les exemples pour se familiariser avec la construction et l'usage d'interfaces utilisateur.

Une liste complète des attributs disponibles est donnée ci-dessous:

Nom de l'attribut + exemple d'utilisation

La fonction

Contient les valeurs de sortie du module d'interface utilisateur. Peut contenir aussi des valeurs d'initialisation.

Permet de mettre des étiquettes alphanumériques pour les choix différents d'un module d'interface utilisateur vectoriel. Les étiquettes sont définies en redimentionnant le module et faisant glisser dedans un scalaire ou un module d'entrée de chaîne de caractères. Les étiquettes de deux lignes consécutives sont séparées par un retour chariot. Ce module peut contenir aussi une courbe.

Ce module permet de définir la largeur des étiquettes affichées sur la face avant en amenant dedans un module d'entrée scalaire.

Définit la plus basse valeur qui peut être rendue par le module d'interface utilisateur. Utilisez par exemple un module d'entrée scalaire pour définir la valeur. Vous pouvez aussi utiliser un module d'impression scalaire ?????? et fixer la valeur à l'extérieur du module d'interface. Si ce module n'est pas présent, la valeur minimum par défaut de la sortie est 0

Définit la plus haute valeur qui peut être rendue par le module d'interface utilisateur. Utilisez par exemple un module d'entrée scalaire pour définir la valeur. Vous pouvez aussi utiliser un module d'impression scalaire ?????? et fixer la valeur à l'extérieur du module d'interface. Si ce module n'est pas présent, la valeur maximum par défaut de la sortie est 1.

Permet d'incrémenter.

Permet de décrémenter.

Trace la face avant horizontalement au lieu de verticalement.

Définit le pas entre deux valeurs consécutives pour les modules d'incrémentation ou les ascenseurs. Si ce module n'est pas présent, le pas par défaut de la sortie est 0.01

Définit l'espace vertical entre deux étiquettes consécutives pour les modules vectoriels.

Définit le nombre d'échantillons du vecteur de sortie pour les modules vectoriels. Si le vecteur de sortie contenait initialement moins d'éléments, le dernier échantillon est répété.

Sauvegarde la dernière valeur quand le module est réinitialisé. Les choix de l'utilisateur seront sauvés même si le module est réinitialisé, jusqu'à ce que la valeur de l'initialisation soit changée explicitement.

Trace une croix dans les boîtes à cocher au lieu d'un carré.

Trace une marque de cochage dans les boîtes à cocher

Trace les marques en bleu (le défaut est rouge)

Trace les marques en jaune

Trace les marques en vert

Normalement, la face avant d'un module d'interface utilisateur est calculée automatiquement dès qu'elle est visible. Si ce module est présent à l'intérieur de la macro d'interface utilisateur, le calcul de la face avant doit être demandé explicitement en cliquant à droite sur le module d'interface.

3-13-4. Les boîtes à cocher

Plusieurs types de boîtes à cocher sont disponibles dans Utilités / Interface souris / Les boîtes à cocher de la Bibliothèque. La sortie des boîtes à cocher est un nombre entier égal à 1 si la boîte est cochée, égal à 0 autrement.

Les boîtes à cocher simples

Les attributs supportés : Croix, Cochage, Bleu, Jaune, Vert,

Non coché : Coché :

Les boîtes à cocher vectorielles

Les attributs supportés : Croix, Cochage, Jaune, Bleu, Vert, etiquettes, Taille etiquette, Ecart, longueur du Vecteur.

Ce module retourne un vecteur de nombres entiers avec les valeurs 0 ou 1, selon le statut du cochage de chaque boîte. Le nom de la variable de la sortie est défini dans la boîte du Module à l'intérieur de la macro d'interface utilisateur.

Le module de boîtes à cocher vectoriel précité contient des attributs d'étiquetage. L'intérieur de cette macro est montré ci-dessous:

La macro d'entrée vectorielle à l'intérieur de la boîte Module contient le nom et longueur de la variable de sortie. Son intérieur est simplement :

indiquant que la variable de sortie est nommée t. Les éléments de ce vecteur de sortie changent dynamiquement selon quelles boîtes sont cochées.

Les boutons radio

Les attributs supportés : Croix, Cochage, Jaune, Bleu, Vert, Étiquettes, Taille de l'Étiquette, Ecart, longueur du Vecteur,.

Les " boutons radio " sont semblables aux boîtes à cocher vectorielles, mais seulement une boîte peut être cochée à la fois.

L'interface utilisateur "boutons radio" ci-dessus n'a aucun module d'étiquetage à l'intérieur. Donc, seulement les cases sensibles à la souris sont affichées sur la face avant.

Dans beaucoup d'applications on a besoin de savoir l'index de la boîte cochée, c'est-à-dire l'index de la valeur 1 dans le vecteur de sortie. La macro Pos global max/t de la Bibliothèque (disponible dans Changements des Variables / les Opérations sur les vecteurs de la Bibliothèque) peut être mise juste après le bouton radio pour extraire cet index (souvenez-vous que dans le langage MUSTIG les index de tout vecteur débutent à 0) :

3-13-4. Les ascenceurs

La sortie du module d'interface utilisateur Ascenceur est un scalaire ou un vecteur, à partir d'un curseur graphique, sensible à la souris.

Les ascenceurs scalaires

Les attributs supportés : Horizontal, Mini (par défaut = 0), Maxi (par défaut = 1), Bin (par défaut = 0.01).

En faisant glisser le réticule sensible à la souris, l'utilisateur change la valeur de la sortie du module d'interface. Le pas et les valeurs limite sont fixés à l'intérieur de la macro d'interface utilisateur :

D'après ces attributs, la valeur scalaire en sortie s'étendra entre 0 (réticule en bas) et 1 (réticule en haut) et changera avec un pas de 0.1.

Les ascenceurs vectoriels

Les attributs supportés : Mini, Maxi, Bin, Étiquettes, taille de l'Étiquette, Ecart,

Ce module affiche un ensemble de réticules sensibles à la souris et retourne un vecteur. Les valeurs des éléments du vecteur de la sortie dépendent de la place des réticules sur la face avant. Des attributs d'étiquetage peuvent être ajoutés. Le nom et la longueur de la variable de la sortie sont mises dans la boîte Module à l'intérieur du module d'interface ascenceur vectoriel, comme dans le module des boîtes à cocher vectoriel.

L'exempleci-dessus montre la face avant d'un module d'ascenceur vectoriel et le résultat en sortie. Les attributs d'étiquetage ont été ajoutés à l'intérieur de la macro. Les valeurs de sortie pour les trois paramètres étiquetés (à savoir Voltage, Fréquence et Phase) peuvent être changées en déplaçant les réticules avec la souris.

Les attributs placés au-dedans de la macro d'interface utilisateur permettent de contrôler les pas et limites de chaque paramètre de la sortie, aussi bien que les étiquettes affichées :

Comme d'habitude, le nom de la variable de sortie (ici: /t) est mis à l'intérieur de la boîte Module.

3-13-5. Le module d'incrémentation scalaire

Les attributs supportés : Horizontal, Up, Down, Mini, Maxi, Bin

Ce module permet de choisir la valeur du scalaire retourné en cliquant sur les flèches haut ou bas (ou droit ou gauche si l'attribut Horizontal est présent) affichées sur la face avant.

Dans le cas ci-dessus, les attributs ont été ajoutés pour contrôler le pas et limites de la valeur de sortie, afficher une face avant horizontale au lieu de verticale, et permettre des changements de la valeur de sortie croissants et décroissants. L'intérieur de la macro est montré ci-dessous:

3-13-6. Choix d'un scalaire parmi les éléments d'un vecteur : le module du Vecteur - >Scalar

Les attributs supportés : Ecart,

Le module Vecteur - >Scalar permet de sélectionner la valeur de sortie scalaire en cliquant une des valeurs inscrites sur la face avant.

Une fois qu'une valeur a été sélectionnée, le choix peut être changé en utilisant les flèches de défilement du clavier.

Si le module n'est pas verrouillé, vous pouvez éditer et changer une valeur dans la liste seulement par Majuscule+Ctrl+Clic dessus.

La macro d'interface contient seulement la boîte Module et un attribut d'étiquetage Étiquettes initialisé avec un module d'entrée scalaire Val qui contient une liste de valeurs selon une variable (ici: /t). L'intérieur de la macro d'interface est montré ci-dessous, avec toutes les macros d'entrée et de sortieont décompactées :

3-13-7. Commuter entre plusieurs opérations : le module Choix

Les attributs supportés : Ecart

Le module Choix est en fait une macro construite à partir du module Vecteur - >Scalaire (voir 3-13-6):

Cela permet à l'utilisateur de relier la sortie de plusieurs algorithmes aux bornes d'entrée de la macro Choix, et sélectionne l'algorithme à utiliser par un clic simple. Soyez conscient que ce changement n'est pas dynamique : il ne peut pas être modifié en cours de programme. Le module Choix fonctionne comme un module de pilotage avant la compilation du graphe.

Comment marche le module Choix ?

La macro Choix est disponible dans la Bibliothèque MUSTIG, mais il est intéressant de voir par un exemple simple comment il a été créé. D'abord, allons chercher un module Vecteur - >Scalaire de la Bibliothèque et modifions-le comme montré ci-dessous :

L'attribut d'étiquetage Étiquettes contient un module d'entrée de texte rempli de 4 noms de fenêtres d'apodisation communément utilisées que nous voulons pouvoir choisir avec la souris. Le contenu du module Module été remplacé par un report esclave.

Comme le module Vecteur - >Scalaire est un module d'interface souris, les étiquettes du texte sont affichées sur sa face avant automatiquement. Nous redimentionnons la face avant correctement afin qu'elle ressemble à la figure ci-dessous :

Si nous cliquons sur une des étiquettes sur la face avant avec la souris, par exemple la troisième étiquette, son texte est automatiquement copié dans le report :

et entouré d'un cadre mince sur la face avant :

La borne de sortie du module est donc un report esclave de nom " Blackmann ". Donc, si nous incluons ce module Vecteur - >Scalaire dans une macro nommée Fenêtre d'apodisation, qui contient un report maître du même nom, une connexion invisible sera fait entre les reports maître et esclave.

L'intérieur de cette nouvelle macro pourrait ressembler à celui ci-dessous (voir Créer une macro):

Quatre reports maîtres ont été amenés dans la macro et nommés avec exactement les mêmes étiquettes que dans le module Vecteur - >Scalaire. Attention à ne pas entrer un signe <espace> supplémentaire par accident !

Attention : Le nom de ces étiquettes est sensible à la casse. Il peut contenir tout caractère ASCII et peut être aussi long que vous voulez. Cependant, il ne doit pas contenir de retour chariot : cette possibilité est réservée pour les reports aiguilleurs (voir les reports aiguilleurs).

Quand une option est sélectionnée avec la souris sur la face avant de la macro Vecteur - >Scalaire, une liaison invisible est créé entre le report maître et le report esclave. C'est à dire, la borne de sortie de la macro est reliée à une de ses bornes d'entrée selon l'option sélectionnée.

Donc, c'est presque terminé. Tout ce qui reste à faire est maintenant de redimentionner la face avant de la macro Fenêtre d'apodisation que nous venons de créer et faire glisser dedans la face avant du module Vecteur - >Scalaire pour créer une liaison hypertexte (voir les Images de macros). Reliez les différents algorithmes des fenêtres d'apodisation en conséquence.

Nous obtenons un programme semblable à celui montré au-dessous :

En cliquant sur une option, nous relions directement la sortie à une des fenêtres d'apodisation !

Le module Choix

Le module Choix fourni dans la Bibliothèque MUSTIG est identique à celui créé dans le paragraphe précédent, mais il a seulement trois choix possibles étiquetés Calc. 1, Calc. 2 et Calc. 3 par défaut :

Vous pouvez changer bien sûr les étiquettes, ou ajoutee ou enlever des options comme suit:

3-13-8. Les vecteurs

Les attributs supportés : Étiquettes, taille de l'Étiquette, Ecart.

Le module d'interface utilisateur Vecteur permet de définir un vecteur de valeurs. Les éléments du vecteur peuvent être changés en les éditant (Majuscule+Ctrl+Clic). Quand un élément est édité, les flèches de défilement permettent d'éditer l'élément précédent ou suivant du vecteur. L'exemple ci dessous contient l'attribut Etiquette pour fournir de l'information plus explicite à l'utilisateur de l'application :

L'intérieur de la macro est montré ci-dessous:

3-13-9. Comment initialiser la valeur de sortie d'une macro d'interface souris ?

Supposez que nous voulions que le résultat d'un calcul soit utilisé comme la valeur de sortie par défaut d'un module d'interface souris. Le langage MUSTIG offre la possibilité de communiquer une valeur par défaut au module d'interface. Pour cela, nous devons juste inclure un module d'impression scalaire ?????? dans la boîte du Module à l'intérieur de la macro de l'interface, comme montré ci-dessous:

Maintenant, nous créons une borne d'entrée par Majuscule+Clic sur le tour gauche du module, et relions cette borne d'entrée au module d'impression scalaire :

Le dernier pas est de relier cette borne d'entrée à une valeur scalaire. Ici la valeur scalaire est fournie par un simple module d'entrée scalaire à la valeur 10, mais bien sûr il pourrait être fourni par des calculs plus complexes :

La valeur sur la borne de l'entrée que nous avons créé est utilisée comme la valeur initiale de la sortie. En cliquant sur les flèches de la macro d'interface nous pouvons augmenter ou diminuer la sortie à partir de sa valeur 10 initiale.

3-13-10. Comment garder la valeur sélectionnée quand le programme est réinitialisé ?

Le programme de la section précédente permet d'initialiser un opérateur d'incrémentation avec le résultat scalaire d'un calcul. L'utilisateur a l'occasion de changer la valeur de la sortie du module d'interface souris en cliquant sur les flèches.

Mais si nous réinitialisons le macro ou fermons / réouvrons le programme, la valeur de sortie initiale de la macro d'interface souris est encore 10 !

Pour sauvegarder la dernière valeur de sortie et l'utiliser comme la valeur initiale quand le module d'interface est réinitialisé, nous devons ajouter un attribut Sauve dans l'intérieur de la macro d'interface souris, puis y faire glisser un module d'entrée de chaîne de caractères. Donc, l'intérieur de la macro d'incrémentation devient :

Quand la valeur de sortie est changée par un clic souris, le module d'entrée de chaîne de caractères à l'intérieur de l'attribut Sauve sauve la valeur d'initialisation entrée sur la borne d'entrée. Quand le programme est réinitialisé, MUSTIG compare la valeur de l'initialisation avec la valeur ainsi sauvegardée.

Si elles sont égales, cela veut dire que la valeur d'initialisation sur la borne d'entrée n'a pas été changée. Dans ce cas, la valeur de la sortie n'est pas mise à la valeur de l'initialisation : elle garde la dernière valeur qu'elle avait quand le programme a été réinitialisé ou a été fermé.

Sinon, si la valeur de l'initialisation n'est pas égale à la valeur sauvegardée, cela veut dire que l'utilisateur a changé la valeur d'initialisation. Dans ce cas, la valeur de la sortie de la macro d'interface est mise à cette nouvelle valeur d'initialisation.

3-13-11. Les interfaces souris composites

Beaucoup d'exemples de macros d'interface souris composites sont donnés dans le fichier Interface.MTG fourni avec le logiciel : sélection directe d'un scalaire parmi une gamme de couleurs, interfaces bouclées, etc. Des exemples sont montrés ci-dessous:

Un exemple d'interface composite complexe, avec une boucle de réaction

La structure présentée dans cette section est un peu complexe, et pourtant puissante. Vous devriez l'étudier seulement si vous êtes déjà familier avec MUSTIG, en particulier avec les opérateurs d'interface souris de base. Voir les sections appropriées dans ce manuel pour s'habituer à programmer des interfaces souris en langage MUSTIG.

Cette application permet de choisir, dans une liste de menus, un menu particulier pour chaque jour de la semaine. Il utilise un opérateur d'interface souris bouclé. Nous commençons avec le programme suivant (disponible dans l'exemple interface.mtg) :

où le Choix de menu/c est une macro MUSTIG. Elle a un tableau de bord intermédiaire à partir duquel l'utilisateur peut choisir les menus :

Dans ce tableau de bord intermédiaire, les macros souris ont été mises en images pour être accédées directement.

La liste des menus qui ont été sélectionnés pour la semaine courante est affichée à côté de la liste cliquable des jours. L'utilisateur clique le jour qu'il veut, et choisit un menu de la liste globale à droite : son choix est encadré dans la liste des menus et la liste centrale est mise à jour.

Inversement, l'utilisateur peut éditer un article dans la liste centrale directement et entrer le nom d'un menu : son choix est alors encadré dans la liste des menus. Si le menu entré n'est pas un élément de la liste des menus globale, le choix est invalidé quand l'utilisateur clique un autre jour.

Cette double possibilité de choisir les menus est obtenue avec le programme suivant (contenu de la macro Choix de menu/c) :

La macro Choix du jour contient un opérateur d'interface souris (un bouton radio). Cet opérateur rend un vecteur selon la variable /c . Toutes ses valeurs sont zéro exceptée celle localisée à l'index sélectionné qui vaut 1.

Contenu de la macro Choix du jour

Contenu de la macro Pos/c

La macro Pos/c retourne alors l'index du jour actuellement sélectionné (de 0 à 6). Cela permet de couper le vecteur qui contient les choix courants d'après le jour choisi.

Le dernier opérateur d'interface souris que nous avons vu sur la face avant indique quels menus ont été choisis. Cet opérateur est l'opérateur d'interface souris Vecteur dont la boîte Module contient un module d'initialisation. Il est à l'intérieur de la macro Boucle et retourne une chaîne qui contient les menus choisis :

Contenu de la macro Boucle,

montrant la face avant de l'opérateur Vecteur

Contenu de l'opérateur Vecteur

Le module de Bibliothèque Chaines/c change la chaîne d'entrée fournie par l'opérateur d'interface souris en un vecteur de chaînes selon la variable /c . Chaque élément de ce vecteur est une ligne de la chaîne d'entrée.

Comment marche ce graphe?

Le jour courant est choisi avec la souris. à l'intérieur de la macro Choix du jour qui rend le nombre (index) du jour.

Le vecteur de chaînes qui contiennent les menus actuellement sélectionnés est coupé à cet index.

Cette chaîne coupée est utilisée comme valeur d'initialisation de l'opérateur d'interface V_Scalar qui contient la liste des menus disponibles. Le contenu de ce module est montré ci-dessous:

Face avant de l'opérateur d'interface souris V_Scalar

Contenu de l'opérateur V_Scalar

L'utilisateur peut cliquer sur la face avant pour sélectionner un autre menu (c'est à dire, une autre chaîne), différente de la chaîne d'initialisation. Cette sélection est envoyée à la sortie.

La macro Bibliothèque Ch_val/c (laquelle permet de changer un élément d'un vecteur ¾  soit numérique soit alphanumerical ¾ à un index donné) change alors le vecteur de chaînes menu du jour en remplaçant le menu antérieur par le nouveau choix de l'utilisateur.

La macro Boucle contient un opérateur d'interface souris du Vecteur avec une chaîne d'initialisation. La chaîne de sortie peut être modifiée par l'utilisateur à partir de la face avant par la souris.

Cette chaîne qui contient les menus de la semaine est coupée en un vecteur de chaînes et renvoyée au commencement de la boucle. Elle est prête à être encore coupée et changée si l'utilisateur sélectionne un autre jour.

Cependant, ce programme ne travaille pas correctement bien que la structure paraisse logique et correcte. Voici pourquoi.

Il y a un bogue !!!

Le graphe proposé ne travaille pas correctement. Si nous fermons toutes les macros sauf le tableau de bord et commençons par l'état suivant (le menu de jeudi est Pizza) :

et clique lundi pour sélectionner un nouveau menu pour ce jour, nous obtenons le panneau suivant :

Nous nous attendions à ce que l'ancien menu du lundi (salade mexicaine) reste dans la liste jusqu'à ce que nous choisissions une sélection différente dans la liste de menus disponibles. Mais cette ancienne valeur a été remplacée par le nouveau menu de jeudi (Pizza), correspondant au changement précédent ! Nous ne savons plus quelle était l'ancienne sélection pour lundi !

Influence de l'ordre dans lequel les boîtes sont exécutées

En cliquant lundi, l'utilisateur modifie l'index auquel le vecteur de chaînes qui contient les menus journaliers doit être coupé. Ce changement dans l'index modifie deux modules d'impression alphanumérique utilisés pour initialiser le contenu de deux opérateurs souris avec des chaînes :

Mais l'ordre dans lequel ces opérations sont calculées n'est pas fixé. Il peut même être différent si quelques macros sont ouvertes ou quelques modules d'initialisation sont visibles. Ce peut même être différent d'une exécution à une autre, selon ce qui a été changé.

Dans notre cas, le changement d'index (le jour 3 devient jour 0) est transmis au module Ch_val/c en premier. Donc, le premier élément du vecteur de chaînes (les menus de la semaine) ¾ c'est à dire, le menu de lundi, est changé à la valeur présentée à la sortie de la liste des menus avant que le changement d'index soit exécuté. Donc, le menu de lundi se change automatiquement à celui de jeudi au lieu de garder sa valeur présente !

Le remède

Ce que nous voulons est que ce module Ch_val/c soit calculé après que le changement dans index ait été transmis au module Coupe/c pour modifier la valeur de l'initialisation pour le menu de lundi. Si ces opérations sont exécutées correctement, le panneau devrait être comme ci dessous quand l'utilisateur clique lundi.

La sélection de lundi a encore sa valeur antérieure (salade mexicaine) à la fois dans le champ Menu Choisi et le champ Liste des menus , jusqu'à ce que l'utilisateur sélectionne un autre menu pour ce jour.

Cela est fait en incluant l'opérateur d'interface souris Vecteur localisé au-dedans de la macro Boucle dans un attribut d'interface souris Sauve. Le contenu de la nouvelle macro Boucle devient donc :

L'attribut Sauve indique que les macros contenues dedans devraient être recalculées en dernir quand une modification du graphe est exécutée. Le comportement de ce programme modifié satisfait à nos exigences.

Un autre exemple: choisir plusieurs lignes composites

La même technique permet de choisir la couleur d'un ensemble de courbes à partir d'une palette de couleurs. Il est utilisé dans toutes les macros 2D de la Bibliothèque de tracés (Visu_2D_n, Visu_2D_N). Regardez Choix couleur multiple dans le fichier d'exemple Interface.mtg.