Previous Next Up Title Contents General Index Functions Index Bookshelf

1.3.6. L'AFFICHAGE D'UN RÉSEAU DE STRUCTURES SUR UN POSTE DE TRAVAIL

Une fois le réseau de structure créé, l'étape suivante consiste à afficher l'ensemble des structures de ce réseau. La fonction ppost_struct établit un lien entre un réseau de structures et un poste de travail. Si ce lien n'existe pas, aucune structure du réseau n'est affichée.

ppost_struct possède 3 paramètres : l'identificateur (ws_id) du poste de travail , l'identificateur (struct_id) de la structure racine du réseau, et une priorité spécifiant l'ordre relatif d'affichage lorsque plusieurs réseaux doivent être affichés. Lorsque on appelle la fonction ppost_struct (ws_id, struct_id, priority), on dit que la structure struct_id est postée sur le poste de travail ws_id.

Pour que toutes les structures d'un réseau soient affichées, il est nécessaire et suffisant de poster la structure racine de ce réseau (il ne faut pas poster toutes les structures du réseau). Si la CSS est composée de plusieurs réseaux (quand la CSS n'est pas connexe), il faut poster les racines de tous les réseaux afin d'afficher tous ces réseaux. L'ordre d'affichage de ces réseaux est alors déterminé par la priorité (3ième paramètre de la fonction ppost_struct).

Le lien entre un réseau de structures et un poste de travail reste établi même après une modification de ce réseau. Il est donc inutile de réappeler ppost_struct après une modification du réseau. Pour supprimer un lien entre un réseau et un poste de travail, il faut appeler punpost_struct (qui rompt un lien d'un réseau) ou appeler punpost_all_structs (qui rompt tous les liens d'un poste de travail) ou changer l'identificateur de structure de la racine du réseau.

Le traversal et la porté des attributs

Le fait de poster une structure n'implique pas en général son affichage sur le poste de travail. Pour réaliser cette affichage, il faut appeler la fonction predraw_all_structs (ws_id, ...). Celle ci se charge d'afficher toutes les structures de tous les réseaux postés sur le poste de travail.

predraw_all_structs active un processus appelé traversal qui permet en parcourant un réseau de structures de générer sur le poste de travail, les éléments graphiques constituant le réseau.

Le traversal est le processus qui interprète et exécute les éléments de structure, applique les transformations géométriques, associe les attributs aux primitives et affiche l'image résultante. Le traversal d'un réseau commence à l'élément 1 de la structure racine, les éléments sont ensuite traités séquentiellement et l'analyse se termine au dernier élément de la structure racine.

Lorsque le réseau est composé de plusieurs structures (la racine possède au moins un élément pexec_struct) le traversal interprète les premiers éléments de la structure racine jusqu'au premier élément pexec_struct(S). Le traversal de la structure racine est interrompu, et un traversal de la structure d'identificateur S est lancé. Lorsque ce dernier est fini, le traversal de la structure racine est relancé à partir de l'élément suivant le pexec_struct (S).

Le schéma suivant donne un exemple de CSS (les éléments e**) sont quelconques sauf de type pexec_struct

Si la fonction ppost_struct (ws_id, S3, 0.) est appelée, le traversal déclenché par l'appel à predraw_all_structs interprétera les éléments de structure e** dans l'ordre suivant :

e31 - e41 - e42 - e43 - e44 - e45 - e33 - e21- e22 - e41 - e42 - e43 - e44 - e45 - e24 - e25 - e35

On remarque que pour l'exemple précédent, si certains des éléments e4* sont des primitives graphiques, celles ci seront affichées 2 fois sur le poste de travail ws_id.

Si ensuite la fonction ppost_struct (ws_id, S2, 1.) est appelée, le traversal déclenché par l'appel à predraw_all_structs interprétera les éléments de structure e** dans l'ordre suivant :

e31 - e41 - e42 - e43 - e44 - e45 - e33 - e21- e22 - e41 - e42 - e43 - e44 - e45 - e24 - e25 - e35

e21- e22 - e41 - e42 - e43 - e44 - e45 - e24 - e25

Deux réseaux de structures (un de racine S3 et l'autre de racine S2) ont été postés sur le poste de travail ws_id, donc ici cela entraîne 3 parcours de la structure S4 par le traversal. Remarque : le traversal commence par afficher le réseau dont la priorité est la plus faible (c'est le 3ième paramètre de la fonction ppost_struct).

Pendant le traversal , le système garde une trace de la valeur courante des attributs. La valeur courante d'un attribut peut être une valeur par défaut, une valeur héritée, ou une valeur assignée qui est le résultat d'un élément d'assignation d'attribut. Chaque fois que le traversal analyse une primitive graphique, il lui applique la valeur courante des attributs et des transformations.

Lorsque le traversal d'une structure mère rencontre un élément pexec_struct (fille), ce traversal est suspendu, les attributs courants sont sauvegardés dans une pile et un traversal de la structure fille est lancé. Lorsque ce dernier est terminé, les attributs de la pile sont restitués et le traversal de la structure mère reprend là où il avait été suspendu.

Ce concept d'héritage des attributs permet d'appeler une structure à partir de plusieurs structures mères avec des valeurs d'attributs différentes à chaque fois. La structure fille peut également modifier la valeur des attributs et des transformations sans affecter l'environnement des structures mères.

Exemple d'héritage des attributs text colr ind et line colr ind avec la CSS suivante :

Si la fonction ppost_struct (ws_id, S3, 0.) est appelée, les primitives sont affichées par le traversal dans l'ordre suivant et avec les attributs suivants :

la primitive ppolyline (plist1) est affichée avec un line colr index =1

la primitive ptext (...,text1) est affichée avec un text colr index =3

la primitive ppolyline (plist3) est affichée avec un line colr index =1

la primitive ppolyline (plist5) est affichée avec un line colr index =2

la primitive ptext (...,text2) est affichée avec un text colr index =3

la primitive ppolyline (plist6) est affichée avec un line colr index =4

la primitive ppolyline (plist7) est affichée avec un line colr index =4

la primitive ppolyline (plist4) est affichée avec un line colr index =2

la primitive ppolyline (plist2) est affichée avec un line colr index =1

Remarque : Dans cet exemple, la fonction pset_text_colr_ind étant présente uniquement au début de la structure racine S3, l'attribut couleur de texte est pris en compte par toutes les primitives text des 3 structures.


Previous Next Up Title Contents General Index Functions Index Bookshelf