/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   F O N C T I O N S  :                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier, se trouvent toutes                                                                            */
/*                  les definitions de macros relatives                                                                              */
/*                  aux fonctions.                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiidc/fonction.1$DEF' :                                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P P O R T U N I T E   D E   C O M P I L E R   C E   M O D U L E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    CUBI7
#    define    __VERSION__COMPILER_LE_GRAPHIQUE_CUBI7                                                                                   \
                                        /* La compilation de la bibliotheque est conditionnelle...                                   */
#Aifdef   CUBI7
#Eifdef   CUBI7

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_CUBI7
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   F O R M A T   " F L O T T A N T "   D U   C U B I 7  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    Float_cubi7                                                                                                              \
                         vrai_Float_de_base                                                                                             \
                                        /* La bibliotheque ne connait que la simple precision...                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O N C T I O N S   D E   P A S S A G E   D E S                                              */
/*        C O O R D O N N E E S   A U X   L O N G U E U R S   E T   I N V E R S E M E N T  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    C7XR(abscisse)                                                                                                           \
                         COOR(abscisse,Xmin7)                                                                                           \
                                        /* Passage d'un 'X' a une longueur,                                                          */
#    define    C7YR(ordonnee)                                                                                                           \
                         COOR(ordonnee,Ymin7)                                                                                           \
                                        /* Passage d'un 'Y' a une longueur.                                                          */
#    define    C7ZR(hauteur)                                                                                                            \
                         COOR(hauteur,Zmin7)                                                                                            \
                                        /* Passage d'un 'Z' a une longueur.                                                          */
#    define    C7XA(longueur)                                                                                                           \
                         COOA(longueur,Xmin7)                                                                                           \
                                        /* Passage d'une longueur a un 'X',                                                          */
#    define    C7YA(longueur)                                                                                                           \
                         COOA(longueur,Ymin7)                                                                                           \
                                        /* Passage d'une longueur a un 'Y',                                                          */
#    define    C7ZA(longueur)                                                                                                           \
                         COOA(longueur,Zmin7)                                                                                           \
                                        /* Passage d'une longueur a un 'Z',                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   " P L A N   D E   T R A V A I L "   1 0 2 4 x 1 0 2 4  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    logXY7                                                                                                                   \
                         DIX

#    define    logX7                                                                                                                    \
                         logXY7                                                                                                         \
                                        /* Logarithme de la dimension horizontale,                                                   */
#    define    logY7                                                                                                                    \
                         logXY7                                                                                                         \
                                        /* Logarithme de la dimension verticale.                                                     */
#    define    Xmin7                                                                                                                    \
                         COORDONNEE_MINIMALE                                                                                            \
                                        /* Abscisse minimale,                                                                        */
#    define    Xmax7                                                                                                                    \
                         COND(IL_FAUT(CUBI7_____generer_de_la_video)                                                                    \
                             ,Xmax                                                                                                      \
                             ,COORDONNEE_MAXIMALE(logX7)                                                                                \
                              )                                                                                                         \
                                        /* Abscisse maximale.                                                                        */
#    define    Xmax7_700                                                                                                                \
                         MAX2(Xmax7,C7XA(TRMU(700)))                                                                                    \
                                        /* Veritable abscisse maximale ; malheureusement, je ne peux pas mieux parametrer (700)...   */
#    define    dimX7                                                                                                                    \
                         DIMENSION(Xmin7,Xmax7)                                                                                         \
                                        /* Dimension de l'axe horizontal.                                                            */
#    define    PasX7                                                                                                                    \
                         PAS_COORDONNEE                                                                                                 \
                                        /* Pas horizontal.                                                                           */
#    define    Ymin7                                                                                                                    \
                         COORDONNEE_MINIMALE                                                                                            \
                                        /* Ordonnee minimale,                                                                        */
#    define    Ymax7                                                                                                                    \
                         COND(IL_FAUT(CUBI7_____generer_de_la_video)                                                                    \
                             ,Ymax                                                                                                      \
                             ,COORDONNEE_MAXIMALE(logY7)                                                                                \
                              )                                                                                                         \
                                        /* Ordonnee maximale.                                                                        */
#    define    Ymax7_576                                                                                                                \
                         MAX2(Ymax7,C7YA(TRMU(576)))                                                                                    \
                                        /* Veritable ordonnee maximale ; malheureusement, je ne peux pas mieux parametrer (576)...   */
#    define    dimY7                                                                                                                    \
                         DIMENSION(Ymin7,Ymax7)                                                                                         \
                                        /* Dimension de l'axe vertical.                                                              */
#    define    PasY7                                                                                                                    \
                         PAS_COORDONNEE                                                                                                 \
                                        /* Pas vertical.                                                                             */
#    define    Zmin7                                                                                                                    \
                         Zorigine                                                                                                       \
                                        /* 'Z' minimal...                                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E N O R M A L I S A T I O N   D E S   A X E S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    _cDENORMALISE_OX7(coordonnee)                                                                                            \
                         _cDENORMALISE_AXES(Xmin7,dimX7,coordonnee)
#    define    _lDENORMALISE_OX7(longueur)                                                                                              \
                         _lDENORMALISE_AXES(dimX7,longueur)
                                        /* Normalisation d'une longueur sur l'axe OX ; l'unite represente [Xmin7,Xmax7].             */
#    define    _cDENORMALISE_OY7(coordonnee)                                                                                            \
                         _cDENORMALISE_AXES(Ymin7,dimY7,coordonnee)
#    define    _lDENORMALISE_OY7(longueur)                                                                                              \
                         _lDENORMALISE_AXES(dimY7,longueur)
                                        /* Normalisation d'une longueur sur l'axe OY ; l'unite represente [Ymin7,Ymax7].             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   F A I R E   L E   R A P P O R T   E N T R E   L E S   D E U X   F O R M A T S   D ' I M A G E S  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    HOMOTHETIE_HORIZONTALE_CUBI7(x)                                                                                          \
                         SCAL(x,FLOT(dimX),FLOT(dimX7))                                                                                 \
                                        /* Afin de prendre en compte les deux formats possibles d'images...                          */
#    define    HOMOTHETIE_VERTICALE_CUBI7(y)                                                                                            \
                         SCAL(y,FLOT(dimY),FLOT(dimY7))                                                                                 \
                                        /* Afin de prendre en compte les deux formats possibles d'images...                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N F I G U R A T I O N   M A T E R I E L L E  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Denumer08(INIS(_carte_GEC,UN)
                                        /* Carte 'GEC' (generateur de contours),                                                     */
              ,_carte_GES
                                        /* Carte 'GES' (generateur de segments horizontaux),                                         */
              ,_carte_AMD
                                        /* Carte 'AMD' (micro-processeur en tranche),                                                */
              ,_carte_CAMI
                                        /* Carte 'CAMI' (carte d'acces a la memoire d'images),                                       */
              ,_carte_VISU
                                        /* Carte 'VISU' (carte de visualisation),                                                    */
              ,_carte_MEMOA
                                        /* Carte 'MEMOA' (premier bloc de la memoire d'images : plans 0 et 2),                       */
              ,_carte_MEMOB
                                        /* Carte 'MEMOB' (premier bloc de la memoire d'images : plans 1 et 3).                       */
              ,DERNIERE_carte
         ,configuration_materielle_CUBI7
          );
                                        /* Liste des cartes disponibles sur le CUBI7.                                                */
#    define    carte_GEC                                                                                                                \
                         ENUM(_carte_GEC)
#    define    carte_GES                                                                                                                \
                         ENUM(_carte_GES)
#    define    carte_AMD                                                                                                                \
                         ENUM(_carte_AMD)
#    define    carte_CAMI                                                                                                               \
                         ENUM(_carte_CAMI)
#    define    carte_VISU                                                                                                               \
                         ENUM(_carte_VISU)
#    define    carte_MEMOA                                                                                                              \
                         ENUM(_carte_MEMOA)
#    define    carte_MEMOB                                                                                                              \
                         ENUM(_carte_MEMOB)
Dstruct01(configuration_cubi7
         ,BLOC(
               DEFV(vrai_Positive_de_base,AMD_present:BIT);
               DEFV(vrai_Positive_de_base,GEC_present:BIT);
               DEFV(vrai_Positive_de_base,GES_present:BIT);
               DEFV(vrai_Positive_de_base,utiliser_AMD:BIT);
               DEFV(vrai_Positive_de_base,utiliser_GEC:BIT);
               DEFV(vrai_Positive_de_base,utiliser_GES:BIT);
               DEFV(vrai_Positive_de_base,AMD_present_et_l_utiliser:BIT);
               DEFV(vrai_Positive_de_base,GEC_present_et_l_utiliser:BIT);
               DEFV(vrai_Positive_de_base,GES_present_et_l_utiliser:BIT)
               )
         ,NOM_VIDE
          );
                                        /* Definition de la configuration materielle du CUBI7.                                       */
TypedefP(configuration,STRU(configuration_cubi7))
                                        /* Definition de la configuration reelle du CUBI7.                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N F I G U R A T I O N   D E   L A   M E M O I R E   D ' I M A G E S  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    MEMOIRE_1024x1024                                                                                                        \
                         ZERO                                                                                                           \
                                        /* Numero du bloc memoire contenant une image 1024x1024.                                     */
Denumer05(INIS(_MEMOIRE_512x512_1,MEMOIRE_1024x1024)
                                        /* Numero du bloc memoire contenant la premiere image 512x512,                               */
              ,_MEMOIRE_512x512_2
                                        /* Numero du bloc memoire contenant la deuxieme image 512x512,                               */
              ,_MEMOIRE_512x512_3
                                        /* Numero du bloc memoire contenant la troisieme image 512x512,                              */
              ,_MEMOIRE_512x512_4
                                        /* Numero du bloc memoire contenant la quatrieme image 512x512.                              */
              ,DERNIERE_MEMOIRE
         ,configuration_memoire_CUBI7
          );
#    define    MEMOIRE_512x512_1                                                                                                        \
                         ENUM(_MEMOIRE_512x512_1)
#    define    MEMOIRE_512x512_2                                                                                                        \
                         ENUM(_MEMOIRE_512x512_2)
#    define    MEMOIRE_512x512_3                                                                                                        \
                         ENUM(_MEMOIRE_512x512_3)
#    define    MEMOIRE_512x512_4                                                                                                        \
                         ENUM(_MEMOIRE_512x512_4)
#    define    MEMOIRE_512x512                                                                                                          \
                         MEMOIRE_512x512_1                                                                                              \
                                        /* Numero du bloc memoire contenant la seule image 512x512 utilisee.                         */
#    define    MEMOIRE_576x700                                                                                                          \
                         MEMOIRE_512x512_1                                                                                              \
                                        /* Numero du bloc memoire contenant la seule image 576x700 utilisee.                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O R M A T S   D E   M E M O I R E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Denumer07(INIS(_FORMAT_MEMOIRE_512x512,ZERO)
              ,_FORMAT_MEMOIRE_512x700
              ,_FORMAT_MEMOIRE_512x1024
              ,_FORMAT_MEMOIRE_576x512
              ,_FORMAT_MEMOIRE_576x700
              ,_FORMAT_MEMOIRE_1024x1024
              ,DERNIER_FORMAT_MEMOIRE
         ,format_memoire_CUBI7
          );
#    define    FORMAT_MEMOIRE_512x512                                                                                                   \
                         ENUM(_FORMAT_MEMOIRE_512x512)
#    define    FORMAT_MEMOIRE_512x700                                                                                                   \
                         ENUM(_FORMAT_MEMOIRE_512x700)
#    define    FORMAT_MEMOIRE_512x1024                                                                                                  \
                         ENUM(_FORMAT_MEMOIRE_512x1024)
#    define    FORMAT_MEMOIRE_576x512                                                                                                   \
                         ENUM(_FORMAT_MEMOIRE_576x512)
#    define    FORMAT_MEMOIRE_576x700                                                                                                   \
                         ENUM(_FORMAT_MEMOIRE_576x700)
#    define    FORMAT_MEMOIRE_1024x1024                                                                                                 \
                         ENUM(_FORMAT_MEMOIRE_1024x1024)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   C O L O R I A G E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Denumer03(INIS(_GROUPE_0_DE_TABLES_DE_COLORIAGE,ZERO)
                                        /* Numero du groupe 0 des tables de coloriage,                                               */
              ,_GROUPE_1_DE_TABLES_DE_COLORIAGE
                                        /* Numero du groupe 1 des tables de coloriage.                                               */
              ,DERNIER_GROUPE_DE_TABLES_DE_COLORIAGE
         ,configuration_groupe_de_coloriage_CUBI7
          );
#    define    GROUPE_0_DE_TABLES_DE_COLORIAGE                                                                                          \
                         ENUM(_GROUPE_0_DE_TABLES_DE_COLORIAGE)
#    define    GROUPE_1_DE_TABLES_DE_COLORIAGE                                                                                          \
                         ENUM(_GROUPE_1_DE_TABLES_DE_COLORIAGE)
Denumer05(INIS(_TABLE_DE_COLORIAGE_0,ZERO)
                                        /* Numero du bloc memoire contenant la premiere image 512x512,                               */
              ,_TABLE_DE_COLORIAGE_1
                                        /* Numero du bloc memoire contenant la deuxieme image 512x512,                               */
              ,_TABLE_DE_COLORIAGE_2
                                        /* Numero du bloc memoire contenant la troisieme image 512x512,                              */
              ,_TABLE_DE_COLORIAGE_3
                                        /* Numero du bloc memoire contenant la quatrieme image 512x512.                              */
              ,DERNIERE_TABLE_DE_COLORIAGE
         ,configuration_tables_de_coloriage_CUBI7
          );
#    define    TABLE_DE_COLORIAGE_0                                                                                                     \
                         ENUM(_TABLE_DE_COLORIAGE_0)
#    define    TABLE_DE_COLORIAGE_1                                                                                                     \
                         ENUM(_TABLE_DE_COLORIAGE_1)
#    define    TABLE_DE_COLORIAGE_2                                                                                                     \
                         ENUM(_TABLE_DE_COLORIAGE_2)
#    define    TABLE_DE_COLORIAGE_3                                                                                                     \
                         ENUM(_TABLE_DE_COLORIAGE_3)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D E   D ' E C R I T U R E   D E S   C O M P O S A N T E S   ( P A R A M E T R E   ' M O D Z ' )  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    ECRITURE_DIFFEREE                                                                                                        \
                         ZERO                                                                                                           \
                                        /* Une composante 'Z', 'B', 'V' ou 'R' arrivant n'est ecrite que lorsque                     */ \
                                        /* ses trois autres compagnes sont arrivees ; c'est en fait la derniere                      */ \
                                        /* arrivee ('R') qui provoque l'ecriture globale...                                          */
#    define    ECRITURE_IMMEDIATE                                                                                                       \
                         UN                                                                                                             \
                                        /* Une composante 'R', 'V', 'B' ou 'Z' arrivant est ecrite immediatement                     */ \
                                        /* sans attendre ses compagnes ; c'est le mode a utiliser pour ecrire                        */ \
                                        /* des plans de composantes (via le bus "superviseur")...                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D ' E C R I T U R E   E N   M O D E   " R A S T E R "   ( P A R A M E T R E   ' J H ' )  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    ECRITURE_FORCEE                                                                                                          \
                         DEUX                                                                                                           \
                                        /* Ecriture systematique, quelle que soit la coordonnee 'Z'.                                 */
#    define    COMPARAISON_EN_Z                                                                                                         \
                         QUATRE                                                                                                         \
                                        /* Ecriture avec comparaison des coordonnees 'Z' courante et anterieure. Dans ce mode        */ \
                                        /* "direct" un point n'est pas ecrit si son 'Z' est superieur a celui donne par le           */ \
                                        /* 'Z-buffer'...                                                                             */
#    define    COMPARAISON_EN_Z_INVERSE                                                                                                 \
                         SIX                                                                                                            \
                                        /* Ecriture avec comparaison inverse des coordonnees 'Z' courante et anterieure. Dans ce     */ \
                                        /* mode "inverse" un point n'est pas ecrit si son 'Z' est inferieur a celui donne par le     */ \
                                        /* 'Z-buffer'...                                                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S   D E   L ' A N T I - A L I A S I N G  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    PAS_D_ANTI_ALIASING                                                                                                      \
                         ZERO                                                                                                           \
                                        /* Pas d'anti-aliasing...                                                                    */
#    define    ANTI_ALIASING_IMAGE                                                                                                      \
                         DEUX                                                                                                           \
                                        /* Generation de contours anti-aliases...                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S   D E   L A   C A R T E   ' G E C '  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    MODE_IMAGE                                                                                                               \
                         UN,ZERO                                                                                                        \
                                        /* Le mode normal trace toutes les lignes horizontales (le 'ZERO' est la                     */ \
                                        /* afin de remplacer l'argument 'TRAME_PAIRE'/'TRAME_IMPAIRE' alors inutile).                */
#    define    MODE_TRAME                                                                                                               \
                         ZERO                                                                                                           \
                                        /* Ce mode permet de ne tracer qu'une ligne horizontale sur deux, suivant                    */ \
                                        /* le parametre 'TRAME_PAIRE'/'TRAME_IMPAIRE'.                                               */
#    define    TRAME_PAIRE                                                                                                              \
                         ZERO                                                                                                           \
                                        /* Pour ne tracer que les ligne horizontales paires (voir 'MODE_TRAME').                     */
#    define    TRAME_IMPAIRE                                                                                                            \
                         UN                                                                                                             \
                                        /* Pour ne tracer que les ligne horizontales impaires (voir 'MODE_TRAME').                   */
#    define    FACETTES_REMPLIES                                                                                                        \
                         ZERO                                                                                                           \
                                        /* Afin d'interpoler a l'interieur des facettes.                                             */
#    define    FACETTES_FIL_DE_FER                                                                                                      \
                         UN                                                                                                             \
                                        /* Afin de ne tracer que le contour des facettes (mode "fil de fer").                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S E L E C T E U R   D E S   S O U R C E S   D ' I N I T I A L A T I O N   D E                                              */
/*        L A   M E M O I R E   ( P A R A M E T R E S   ' V E X T '   E T   ' Z E X T ' )  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    RVB_INITIALISATION_FOND                                                                                                  \
                         ZERO                                                                                                           \
                                        /* Initialisation des composantes {R,V,B} a partir du registre 'fond',                       */
#    define    Z_INITIALISATION_FOND                                                                                                    \
                         Zinfini7                                                                                                       \
                                        /* Initialisation de la composante 'Z' a partir du registre 'fond' ; on prend ainsi une      */ \
                                        /* valeur telle qu'avec le mode 'COMPARAISON_EN_Z', tous les "premiers" points soient        */ \
                                        /* ecrits, quelle que soit leur coordonnee 'Z'...                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O M S   D E S   C O M P O S A N T E S   E L E M E N T A I R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Denumer05(INIS(_composante_Z,ZERO)
                                        /* Composante de la troisieme coordonnee 'Z'.                                                */
              ,_composante_BLEUE
                                        /* Composante BLEUE,                                                                         */
              ,_composante_VERTE
                                        /* Composante VERTE,                                                                         */
              ,_composante_ROUGE
                                        /* Composante ROUGE.                                                                         */
              ,DERNIERE_composante
         ,composante_CUBI7
          );
#    define    composante_ROUGE                                                                                                         \
                         ENUM(_composante_ROUGE)
#    define    composante_VERTE                                                                                                         \
                         ENUM(_composante_VERTE)
#    define    composante_BLEUE                                                                                                         \
                         ENUM(_composante_BLEUE)
#    define    composante_Z                                                                                                             \
                         ENUM(_composante_Z)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O M S   D E S   C O U L E U R S   E L E M E N T A I R E S   P O U R   L E S   P E R M U T A T I O N S  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    couleur_ROUGE                                                                                                            \
                         composante_BLEUE
#    define    couleur_VERTE                                                                                                            \
                         composante_VERTE
#    define    couleur_BLEUE                                                                                                            \
                         composante_ROUGE
                                        /* Et oui, attention au croisement entre le ROUGE et le BLEUE...                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D E S   C O M P O S A N T E S   E L E M E N T A I R E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefS(genere_RVB,genere_CHAR)
TypedefS(genere_ROUGE,genere_RVB)
                                        /* Pour le niveau de ROUGE et son DUMMY associe,                                             */
TypedefS(genere_VERTE,genere_RVB)
                                        /* Pour le niveau de VERT et son DUMMY associe,                                              */
TypedefS(genere_BLEUE,genere_RVB)
                                        /* Pour le niveau de BLEU et son DUMMY associe.                                              */
TypedefS(genere_Z,ShortInt)
                                        /* Pour la troisieme coordonnee 'Z'.                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   N I V E A U X   D E   B A S E  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    NOIR7     NOIR                                                                                                           \
                                        /* Niveau de noir sur chaque composante,                                                     */
#    define    BLANC7    BLANC                                                                                                          \
                                        /* Niveau de blanc sur chaque composante.                                                    */
#    define    Zinfini7  ETLO(INFINI,MHWD)                                                                                              \
                                        /* Valeur initiale de la troisieme coordonnee de chaque pixel.                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D ' U N   P O I N T   P O U R   L ' E N V O I  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Dstruct02(format_niveau_cubi7
         ,DEFV(genere_RVB,dummy)
                                        /* Pour occuper la memoire du CUBI7...                                                       */
         ,DEFV(genere_RVB,niveau)
                                        /* Niveau d'une composante.                                                                  */
         ,NOM_VIDE
          );
                                        /* Definition de la structure d'un niveau a envoyer au CUBI7.                                */
TypedefP(niveau7,STRU(format_niveau_cubi7))
Dstruct04(format_pixel_cubi7
         ,DEFV(genere_Z,zed)
                                        /* Coordonnee 'Z' destinee a etre exploitee par le 'Z-Buffer' interne.                       */
         ,DEFV(niveau7,bleue)
                                        /* Composante bleue.                                                                         */
         ,DEFV(niveau7,verte)
                                        /* Composante verte.                                                                         */
         ,DEFV(niveau7,rouge)
                                        /* Composante rouge.                                                                         */
         ,NOM_VIDE
          );
                                        /* Definition de la structure d'un pixel a envoyer au CUBI7.                                 */
TypedefP(pixel7,STRU(format_pixel_cubi7))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D ' U N   S O M M E T   F L O T T A N T   P O U R   L ' E N V O I  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Dstruct06(format_sommet_flottant
         ,DEFV(Float_cubi7,x)
                                        /* Coordonnee 'X',                                                                           */
         ,DEFV(Float_cubi7,y)
                                        /* Coordonnee 'Y',                                                                           */
         ,DEFV(Float_cubi7,z)
                                        /* Coordonnee 'Z'.                                                                           */
         ,DEFV(Float_cubi7,cR)
                                        /* Composante 'ROUGE',                                                                       */
         ,DEFV(Float_cubi7,cV)
                                        /* Composante 'VERTE',                                                                       */
         ,DEFV(Float_cubi7,cB)
                                        /* Composante 'BLEUE',                                                                       */
         ,NOM_VIDE
          );
                                        /* Definition de la structure d'un sommet en flottant a envoyer au CUBI7.                    */
TypedefP(Fsommet7,STRU(format_sommet_flottant))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R E M I E R   S O M M E T   D ' U N E   F A C E T T E   Q U E L C O N Q U E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    PREMIER_SOMMET                                                                                                           \
                         INDEX0                                                                                                         \
                                        /* Premier sommet d'une facette quelconque...                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D ' U N E   F A C E T T E   T R I A N G U L A I R E   F L O T T A N T E   P O U R   L ' E N V O I  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Denumer04(INIS(_sommet3_1,PREMIER_SOMMET)
                                        /* Premier sommet,                                                                           */
              ,_sommet3_2
                                        /* Deuxieme sommet,                                                                          */
              ,_sommet3_3
                                        /* Troisieme sommet.                                                                         */
              ,DERNIER_sommet3
         ,format_facette_flottante_triangulaire
          );
                                        /* Definition de la structure d'une facette triangulaire en flottant a envoyer               */
                                        /* au CUBI7 ; ainsi, une facette est un vecteur de structures de type "sommet",              */
                                        /* le nombre de sommets etant lie au type de facette (ici "triangulaire").                   */
#    define    sommet3_1 ENUM(_sommet3_1)
#    define    sommet3_2 ENUM(_sommet3_2)
#    define    sommet3_3 ENUM(_sommet3_3)
#    define    NOMBRE_DE_SOMMETS_D_UNE_FACETTE_TRIANGULAIRE                                                                             \
                         LENG(sommet3_1,sommet3_3)                                                                                      \
                                        /* Nombre de sommets d'une facette triangulaire.                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D ' U N E   F A C E T T E   C A R R E E   F L O T T A N T E   P O U R   L ' E N V O I  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Denumer05(INIS(_sommet4_1,PREMIER_SOMMET)
                                        /* Premier sommet,                                                                           */
              ,_sommet4_2
                                        /* Deuxieme sommet,                                                                          */
              ,_sommet4_3
                                        /* Troisieme sommet,                                                                         */
              ,_sommet4_4
                                        /* Quatrieme sommet.                                                                         */
              ,DERNIER_sommet4
         ,format_facette_flottante_carree
          );
                                        /* Definition de la structure d'une facette carree en flottant a envoyer                     */
                                        /* au CUBI7 ; ainsi, une facette est un vecteur de structures de type "sommet",              */
                                        /* le nombre de sommets etant lie au type de facette (ici "carree").                         */
#    define    sommet4_1 ENUM(_sommet4_1)
#    define    sommet4_2 ENUM(_sommet4_2)
#    define    sommet4_3 ENUM(_sommet4_3)
#    define    sommet4_4 ENUM(_sommet4_4)
#    define    NOMBRE_DE_SOMMETS_D_UNE_FACETTE_CARREE                                                                                   \
                         LENG(sommet4_1,sommet4_4)                                                                                      \
                                        /* Nombre de sommets d'une facette carree.                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   C O M P O S A N T E  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefD2(composante7,dimY,dimX,niveau7)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   F E N E T R E  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefD2(fenetre7,dimY,dimX,pixel7)
                                        /* Definition d'une fenetre dans laquelle on viendra placer une image                        */
                                        /* en vraies couleurs ; on notera que "fenetre" est defini avec les                          */
                                        /* memes bornes et limites que "image" ; une fenetre contiendra                              */
                                        /* donc une image standard.                                                                  */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_CUBI7
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_CUBI7




Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.