Previous Next Up Title Contents General Index Functions Index Bookshelf

9. VISIBILITÉ ET DÉTECTABILITÉ DES STRUCTURES


VISIBILITE

La plupart des applications graphiques interactives ont besoin, à un moment donné de l'exécution, de rendre provisoirement invisible une structure ou certaines primitives d'une structure. Il existe plusieurs solutions pour gérer la visibilité. 3 méthodes parmi les plus simples sont présentées :

- par changement d'identificateur

Si la scène S comporte n structures d'identificateurs respectifs S1 à Sn, pour rendre provisoirement invisible la structure Si il suffit de la renommer en lui donnant comme nouvel identificateur une valeur différente de S, S1...Sn. Le plus simple est de choisir systématiquement des valeurs > 0 pour S, S1...Sn et de renommer Si en -Si. Lors d'un redraw, lorsque le traversal rencontre l'élément PEXST (Si) dans la scène, la structure Si n'existant plus avec cet identificateur elle n'est pas tracée. Pour renommer une structure il suffit d'appeler la fonction PHIGS PCSTID (old_struct_id, new_struct_id).

Ainsi, les 3 instructions suivantes suffisent à changer la visibilité de la structure d'identificateur Si

CALL PCSTID (Si,-Si)
Si = -Si
CALL PRST (WKID, PALWAY);
Cependant, si par la suite la scène doit être reconstruite, il faut que celle ci fasse toujours référence à la valeur absolue de la variable Si

- par reconstruction de la scène

Si la scène S comporte n structures d'identificateurs respectifs S1 à Sn, pour rendre provisoirement invisible la structure Si il suffit de l'enlever de la liste des structures de la scène : soit la scène fait référence à une structure de moins, soit on remplace la référence à la structure Si dans la scène par une référence à une structure n'existant pas. Comme avec la méthode précédente, le plus simple est de changer dans la scène la référence à la structure Si par la référence à la structure -Si (si celle-ci n'existe pas). Ce changement peut être fait soit par édition de la structure de la scène, soit par la reconstruction de la scène comme suit :

idlist(i) = -idlist(i)
CALL TSCENE (S,numst, idlist, viewid)
CALL PRST (WKID,PALWAY)
- par filtre d'invisibilité

Cette notion de filtre permet de gérer la visibilité des structures pour un poste de travail donné contrairement aux 2 méthodes précédentes qui gèrent le visibilité globalement pour tous les postes de travail. En plus, cette méthode permet de gérer la visibilité d'un certain nombre de primitives dans une structure, sans modification de la CSS lors du changement de visibilité.

Pour que la visibilité soit gérée par filtre, il faut que les structures concernées contiennent des attributs name set insérés par la fonction PHIGS PADS. Pour comprendre entièrement la notion de Name Set et de leurs filtres associés, il est conseillé de se référer aux paragraphes "Name Set" du Manuel de Référence GPHIGS-G5G.

PHIGURE facilite la gestion de visibilité par filtre en insérant systématiquement un élément PADS dans chaque structure créée par PHIGURE (on peut éviter cette insertion systématique en appelant TSEMST). La visibilité des structures créées par PHIGURE peut alors se gérer de la façon suivante:

Si la scène S comporte n structures d'identificateurs respectifs S1 à Sn et si l'application doit pouvoir rendre interactivement visible ou invisible chacune d'entre elles, il est nécessaire de créer un tableau de n entiers valant respectivement ±S1, ±S2, ±S3,... ±Sn. Ce tableau doit être utilisé en entrée de la fonction PHIGS PSIVFT (set invisibility filter) comme ensemble d'inclusion du filtre d'invisibilité. (par la suite on appellera ce tableau ensemble d'inclusion). Au moment d'un retracé si le ième élément de l'ensemble d'inclusion vaut +Si alors la structure Si sera invisible sinon elle sera visible. Pour changer interactivement la visibilité de la structure Si il suffit de changer le signe du ième élément du tableau en entrée de la fonction PSIVFT (à condition bien sûr que l'identificateur Si soit non nul).

Exemple : création d'une scène de 5 structures d'identificateur respectif 1, 2, 3, 4, 5 avec les structures 3 et 5 invisibles sur le poste de travail d'identificateur WKID.

idlist(1) = 1
idlist(2) = 2
idlist(3) = 3
idlist(4) = 4
idlist(5) = 5
call TSCENE (S, 5,idlist, viewid)

invstr(1) = -1
invstr(2) = -2
invstr(3) = 3
invstr(4) = -4
invstr(5) = 5
call PSIVFT (WKID, 5,invstr, 0,0)
call PRST (WKID,PALWAY)

Aprés cette séquence d'appels les structures 3 et 5 de la scène sont invisibles. Pour changer le statut de visibilité de la ième structure de la scène il suffit alors de faire les traitements suivants :

invstr(i) = -invstr(i)
call PSIVFT (WKID, 5,invstr, 0,0)
call PRST (WKID,PALWAY)

DETECTABILITE

La détectabilité des structures se gère obligatoirement par filtre. Mais le filtre utilisé est appelé filtre de détectabilité et il est défini sur un poste de travail par l'appel de la fonction PSPKFT (set pick filter). Néanmoins, au moment d'un retracé si le ième élément de l'ensemble d'inclusion vaut +Si alors la structure Si sera détectable sinon elle sera indétectable. Ainsi, pour l'exemple précédent les structures 3 et 5 sont détectables et les structures 1, 2 et 4 sont indétectables.

Ci après on trouvera un rappel décrivant les fonctions PHIGS PCSTID, PSIVFT et PSPKFT, et une description des fonctions PHIGURE TADS et TRES.


Previous Next Up Title Contents General Index Functions Index Bookshelf