Suiv.: 7.3 Affichages particuliers
Sup.: 7 Programmes internes
Préc.: 7.1 sous-programmes d'interrogation
Index
Table des matières
SUBROUTINE POSIT(XIN, YIN, XOUT, YOUT, I) REAL XIN, YIN, XOUT, YOUT INTEGER I
Ce sous-programme convertit les coordonnées de l'objet en centimètres sur écran ou l'inverse.
En entrée XIN, YIN
En sortie XOUT, YOUT
Si I=0 XIN, YIN point dans l'espace utilisateur
XOUT, YOUT homologue en centimètres
Si I=1 XIN, YIN en centimètres
XOUT, YOUT homologue dans l'espace utilisateur
Si I=2 XOUT, YOUT point courant dans l'espace utilisateur
Les sous-programmes qui suivent permettent de définir la position d'un point ou d'une droite relativement au masque défini pour l'objet :
SUBROUTINE QFEN(RECTI, F, RECT) REAL RECTI(4), RECT(4), F(4)
Calcule le plus grand rectangle homologue à RECTI entrant dans F
Entrée: RECTI rectangle initial (seuls les dx et dy sont importants) et
F rectangle dans lequel il tiendra
Sortie: RECT rectangle homologue à RECTI entrant dans F.
SUBROUTINE QMSQ(MASQUI, F, MASQUE) REAL MASQUI(4), MASQUE(4), F(4)
Calcule un masque non déformant permettant de voir MASQUI dans la fenêtre F.
Entrée: MASQUI masque initial et
F fenêtre dans laquelle on veut voir.
Sortie: MASQUE masque non déformant pour la fenêtre.
SUBROUTINE SCSPT2(P, MASQ, FREJET) REAL MASQ(4) REAL P(4) LOGICAL FREJET
MASQ est un masque rectangulaire défini par:
MASQ(1) = XMIN
MASQ(2) = XMAX
MASQ(3) = YMIN
MASQ(4) = XMAX
P(1:2) sont les coordonnées d'un point dans un espace 2D. P(3) = 0. P(4) = 1.
A la sortie on obtient :
FREJET =.TRUE. : P n'est pas à l'intérieur du rectangle défini par MASQ.
FREJET =.FALSE. : P est à l'intérieur du rectangle défini par MASQ.
SUBROUTINE SCSPT3(P, MASQ, FREJET) REAL P(4), MASQ(6) LOGICAL FREJET
MASQ est un masque parallelépipèdique défini par :
MASQ(1) = XMIN
MASQ(2) = XMAX
MASQ(3) = YMIN
MASQ(4) = XMAX
MASQ(5) = ZMIN
MASQ(6) = ZMAX
P(1:3) sont les coordonnées d'un point dans un espace 3D. P(4) = 1.
A la sortie on obtient :
FREJET =.TRUE. P n'est pas à l'intérieur du parallélépipède défini par MASQ.
FREJET =.FALSE. P est à l'interieur du parallélépipède défini par MASQ.
SUBROUTINE SCSO2D(P1, P2, MASQ, FREJET, FCLIP2) REAL P1(4), P2(4), MASQ(4) LOGICAL FREJET, FCLIP2
MASQ est un masque rectangulaire défini par:
MASQU(1) = XMIN
MASQU(2) = XMAX
MASQU(3) = YMIN
MASQU(4) = XMAX
P1(1:3), P2(1:3) définissent un segment. P1(4) = 1. P2(4) = 1.
Au retour on obtient :
Dans P1 et P2 les extrémités de la partie du segment intérieure au rectangle défini par MASQ.
FREJET =.TRUE. si aucun point du segment n'appartient au rectangle. .FALSE. sinon
FCLIP2 =.TRUE. si le point P2 est en dehors du rectangle. .FALSE. sinon
SUBROUTINE SCSO3D(P1, P2, MASQ, FCLIPZ, FREJET, FCLIP2) REAL P1(4), P2(4), MASQ(4) LOGICAL FREJET, FCLIP2, FCLIPZ
MASQ est un masque parallelépipèdique défini par :
MASQU(1) = XMIN
MASQU(2) = XMAX
MASQU(3) = YMIN
MASQU(4) = XMAX
Le cas échéant :
MASQU(5) = ZMIN
MASQU(6) = ZMAX
P1(1:3), P2(1:3) définissent un segment. P1(4) = 1. P2(4) = 1.
Ce sous-programme effectue un découpage pyramidal du segment P1 P2.
On suppose qu'on se trouve dans le cas normalisé où l'observateur est à l'origine et regarde dans la direction de Z négatifs (voir la description du sous-programme NRMLST).
La pyramide de vision est limitée par les plans X-Z=0, X+Z=0, Y+Z=0, Y-Z=0. au retour il renvoie :
Dans P1 et P2 les extrémités de la partie du segment intérieure au cône.
FCLIPZ =.TRUE. : le cône est en plus limité par les plans :
Z = MASQ(5)
Z = MASQ(6)
FREJET =.TRUE. si aucun point du segment n'appartient au cône. .FALSE. sinon
FCLIP2 =.TRUE. si le point P2 est en dehors du cône. .FALSE. sinon
SUBROUTINE SCSC3D(P1, P2, MASQ, FREJET, FCLIP2) REAL P1(4), P2(4), MASQ(4) LOGICAL FREJET, FCLIP2
Effectue un découpage par un parallélépipède rectangle du segment P1 P2. MASQ est un masque parallelépipèdique défini par :
MASQU(1) = XMIN
MASQU(2) = XMAX
MASQU(3) = YMIN
MASQU(4) = XMAX
Le cas échéant :
MASQU(5) = ZMIN
MASQU(6) = ZMAX
P1(1:3), P2(1:3) définissent un segment. P1(4) = 1. P2(4) = 1.
au retour il renvoie:
Dans P1 et P2 les extrémités de la partie du segment intérieure au parallélépipède.
FREJET =.TRUE. si aucun point du segment n'appartient au parallélépipède. .FALSE. sinon
FCLIP2 =.TRUE. si le point P2 est en dehors du parallélépipède. .FALSE. sinon
LOGICAL FUNCTION APPART(A, B, X, Y, DX, DY) REAL A, B, X, Y, DX, DY
Le point A, B est-il dans le rectangle X, Y, DX, DY ? Si oui APPART vaut .TRUE.
LOGICAL FUNCTION TSTRJT(I)
Renvoie la valeur de FREJET après un appel de LIN2TO ou LIN3TO. .TRUE. si rejet total de la ligne. I est un argument factice.
LOGICAL FUNCTION TSTRJX(I)
Teste si un texte est rejeté ou pas. .TRUE. si rejet total ou rejet de la 2eme extremité. I est un argument factice.
SUBROUTINE SHUNT2(LOGIC) LOGICAL LOGIC
si LOGIC=.TRUE. permet de ne pas exécuter la génération de code graphique des images 2D (LIN2TO, MOV2TO, .... Bibliothèque 2D ...). A la place on exécute le sous-programme ACTIO2 :
SUBROUTINE ACTIO2(X1, Y1, X2, Y2) REAL X1, X2, Y1, Y2
Cette procédure est écrite par l'utilisateur.
Les coordonnées (X1, Y1), (X2, Y2) sont en centimètres.
Elle récupère ce qui aurait été tracé sans SHUNT2.
SUBROUTINE SHUNT3(LOGIC) LOGICAL LOGIC
Si LOGIC=.TRUE. permet de ne pas exécuter la génération de code graphique des images à 3 dimensions (LIN3TO, MOV3TO, ... Bibliothèque 3D ...)
A la place on exécute le sous-programme ACTIO3 :
SUBROUTINE ACTIO3(X1, Y1, Z1, X2, Y2, Z2) REAL X1, Y1, Z1, X2, Y2, Z2
Cette procédure est écrite par l'utilisateur. Les coordonnées (X1, Y1, Z1), (X2, Y2, Z2) sont en centimètres.
Elle récupère ce qui aurait été tracé sans SHUNT3.