/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V I S U A L I S A T I O N   D Y N A M I Q U E   D E   T O U T E S                                                          */
/*        L E S   C O U P E S   D ' U N E   I M A G E  :                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande affiche dynamiquement                                                                           */
/*                  toutes les coupes d'une image.                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/coupes$K' :                                                                                                */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1997??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#    include   image_image_QUAD_IMAGE_EXT
                                        /* ATTENTION, avant le 20021230111157, les includes 'image_image_TRI_IMAGE_EXT' et           */
                                        /* 'image_image_QUAD_IMAGE_EXT' n'etaient faits que pour                                     */
                                        /* '__VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL'.                                             */
                                        /* Mais avec les modifications faites dans 'v $xiidX/fonct$vv$FON 20021230102551' il a       */
                                        /* fallu les rendre systematiques...                                                         */

#    include   image_drive_XWind_FONCTION_EXT

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         include   image_drive_SiliG_FONCTION_1_EXT
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/display.01.I"

#define   DUREE_D_ATTENTE                                                                                                               \
                    ZERO                                                                                                                \
                                        /* Attente implicite avant de passer a l'image suivante...                                   */

#define   MARQUER_L_EMPLACEMENT_DES_COUPES                                                                                              \
                    VRAI                                                                                                                \
                                        /* Faut-il marquer l'emplacement de la coupe effectuee dans l'image ?                        */

#define   NIVEAU_DE_LA_COUPE_HORIZONTALE                                                                                                \
                    GRIS_8                                                                                                              \
                                        /* Niveau de la coupe horizontale dans l'image.                                              */
#define   NIVEAU_DU_PROFIL_HORIZONTAL                                                                                                   \
                    GRIS_8                                                                                                              \
                                        /* Niveau du profil horizontal dans l'image.                                                 */

#include  xci/coupe.01.I"

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#define   METTRE_L_IMAGE_EN_FOND                                                                                                        \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') mettre l'image Argument en fond, sinon c'est   */ \
                                        /* un 'NOIR' qui est mis...                                                                  */

#define   EDITER_L_EMPLACEMENT_DES_COUPES                                                                                               \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') editer l'emplacement normalise des coupes.     */

#define   PAS_DE_BALAYAGE_DES_COUPES_VERTICALES                                                                                         \
                    UN
#define   PAS_DE_BALAYAGE_DES_COUPES_HORIZONTALES                                                                                       \
                    UN
                                        /* Pour definir la "vitesse" de balayage...                                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/display.02.I"

#include  xci/coupe.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V I S U A L I S A T I O N   D Y N A M I Q U E   D E   T O U T E S                                                          */
/*        L E S   C O U P E S   D ' U N E   I M A G E  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de l'image a displayer.                                                               */
     DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
                                        /* Nom de la palette a utiliser.                                                             */
     DEFV(Logical,INIT(mettre_l_image_en_fond,METTRE_L_IMAGE_EN_FOND));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') mettre l'image Argument en fond, sinon c'est   */
                                        /* un 'NOIR' qui est mis...                                                                  */
     DEFV(Int,INIT(duree_d_attente,DUREE_D_ATTENTE));
                                        /* Duree d'attente apres l'affichage d'une image et avant son effacement.                    */
     DEFV(deltaF_2D,dimension_de_la_fenetre);
                                        /* Dimension de la fenetre de visualisation.                                                 */

#include  xci/display.03.I"

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

     DEFV(Logical,INIT(coupe_horizontale,COUPE_HORIZONTALE));
     DEFV(Logical,INIT(coupe_verticale,COUPE_VERTICALE));
                                        /* Nature des coupes a realiser.                                                             */
     DEFV(Logical,INIT(marquer_l_emplacement_des_coupes,MARQUER_L_EMPLACEMENT_DES_COUPES));
                                        /* Faut-il marquer l'emplacement de la coupe effectuee dans l'image ?                        */
     DEFV(Logical,INIT(marquer_l_emplacement_des_coupes_avant_les_coupes,MARQUER_L_EMPLACEMENT_DES_COUPES_AVANT_LES_COUPES));
                                        /* Faut-il marquer l'emplacement de la coupe effectuee dans l'image avant la coupe elle-meme */
                                        /* ('VRAI') ou apres ('FAUX') ?                                                              */
     DEFV(Logical,INIT(marquer_les_coupes_par_un_segment,MARQUER_LES_COUPES_PAR_UN_SEGMENT));
                                        /* Faut-il marquer les coupes par un segment ('VRAI') ou par un point isole ('FAUX') ?       */
     DEFV(genere_p,INIT(niveau_de_la_coupe_horizontale,NIVEAU_DE_LA_COUPE_HORIZONTALE));
     DEFV(genere_p,INIT(niveau_de_la_coupe_verticale,NIVEAU_DE_LA_COUPE_VERTICALE));
                                        /* Niveau de marquage des coupes a realiser.                                                 */
     DEFV(genere_p,INIT(niveau_du_profil_horizontal,NIVEAU_DU_PROFIL_HORIZONTAL));
     DEFV(genere_p,INIT(niveau_du_profil_vertical,NIVEAU_DU_PROFIL_VERTICAL));
                                        /* Niveau de marquage des profils a realiser.                                                */
     DEFV(Logical,INIT(editer_l_emplacement_des_coupes,EDITER_L_EMPLACEMENT_DES_COUPES));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') editer l'emplacement normalise des coupes.     */
     DEFV(Int,INIT(pas_de_balayage_des_coupes_verticales,PAS_DE_BALAYAGE_DES_COUPES_VERTICALES));
     DEFV(Int,INIT(pas_de_balayage_des_coupes_horizontales,PAS_DE_BALAYAGE_DES_COUPES_HORIZONTALES));
                                        /* Pour definir la "vitesse" de balayage...                                                  */
     /*..............................................................................................................................*/

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(VIDE;
                         )
                    );

     PRINT_ATTENTION("cette commande est ineffective sur ce SYSTEME");
     PRINT_ATTENTION("les fonctions graphiques ne sont pas implementees");
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
     INITIALISATION_POINT_2D(coin_bas_gauche,_____cNORMALISE_OX11(X_COIN_BAS_GAUCHE),_____cNORMALISE_OY11(Y_COIN_BAS_GAUCHE));
                                        /* Definition de la position implicite de la fenetre.                                        */
     EGAL(X11_____signaler_les_evenements_inattendus,SIGNALER_LES_EVENEMENTS_INATTENDUS);
                                        /* Initialisation du signalisateur d'evenement inattendu...                                  */

     GET_ARGUMENTSg(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
                                       ,SX_SY_SZ_____compatibilite_20070416
                                        );
                                        /* Parametre introduit le 20070416155801...                                                  */

                         GET_ARGUMENT_C("serveur=",serveur_standard);
                         GET_ARGUMENT_L("ne_pas_verifier_le_serveur=""npvs="
                                       ,IXopen_____X_Window_accepter_le_serveur_sans_verification
                                        );
                         GET_ARGUMENT_N("verifier_le_serveur=""vs="
                                       ,IXopen_____X_Window_accepter_le_serveur_sans_verification
                                        );
                                        /* Arguments introduits le 20100109113124 pour acceder au serveur 'Xming' (Windows Vista).   */
                         GET_ARGUMENT_L("attention=",editer_les_PRINT_ATTENTION_initiaux);
                         GET_ARGUMENT_L("signaler=",X11_____signaler_les_evenements_inattendus);
                         GET_ARGUMENT_L("trop_grandes=""trop_grande="
                                       ,X11_____tenter_l_ouverture_des_fenetres_trop_grandes_par_rapport_a_l_ecran
                                        );
                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_L("fond=",mettre_l_image_en_fond);
                         GET_ARGUMENT_I("nombre=""couleurs=",nombre_de_couleurs_necessaires);
                         GET_ARGUMENT_I("duree=""d=",duree_d_attente);
                         GET_ARGUMENT_L("centrer=""Fcentrer=""Fc=",centrer_la_fenetre);
                                        /* Parametre introduit le 20060427162459...                                                  */
                         GET_ARGUMENT_F("xc=""x=""X=",ASD1(coin_bas_gauche,x));
                         GET_ARGUMENT_F("yc=""y=""Y=",ASD1(coin_bas_gauche,y));
                         GET_ARGUMENT_C("substitution=""s=",nom_substitution);
                         GET_ARGUMENT_L("horizontale=""horizontal=""h=",coupe_horizontale);
                         GET_ARGUMENT_L("verticale=""vertical=""v=",coupe_verticale);
                         GET_ARGUMENT_L("marquage=",marquer_l_emplacement_des_coupes);
                         GET_ARGUMENT_L("avant=",marquer_l_emplacement_des_coupes_avant_les_coupes);
                         GET_ARGUMENT_L("segments=""segment=",marquer_les_coupes_par_un_segment);
                         GET_ARGUMENT_P("nch=",niveau_de_la_coupe_horizontale);
                         GET_ARGUMENT_P("ncv=",niveau_de_la_coupe_verticale);
                         GET_ARGUMENT_P("nph=",niveau_du_profil_horizontal);
                         GET_ARGUMENT_P("npv=",niveau_du_profil_vertical);
                         GET_ARGUMENT_L("editer=",editer_l_emplacement_des_coupes);
                         GET_ARGUMENT_I("ph=",pas_de_balayage_des_coupes_horizontales);
                         GET_ARGUMENT_I("pv=",pas_de_balayage_des_coupes_verticales);
                         )
                    );

     RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(nom_substitution,substitution_courante,substitution_courante);
                                        /* Tentative de recherche de la substitution demandee...                                     */

     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA))))
          Bblock
          DEFV(Int,INIT(X,Xmin));
          DEFV(Int,INIT(Y,Ymin));
          DEFV(Float,INIT(position_coupe_verticale,FLOT__UNDEF));
          DEFV(Float,INIT(position_coupe_horizontale,FLOT__UNDEF));
                                        /* Coordonnees des coupes a realiser.                                                        */

          CHARGEMENT_DE_LA_PALETTE_DE_COULEURS;
                                        /* Chargement des trois listes de substitution constitutive d'une palette.                   */
          Test(IFEQ(substitution_courante,L_SUBSTITUTION_VARIABLE))
               Bblock
               CALS(Icompactage_d_une_palette(nombre_de_couleurs_necessaires));
                                        /* Pour la substitution 'VARIABLE', on procede a un compactage de la palette Argument.       */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Test(IFNE(substitution_courante,L_SUBSTITUTION_NEUTRE))
               Bblock
               SUBSTITUTION(substitution_courante);
                                        /* Positionnement de la substitution courante quelqu'elle soit (mais non 'NEUTRE'...).       */
               SET_FILTRAGE(ACTIF);
                                        /* Et on active le filtrage...                                                               */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre,_____lNORMALISE_OX11(dimX11),_____lNORMALISE_OY11(dimY11));
                                        /* Definition des dimensions de la fenetre.                                                  */

          CALS(IXinitialisation());
                                        /* Initialisation fondamentale introduite le 20160815122026...                               */
          CALS(IXopen(serveur_standard
                     ,nom_imageA
                     ,ADRESSE(dimension_de_la_fenetre)
                     ,centrer_la_fenetre
                     ,ADRESSE(coin_bas_gauche)
                     ,editer_les_PRINT_ATTENTION_initiaux
                      )
               );

          Loop
               Bblock
               EGAL(position_coupe_verticale,_____cNORMALISE_OX(X));
               EGAL(position_coupe_horizontale,_____cNORMALISE_OY(Y));
                                        /* Normalisation des coordonnees...                                                          */

               Test(IL_FAUT(mettre_l_image_en_fond))
                    Bblock
                    CALi(Imove(ImageG,ImageA));
                                        /* Initialisation de l'image Resultat.                                                       */
                    Eblock
               ATes
                    Bblock
                    CALi(Inoir(ImageG));
                                        /* Mise du fond a 'NOIR'.                                                                    */
                    Eblock
               ETes

               PUSH_FILTRAGE;
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */
               SET_FILTRAGE(INACTIF);

               Test(IL_FAUT(marquer_l_emplacement_des_coupes_avant_les_coupes))
                    Bblock
                    MARQUAGE_DE_L_EMPLACEMENT_DES_COUPES;
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(coupe_horizontale))
                    Bblock
                    CALS(Iprofil_horizontal(ImageG
                                           ,ImageA
                                           ,position_coupe_horizontale
                                           ,niveau_du_profil_horizontal
                                           ,marquer_les_coupes_par_un_segment
                                            )
                         );
                                        /* Calcul du profil horizontal.                                                              */

                    Test(IL_FAUT(editer_l_emplacement_des_coupes))
                         Bblock
                         CAL3(Prme1("Y=%+f\n",position_coupe_horizontale));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(coupe_verticale))
                    Bblock
                    CALS(Iprofil_vertical(ImageG
                                         ,ImageA
                                         ,position_coupe_verticale
                                         ,niveau_du_profil_vertical
                                         ,marquer_les_coupes_par_un_segment
                                          )
                         );
                                        /* Calcul du profil vertical.                                                                */

                    Test(IL_FAUT(editer_l_emplacement_des_coupes))
                         Bblock
                         CAL3(Prme1("X=%+f\n",position_coupe_verticale));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_NE_FAUT_PAS(marquer_l_emplacement_des_coupes_avant_les_coupes))
                    Bblock
                    MARQUAGE_DE_L_EMPLACEMENT_DES_COUPES;
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALS(IXdisplay(ImageG
                             ,Image_ROUGE
                             ,Image_VERTE
                             ,Image_BLEUE
                             ,INCREMENT_DES_NIVEAUX_PAR_DEFAUT_DE_IXdisplay
                             ,TRANSLATER_LE_NOIR_PAR_DEFAUT_DE_IXdisplay
                              )
                    );
                                        /* On notera que {Image_ROUGE,Image_VERTE,Image_BLEUE} ne sont pas utiles ici, mais mises    */
                                        /* en place uniquement pour des raisons syntanxiques (introduit le 20030101171936).          */

               EGAL(X,COND(IFGE(X,Xmax),Xmin,nSUCX_TRON(X,pas_de_balayage_des_coupes_verticales)));
               EGAL(Y,COND(IFGE(Y,Ymax),Ymin,nSUCY_TRON(Y,pas_de_balayage_des_coupes_horizontales)));
                                        /* Deplacement des coupes...                                                                 */

               PULL_FILTRAGE;
                                        /* Et restauration des conditions initiales...                                               */

               Test(IZLT(duree_d_attente))
                    Bblock
                    CALS(IXattente_de_l_evenement_ButtonPress());
                                        /* Et on attend de nouveau un petit peu, jusqu'a ce que l'on appuie sur l'un des trois       */
                                        /* boutons de la souris...                                                                   */
                    Eblock
               ATes
                    Bblock
                    DODO(duree_d_attente);
                                        /* Et on attend de nouveau un petit peu, pour un temps pre-determine...                      */
                    Eblock
               ETes
               Eblock
          ELoo

          CALS(IXclose());
          Test(IFNE(substitution_courante,L_SUBSTITUTION_NEUTRE))
               Bblock
               SET_FILTRAGE(INACTIF);
               SUBSTITUTION(L_SUBSTITUTION_NEUTRE);
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_ROS
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(VIDE;
                         )
                    );

     PRINT_ATTENTION("cette commande est ineffective sur ce SYSTEME");
     PRINT_ATTENTION("les fonctions graphiques ne sont pas implementees");
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_ROS
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_ROS

     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.