/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A C E   D U   S I G L E   D U   " C M A P "   ( E N   C O U L E U R S )  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition des couleurs utilisees :                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                   +                                                                               */
/*                                                + . . +                                                                            */
/*                                            L11  .   .  L14                                                                        */
/*                                          +     .     .     +                                                                      */
/*                                       +      L13     L13      +                                                                   */
/*                                       |  +   .         .   +  |                                                                   */
/*                                       |     +           +     |                                                                   */
/*                                       |    .  L12   L12  .    |                                                                   */
/*                                      L11  .       +       .  L14                                                                  */
/*                                       |  .        |        .  |                                                                   */
/*                                       | .         |         . |                                                                   */
/*                                       |.          |          .|                                                                   */
/*                                       +          L12                                                                              */
/*                                          +        |                                                                               */
/*                                            L11    |                                                                               */
/*                                                +  |                                                                               */
/*                                                   +                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  (ou 'L1X' signifie 'L_SUBSTITUTION_1X').                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrd/CMAP.02$K' :                                                                                               */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SUBSTITUTION_C                                                                                                                \
                    L_SUBSTITUTION_11                                                                                                   \
                                        /* Definition de la liste de substitution du 'C',                                            */
#define   SUBSTITUTION_M                                                                                                                \
                    L_SUBSTITUTION_12                                                                                                   \
                                        /* Definition de la liste de substitution du 'M',                                            */
#define   SUBSTITUTION_A                                                                                                                \
                    L_SUBSTITUTION_13                                                                                                   \
                                        /* Definition de la liste de substitution du 'A',                                            */
#define   SUBSTITUTION_P                                                                                                                \
                    L_SUBSTITUTION_14                                                                                                   \
                                        /* Definition de la liste de substitution du 'P',                                            */
#define   COTE                                                                                                                          \
                    DEUX                                                                                                                \
                                        /* Definition du nombre d'unites sur un cote.                                                */
#define   G1                                                                                                                            \
                    Bblock                                                                                                              \
                    DO(COTE                                                                                                             \
                      ,BLOC(g1;)                                                                                                        \
                       );                                                                                                               \
                    Eblock
#define   G2                                                                                                                            \
                    Bblock                                                                                                              \
                    DO(COTE                                                                                                             \
                      ,BLOC(g2;)                                                                                                        \
                       );                                                                                                               \
                    Eblock
#define   G3                                                                                                                            \
                    Bblock                                                                                                              \
                    DO(COTE                                                                                                             \
                      ,BLOC(g3;)                                                                                                        \
                       );                                                                                                               \
                    Eblock
#define   G4                                                                                                                            \
                    Bblock                                                                                                              \
                    DO(COTE                                                                                                             \
                      ,BLOC(g4;)                                                                                                        \
                       );                                                                                                               \
                    Eblock
#define   G5                                                                                                                            \
                    Bblock                                                                                                              \
                    DO(COTE                                                                                                             \
                      ,BLOC(g5;)                                                                                                        \
                       );                                                                                                               \
                    Eblock
#define   G6                                                                                                                            \
                    Bblock                                                                                                              \
                    DO(COTE                                                                                                             \
                      ,BLOC(g6;)                                                                                                        \
                       );                                                                                                               \
                    Eblock
#define   GENERE_SIGLE(taux_de_depth_cueing)                                                                                            \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(Z_minimum,FLOT__UNDEF));                                                                            \
                    DEFV(Float,INIT(Z_maximum,FLOT__UNDEF));                                                                            \
                                        /* Pour le "depth-cueing".                                                                   */ \
                    CALS(Iinit_Z_Buffer());                                                                                             \
                    SET_ANTI_ALIASING(VRAI);                                                                                            \
                    SET_COULEURS(NOIR,BLANC);                                                                                           \
                    INITIALISATION_SYSTEMATIQUE_TRANSFORMATION;                                                                         \
                                                                                                                                        \
                    SKH(8);                                                                                                             \
                                        /* Definition de l'echelle globale.                                                          */ \
                    SXH(8);                                                                                                             \
                                        /* Definition de l'echelle sur l'axe des 'X'.                                                */ \
                    SYH(8);                                                                                                             \
                                        /* Definition de l'echelle sur l'axe des 'Y'.                                                */ \
                    SZH(8);                                                                                                             \
                                        /* Definition de l'echelle sur l'axe des 'Z'.                                                */ \
                    PUSH_ANTI_ALIASING;                                                                                                 \
                                        /* Juste pour valider le couple (PUSH,PULL).                                                 */ \
                                                                                                                                        \
                    SET_CURSOR(_____cNORMALISE_OX(INTE(DIVI(FXcentre_____,super_echelle_OX)))                                           \
                              ,_____cNORMALISE_OY(INTE(DIVI(FYcentre_____,super_echelle_OY)))                                           \
                              ,_____cNORMALISE_OZ(Zcentre)                                                                              \
                               );                                                                                                       \
                                        /* On se place au centre de l'ecran.                                                         */ \
                    TRX(FRA4(PI));                                                                                                      \
                    TRY(FRA4(PI));                                                                                                      \
                                        /* Positionnement du cube dans l'espace.                                                     */ \
                    PULL_ANTI_ALIASING;                                                                                                 \
                                        /* Juste pour valider le couple (PUSH,PULL).                                                 */ \
                    SKH(echelle_globale);                                                                                               \
                                        /* Changement de l'echelle globale.                                                          */ \
                    DO(COTE                                                                                                             \
                      ,BLOC(g4;)                                                                                                        \
                       );                                                                                                               \
                                        /* Afin de placer le centre du cube au centre de l'ecran. ATTENTION, pendant longtemps,      */ \
                                        /* j'ai utilise 'MOIT(COTE)' a la place de 'COTE' ci-dessus...                               */ \
                                                                                                                                        \
                    CALS(FgMIC());                                                                                                      \
                    EGAL(Z_maximum,ASD1(vecteurs_____cursor_3D,z));                                                                     \
                    G6;                                                                                                                 \
                    EGAL(Z_minimum,ASD1(vecteurs_____cursor_3D,z));                                                                     \
                    SET_DEPTH_CUEING(taux_de_depth_cueing,Z_minimum,Z_maximum);                                                         \
                                        /* Pour le "depth-cueing".                                                                   */ \
                    CALS(FgMOC());                                                                                                      \
                    gA;G1;gA;                                                                                                           \
                    SUBSTITUTION(SUBSTITUTION_P);                                                                                       \
                    gA;G2;gB;                                                                                                           \
                    SUBSTITUTION(SUBSTITUTION_M);                                                                                       \
                    gA;G3;gB;                                                                                                           \
                    SUBSTITUTION(SUBSTITUTION_M);                                                                                       \
                    gA;G4;gB;                                                                                                           \
                                        /* Premiere face du cube.                                                                    */ \
                    SUBSTITUTION(SUBSTITUTION_C);                                                                                       \
                    gA;G6;gB;                                                                                                           \
                                        /* Premiere arete.                                                                           */ \
                    gA;G1;gA;                                                                                                           \
                    gA;G2;gA;                                                                                                           \
                    SUBSTITUTION(SUBSTITUTION_C);                                                                                       \
                    gA;G3;gB;                                                                                                           \
                    SUBSTITUTION(SUBSTITUTION_C);                                                                                       \
                    gA;G4;gB;                                                                                                           \
                                        /* Deuxieme face du cube.                                                                    */ \
                    G1;gA;CALS(FgMIC());G5;gA;CALS(FgMOC());                                                                            \
                                        /* Deuxieme arete.                                                                           */ \
                    SUBSTITUTION(SUBSTITUTION_P);                                                                                       \
                    G2;gA;CALS(FgMIC());G5;gB;CALS(FgMOC());                                                                            \
                                        /* Troisieme arete.                                                                          */ \
                    SUBSTITUTION(SUBSTITUTION_M);                                                                                       \
                    G3;gA;CALS(FgMIC());G5;gB;CALS(FgMOC());                                                                            \
                                        /* Quatrieme arete.                                                                          */ \
                    SUBSTITUTION(SUBSTITUTION_A);                                                                                       \
                    G4;gA;CALS(FgMIC());G1;G2;gB;G4;G5;gB;CALS(FgMOC());                                                                \
                                        /* Et enfin trace des deux pseudo-diagonales.                                                */ \
                    G5;gA;                                                                                                              \
                                                                                                                                        \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ECHELLE_GLOBALE                                                                                                               \
                    FLOT(DOUZE)                                                                                                         \
                                        /* Echelle globale...                                                                        */

#define   MEMORISER_LE_Z_BUFFER                                                                                                         \
                    FAUX                                                                                                                \
                                        /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie         */ \
                                        /* apres le calcul ('FAUX').                                                                 */

#define   TAUX_DE_DEPTH_CUEING                                                                                                          \
                    DEPTH_CUEING_MOYEN                                                                                                  \
                                        /* Definition du taux de depth-cueing...                                                     */
#define   DECALAGE_ANGULAIRE_POUR_LA_STEREOSCOPIE                                                                                       \
                    DECALAGE_ANGULAIRE_POUR_UNE_VISION_CYCLOPIQUE                                                                       \
                                        /* Valeur implicite du facteur de rotation de l'observateur permettant ainsi de creer        */ \
                                        /* des paires stereoscopiques...                                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A C E   D U   S I G L E   D U   " C M A P "  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageZ),NOM_PIPE));
     DEFV(Logical,INIT(memoriser_le_Z_Buffer,MEMORISER_LE_Z_BUFFER));
                                        /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie         */
                                        /* apres le calcul ('FAUX').                                                                 */
     DEFV(Float,INIT(echelle_globale,ECHELLE_GLOBALE));
                                        /* Echelle globale...                                                                        */
     DEFV(Float,INIT(taux_de_depth_cueing,DEPTH_CUEING_MOYEN));
                                        /* Definition du taux de depth-cueing. Une valeur de '0.80' donne de bons resultats.         */
     DEFV(Float,INIT(decalage_angulaire_pour_la_stereoscopie,DECALAGE_ANGULAIRE_POUR_LA_STEREOSCOPIE));
                                        /* Facteur de rotation de l'observateur pour la creation de paires stereoscopiques. On se    */
                                        /* souviendra que :                                                                          */
                                        /*                                                                                           */
                                        /*                  decalage > 0 : oeil droit,                                               */
                                        /*                  decalage < 0 : oeil gauche,                                              */
                                        /*                                                                                           */
                                        /* la valeur '+/-0.04' donnant de bons resultats...                                          */
     /*..............................................................................................................................*/
     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
                                       ,SX_SY_SZ_____compatibilite_20070416
                                        );
                                        /* Parametre introduit le 20070416161354...                                                  */
                         GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420="
                                       ,Ipoint_anti_aliase_segment_____compatibilite_20110420
                                        );
                                        /* Parametre introduit le 20110420145348...                                                  */

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ);
                         GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer);
                         GET_ARGUMENT_F("echelle=",echelle_globale);
                         GET_ARGUMENT_F("taux=""depth-cueing=",taux_de_depth_cueing);
                         GET_ARGUMENT_F("stereo=",decalage_angulaire_pour_la_stereoscopie);
                         GET_ARGUMENT_F("eloignement=",Projection_OX_OY_____facteur_d_eloignement_en_Z_de_l_observateur);
                         )
                    );

     SUPER_ECHELLE_PETIT_CARRE;
                                        /* Choix du format des figures obtenues :                                                    */
                                        /*                                                                                           */
                                        /*                  SUPER_ECHELLE_RECTANGULAIRE;                                             */
                                        /*                  SUPER_ECHELLE_PETIT_CARRE;                                               */
                                        /*                  SUPER_ECHELLE_GRAND_CARRE;                                               */
                                        /*                                                                                           */

     CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */

     CALS(FgERASE());
                                        /* Clear...                                                                                  */
     SET_DECALAGE_ANGULAIRE_DE_L_OBSERVATEUR(decalage_angulaire_pour_la_stereoscopie);
                                        /* Initialisation du facteur de rotation de l'observateur permettant ainsi de creer          */
                                        /* des paires stereoscopiques...                                                             */
     SET_FILTRAGE(ACTIF);
     GENERE_SIGLE(taux_de_depth_cueing);
     SET_FILTRAGE(INACTIF);
                                        /* Generation du sigle...                                                                    */

     CALS(Imove(ImageR,ImageG));

     CALi(Iupdate_image(nom_imageR,ImageR));

     Test(IL_FAUT(memoriser_le_Z_Buffer))
          Bblock
          CALS(Ifloat_std_du_Z_Buffer(ImageA));
                                        /* Conversion du 'Z-Buffer' en une image "standard"...                                       */
          CALi(Iupdate_image(nom_imageZ,ImageA));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.