Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 7.3 Affichages particuliers Sup.: 7 Programmes internes Préc.: 7.1 sous-programmes d'interrogation Index Table des matières


7.2 Position et clipping

      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.


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 7.3 Affichages particuliers Sup.: 7 Programmes internes Préc.: 7.1 sous-programmes d'interrogation Index Table des matières