/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   I M A G E   A   P A R T I R   D E   D E U X                                              */
/*        L I S T E S   D E   C O O R D O N N E E S   C A R T E S I E N N E S  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Il est possible de chainer les points entre                                                                    */
/*                  eux via 'chainer_les_points'. Mais il est aussi                                                                  */
/*                  possible de "simuler" ce chainage (mais pas "en etoile")                                                         */
/*                  des points {X,Y,Z} arguments en utilisant au                                                                     */
/*                  prealable 'v $xci/interpole.01$K' qui interpole                                                                  */
/*                  lineairement entre deux points consecutifs.                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Note :                                                                                                                     */
/*                                                                                                                                   */
/*                    Le 20161114160503, je note qu'une                                                                              */
/*                  utilisation "neutre" possible est la                                                                             */
/*                  suivante :                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      :Debut_listG_load_image__store_image:                                                        */
/*                                                                                                                                   */
/*                                      $Z        $xci/valeurs_imag$X                                                             \  */
/*                                      $Z                            denormalisees=VRAI                                          \  */
/*                                      $Z                            premiere=1                                                  \  */
/*                                      $Z                            derniere=$tailleI                                           \  */
/*                                      $Z                            PX=1                                                        \  */
/*                                      $Z                            PY=0                                                        \  */
/*                                      $Z                                                          >& $xTV/COORDONNEES$COORD_X      */
/*                                      $Z        $xci/valeurs_imag$X                                                             \  */
/*                                      $Z                            denormalisees=VRAI                                          \  */
/*                                      $Z                            premiere=1                                                  \  */
/*                                      $Z                            derniere=$tailleI                                           \  */
/*                                      $Z                            PX=0                                                        \  */
/*                                      $Z                            PY=1                                                        \  */
/*                                      $Z                                                          >& $xTV/COORDONNEES$COORD_Y      */
/*                                      $Z                                                                                           */
/*                                      $Z        $xrv/load_image$X                                                               \  */
/*                                      $Z                            A=$xTV/IMAGE.1                                              \  */
/*                                      $Z                            LISTE_X=$xTV/COORDONNEES$COORD_X                            \  */
/*                                      $Z                            LISTE_Y=$xTV/COORDONNEES$COORD_Y                            \  */
/*                                      $Z                                                          >& $xTV/COORDONNEES$LUMIN        */
/*                                      $Z        $xrv/store_image$X                                                              \  */
/*                                      $Z                            ne=0                                                        \  */
/*                                      $Z                            LISTE_X=$xTV/COORDONNEES$COORD_X                            \  */
/*                                      $Z                            LISTE_Y=$xTV/COORDONNEES$COORD_Y                            \  */
/*                                      $Z                            LISTE_NIVEAU=$xTV/COORDONNEES$LUMIN                         \  */
/*                                      $Z                            R=$xTV/IMAGE.2                                              \  */
/*                                      $Z                            Ndenormalises=VRAI                                          \  */
/*                                      $Z                            Xdenormalisees=VRAI                                         \  */
/*                                      $Z                            Ydenormalisees=VRAI                                            */
/*                                                                                                                                   */
/*                                      :Fin_listG_load_image__store_image:                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  A la fin de ce processus, les deux images                                                                        */
/*                  '$xTV/IMAGE.1/ et '$xTV/IMAGE.2' doivent                                                                         */
/*                  evidemment etre identiques...                                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/store_image$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20051207151403).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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
#include  image_image_IMAGESF_EXT
                                        /* Introduit le 20121110112405...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LES_COORDONNEES_X_SONT_NORMALISEES                                                                                            \
                    VRAI
#define   LES_COORDONNEES_Y_SONT_NORMALISEES                                                                                            \
                    VRAI
#define   LES_NIVEAUX_______SONT_NORMALISES_                                                                                            \
                    VRAI
                                        /* Introduit le 20140430152305 pour eviter des problemes d'arrondis lors des operations      */
                                        /* de denormalisation...                                                                     */

#define   FACTEUR_DES_COORDONNEES_X                                                                                                     \
                    FU
#define   TRANSLATION_DENORMALISEE_DES_COORDONNEES_X                                                                                    \
                    ZERO
#define   FACTEUR_DES_COORDONNEES_Y                                                                                                     \
                    FU
#define   TRANSLATION_DENORMALISEE_DES_COORDONNEES_Y                                                                                    \
                    ZERO
#define   FACTEUR_DES_NIVEAUX______                                                                                                     \
                    FU
#define   TRANSLATION___NORMALISEE_DES_NIVEAUX______                                                                                    \
                    ZERO
                                        /* Introduit le 20210309160941 pour, par exemple, visualiser des noyaux de convolution...    */
                                        /*                                                                                           */
                                        /* Par exemple, avec 'v $xci/nettete.01$X', on pourra faire :                                */
                                        /*                                                                                           */
                                        /*                  $xrv/VisualisationNoyauConvolution.11$Z $xci/nettete.01$X                */
                                        /*                                                                                           */
                                        /* ce qui donne une image centree du noyau de convolution par defaut...                      */

#define   CUMULER_LES_NIVEAUX                                                                                                           \
                    FAUX
#define   PONDERATION_CUMULER_LES_NIVEAUX_ADD2                                                                                          \
                    FU
#define   PONDERATION_CUMULER_LES_NIVEAUX_MAX2                                                                                          \
                    FZERO
                                        /* Introduit le 20131119160651 afin de permettre de choisir entre ranger les niveaux avec    */
                                        /* "ecrasement" ('FAUX') ou bien les cumuler ('VRAI') ? Les ponderations de choix de la      */
                                        /* methode de cumul ont ete introduites le 20190116141516 et les valeurs par defaut          */
                                        /* garantissent la compatibilite anterieure...                                               */

#define   DISPERSER_LES_NIVEAUX_AUX_quatre_COINS_DES_CARRES_ELEMENTAIRES                                                                \
                    FAUX
#define   ECRASER_LES_NIVEAUX_ANTERIEURS                                                                                                \
                    FAUX
                                        /* Introduit le 20140101151916 afin de permettre la dispersion "interpole" de chaque niveau  */ \
                                        /* aux quatre coins des carres elementaires...                                               */

#define   FAIRE_UN_EPAISSISSEMENT_CIRCULAIRE                                                                                            \
                    FAUX                                                                                                                \
                                        /* Introduit le 20120517082358 afin de permettre de choisir entre un epaississement carre    */ \
                                        /* ('FAUX') et un epaississement circulaire ('VRAI').                                        */
#define   DEMI_PAVE_X                                                                                                                   \
                    ZERO
#define   DEMI_PAVE_Y                                                                                                                   \
                    ZERO
                                        /* Introduit le 20120430094519 afin de pouvoir epaissir les points, mais surtout par         */
                                        /* "symetrie" avec 'v $xrv/store_album$K 20120429165655'...                                  */
#define   DEMI_PAVE_XG                                                                                                                  \
                    ZERO
#define   DEMI_PAVE_YG                                                                                                                  \
                    ZERO

#define   DEMI_PAVE_XD                                                                                                                  \
                    ZERO
#define   DEMI_PAVE_YD                                                                                                                  \
                    ZERO
                                        /* Introduit le 20120430094519 afin de generaliser le processus d'epaississement symetrique  */
                                        /* precedent, sans perdre la compatibilite avec lui...                                       */

#define   FAIRE_DES_PAVES_HOMOTHETIQUES                                                                                                 \
                    FAUX                                                                                                                \
                                        /* Introduit le 20170322095152 pour permettre de faire des paves "homothetiques",            */ \
                                        /* c'est-a-dire des paves dont la taille est fonction de '$formatI'...                       */

#define   TESTER_LES_HORS_BORNES_NATURELLES                                                                                             \
                    FAUX                                                                                                                \
                                        /* Introduit le 20111113113031 pour ne pas tester les "hors bornes naturelles"...            */ \
                                        /*                                                                                           */ \
                                        /* La valeur par defaut est passee de 'VRAI' a 'FAUX' le 20120417134325, depuis que          */ \
                                        /* 'SUPER_cDENORMALISE_O(...)' ont ete introduits car, en effet, ces procedures peuvent      */ \
                                        /* generer des valeurs hors bornes naturelles...                                             */
#define   EDITER_LE_MESSAGE_DES_HORS_BORNES_NATURELLES                                                                                  \
                    VRAI                                                                                                                \
                                        /* Introduit le 20120124075103 pour gerer le message des "hors bornes naturelles"...         */

#define   TRACER_L__HORIZONTALE_DE_CHAQUE_POINT                                                                                         \
                    FAUX
#define   TRACER_LA_VERTICALE___DE_CHAQUE_POINT                                                                                         \
                    FAUX
                                        /* Introduit le 20160323083049 afin de pouvoir materialiser l'horizontale et la verticale    */
                                        /* de chaque point...                                                                        */

#define   CHAINER_LES_POINTS                                                                                                            \
                    FAUX
#define   CHAINER_LES_POINTS_EN_ETOILE                                                                                                  \
                    FAUX
                                        /* Introduit le 20120124075908 pour permettre le chainage des points entre-eux et complete   */
                                        /* le 20120129101749 afin de permettre le chainage en etoile (par rapport au premier point). */

#define   UTILISER_LE_MODE_HISTOGRAMME                                                                                                  \
                    FAUX
#define   UTILISER_LE_MODE_HISTOGRAMME_HORIZONTAL                                                                                       \
                    FAUX
#define   Xmin_HISTOGRAMME_HORIZONTAL                                                                                                   \
                    Xmin
#define   UTILISER_LE_MODE_HISTOGRAMME_VERTICAL                                                                                         \
                    VRAI
#define   Ymin_HISTOGRAMME_VERTICAL                                                                                                     \
                    Ymin
                                        /* Introduit le 20131201094231 et utile si 'IL_NE_FAUT_PAS(chainer_les_points)' : cela       */
                                        /* permet de materialiser chaque point par un segment vertical et/ou horizontal...           */
                                        /*                                                                                           */
                                        /* Cela fut complete par {Xmin,Ymin} le 20210826103359...                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F I C H I E R S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214193405...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   X_IMPLICITE                                                                                                                   \
                    FZERO
#define   Y_IMPLICITE                                                                                                                   \
                    FZERO
#define   Z_IMPLICITE                                                                                                                   \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z);
                                        /* Definition en memoire des fichiers de coordonnees cartesiennes. Le fichier des            */
                                        /* coordonnees 'Z' a ete introduit le 20060208161951...                                      */

#define   ELEMENT_DU_FICHIER_LISTE_X(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_X,index)
#define   ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Y,index)
#define   ELEMENT_DU_FICHIER_LISTE_Z(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Z,index)
                                        /* Acces a un element courant des fichiers de coordonnees cartesiennes.                      */

#define   NIVEAU_IMPLICITE                                                                                                              \
                    FU

gGENERATION_D_UN_FICHIER(fichier_LISTE_NIVEAU,liste_initiale_des_NIVEAU);
                                        /* Definition en memoire du fichier des niveaux...                                           */

#define   ELEMENT_DU_FICHIER_LISTE_NIVEAU(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_NIVEAU,index)
                                        /* Acces a un element courant du fichier des niveaux...                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E P A I S S I S S E M E N T  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEMI_PAVE_X_IMPLICITE                                                                                                         \
                    FLOT(DEMI_PAVE_X)
#define   DEMI_PAVE_Y_IMPLICITE                                                                                                         \
                    FLOT(DEMI_PAVE_Y)

gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_X,liste_initiale_des_DEMI_PAVE_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_Y,liste_initiale_des_DEMI_PAVE_Y);
                                        /* Definition en memoire des fichiers des "demi-paves" (introduits le 20160428093732).       */

#define   ELEMENT_DU_FICHIER_DEMI_PAVE_X(index)                                                                                         \
                    INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_X,index))
#define   ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index)                                                                                         \
                    INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_Y,index))
                                        /* Acces a un element courant des fichiers des "demi-paves" (introduits le 20160428093732).  */


/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   I M A G E   A   P A R T I R   D E   D E U X                                              */
/*        L I S T E S   D E   C O O R D O N N E E S   C A R T E S I E N N E S  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(CHAR,INIT(POINTERc(nom_imageA),NOM_PIPE_Local));
                                        /* Nom de l'eventuelle image Argument (de fond) introduit le 20181008143042...               */
     DEFV(CHAR,INIT(POINTERc(nom_imageR),NOM_PIPE_Local));
                                        /* Nom de l'image a generer...                                                               */
     DEFV(Positive,INIT(dimension_de_l_espace,BI_DIMENSIONNEL));
                                        /* Dimension de l'espace des coordonnees ({X.Y} par defaut...).                              */

     DEFV(Logical,INIT(les_coordonnees_X_sont_normalisees,LES_COORDONNEES_X_SONT_NORMALISEES));
     DEFV(Logical,INIT(les_coordonnees_Y_sont_normalisees,LES_COORDONNEES_Y_SONT_NORMALISEES));
     DEFV(Logical,INIT(les_niveaux_______sont_normalises_,LES_NIVEAUX_______SONT_NORMALISES_));
                                        /* Introduit le 20140430152305 pour eviter des problemes d'arrondis lors des operations      */
                                        /* de denormalisation...                                                                     */

     DEFV(Float,INIT(facteur_des_coordonnees_X,FACTEUR_DES_COORDONNEES_X));
     DEFV(Int,INIT(translation_denormalisee_des_coordonnees_X,TRANSLATION_DENORMALISEE_DES_COORDONNEES_X));
     DEFV(Float,INIT(facteur_des_coordonnees_Y,FACTEUR_DES_COORDONNEES_Y));
     DEFV(Int,INIT(translation_denormalisee_des_coordonnees_Y,TRANSLATION_DENORMALISEE_DES_COORDONNEES_Y));
     DEFV(Float,INIT(facteur_des_niveaux______,FACTEUR_DES_NIVEAUX______));
     DEFV(Float,INIT(translation___normalisee_des_niveaux______,TRANSLATION___NORMALISEE_DES_NIVEAUX______));
                                        /* Introduit le 20210309160941 pour, par exemple, visualiser des noyaux de convolution...    */

     DEFV(Logical,INIT(cumuler_les_niveaux,CUMULER_LES_NIVEAUX));
     DEFV(Float,INIT(ponderation_cumuler_les_niveaux_ADD2,PONDERATION_CUMULER_LES_NIVEAUX_ADD2));
     DEFV(Float,INIT(ponderation_cumuler_les_niveaux_MAX2,PONDERATION_CUMULER_LES_NIVEAUX_MAX2));
                                        /* Introduit le 20131119160651 afin de permettre de choisir entre ranger les niveaux avec    */
                                        /* "ecrasement" ('FAUX') ou bien les cumuler ('VRAI') ? Les ponderations de choix de la      */
                                        /* methode de cumul ont ete introduites le 20190116141516 et les valeurs par defaut          */
                                        /* garantissent la compatibilite anterieure...                                               */

     DEFV(Logical,INIT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires
                      ,DISPERSER_LES_NIVEAUX_AUX_quatre_COINS_DES_CARRES_ELEMENTAIRES
                       )
          );
     DEFV(Logical,INIT(ecraser_les_niveaux_anterieurs,ECRASER_LES_NIVEAUX_ANTERIEURS));
                                        /* Introduit le 20140101151916 afin de permettre la dispersion "interpole" de chaque niveau  */
                                        /* aux quatre coins des carres elementaires...                                               */

     DEFV(Logical,INIT(faire_un_epaississement_circulaire,FAIRE_UN_EPAISSISSEMENT_CIRCULAIRE));
                                        /* Introduit le 20120517082358 afin de permettre de choisir entre un epaississement carre    */
                                        /* ('FAUX') et un epaississement circulaire ('VRAI').                                        */
     DEFV(Int,INIT(demi_pave_XG,DEMI_PAVE_XG));
     DEFV(Int,INIT(demi_pave_YG,DEMI_PAVE_YG));
     DEFV(Int,INIT(demi_pave_XD,DEMI_PAVE_XD));
     DEFV(Int,INIT(demi_pave_YD,DEMI_PAVE_YD));
                                        /* Introduit le 20120430184507 afin de generaliser le processus d'epaississement symetrique  */
                                        /* precedent, sans perdre la compatibilite avec lui...                                       */
     DEFV(Logical,INIT(faire_des_paves_homothetiques,FAIRE_DES_PAVES_HOMOTHETIQUES));
                                        /* Introduit le 20170322095152 pour permettre de faire des paves "homothetiques",            */
                                        /* c'est-a-dire des paves dont la taille est fonction de '$formatI'...                       */

     DEFV(Logical,INIT(tester_les_hors_bornes_naturelles,TESTER_LES_HORS_BORNES_NATURELLES));
                                        /* Introduit le 20111113112752 pour ne pas tester les "hors bornes naturelles"...            */
                                        /*                                                                                           */
                                        /* La valeur par defaut est passee de 'VRAI' a 'FAUX' le 20120417134325, depuis que          */
                                        /* 'SUPER_cDENORMALISE_O(...)' ont ete introduits car, en effet, ces procedures peuvent      */
                                        /* generer des valeurs hors bornes naturelles...                                             */
     DEFV(Logical,INIT(editer_le_message_des_hors_bornes_naturelles,EDITER_LE_MESSAGE_DES_HORS_BORNES_NATURELLES));
                                        /* Introduit le 20120124075103 pour gerer le message des "hors bornes naturelles"...         */

     DEFV(Logical,INIT(tracer_l__horizontale_de_chaque_point,TRACER_L__HORIZONTALE_DE_CHAQUE_POINT));
     DEFV(Logical,INIT(tracer_la_verticale___de_chaque_point,TRACER_LA_VERTICALE___DE_CHAQUE_POINT));
                                        /* Introduit le 20160323083049 afin de pouvoir materialiser l'horizontale et la verticale    */
                                        /* de chaque point...                                                                        */

     DEFV(Logical,INIT(chainer_les_points,CHAINER_LES_POINTS));
     DEFV(Logical,INIT(chainer_les_points_en_etoile,CHAINER_LES_POINTS_EN_ETOILE));
                                        /* Introduit le 20120124075908 pour permettre le chainage des points entre-eux et complete   */
                                        /* le 20120129101749 afin de permettre le chainage en etoile (par rapport au premier point). */

     DEFV(Logical,INIT(utiliser_le_mode_histogramme,UTILISER_LE_MODE_HISTOGRAMME));
     DEFV(Logical,INIT(utiliser_le_mode_histogramme_horizontal,UTILISER_LE_MODE_HISTOGRAMME_HORIZONTAL));
     DEFV(Int,INIT(Xmin_histogramme_horizontal,Xmin_HISTOGRAMME_HORIZONTAL));
     DEFV(Logical,INIT(utiliser_le_mode_histogramme_vertical,UTILISER_LE_MODE_HISTOGRAMME_VERTICAL));
     DEFV(Int,INIT(Ymin_histogramme_vertical,Ymin_HISTOGRAMME_VERTICAL));
                                        /* Introduit le 20131201094231 et utile si 'IL_NE_FAUT_PAS(chainer_les_points)' : cela       */
                                        /* permet de materialiser chaque point par un segment vertical et/ou horizontal...           */
                                        /*                                                                                           */
                                        /* Cela fut complete par {Xmin,Ymin} le 20210826103359...                                    */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("LISTE_X="
                                                 ,fichier_LISTE_X
                                                 ,liste_initiale_des_X
                                                 ,X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_Y="
                                                 ,fichier_LISTE_Y
                                                 ,liste_initiale_des_Y
                                                 ,Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_C("LISTE_Z=",fichier_LISTE_Z
                                           ,BLOC(VIDE;)
                                           ,BLOC(VIDE;)
                                           ,BLOC(
                                                 Bblock
                                                 lTRANSFORMAT_0d(fichier_LISTE_Z
                                                                ,liste_initiale_des_Z
                                                                ,Z_IMPLICITE
                                                                 );
                                                 EGAL(dimension_de_l_espace,TRI_DIMENSIONNEL);
                                        /* Lorsque le fichier 'LISTE_Z', on force le mode {X,Y,Z} (introduit le 20060208161951...).  */
                                                 Eblock
                                                 )
                                           ,BLOC(iGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE);)
                                            );

                         PROKESF_ARGUMENT_FICHIER("LISTE_NIVEAU="
                                                 ,fichier_LISTE_NIVEAU
                                                 ,liste_initiale_des_NIVEAU
                                                 ,NIVEAU_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_X=""demi_pave_X=""dpX="
                                                 ,fichier_LISTE_DEMI_PAVE_X
                                                 ,liste_initiale_des_DEMI_PAVE_X
                                                 ,DEMI_PAVE_X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_Y=""demi_pave_Y=""dpY="
                                                 ,fichier_LISTE_DEMI_PAVE_Y
                                                 ,liste_initiale_des_DEMI_PAVE_Y
                                                 ,DEMI_PAVE_Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_I("premier=",premier_element_d_un_fichier);
                         GET_ARGUMENT_I("pas=",pas_de_parcours_d_un_fichier);
                                        /* Parametres introduits le 20211004113151...                                                */

                         GET_ARGUMENT_C("imageA=""A=""F=""fond=",nom_imageA);
                                        /* Arguments introduits le 20181008143042...                                                 */
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_L("standard=",les_images_sont_standards);
                                        /* Argument introduit le 20121110112352...                                                   */

                         GET_ARGUMENT_P("niveau_du_fond=""noir=",Inoir_____NOIR);
                                        /* Argument introduit le 20210819133729 pour 'v $xiirv/.BOLT.11.1.$U', mais en fait non      */
                                        /* utilise puisque redondant avec "imageA=""A=""F=""fond="...                                */

                         GET_ARGUMENT_L("cumuler_niveaux=""cumuler=""cumul=",cumuler_les_niveaux);
                         GET_ARGUMENT_F("cumuler_ADD2=""ADD2=",ponderation_cumuler_les_niveaux_ADD2);
                         GET_ARGUMENT_F("cumuler_MAX2=""MAX2=",ponderation_cumuler_les_niveaux_MAX2);
                                        /* Argument introduit le 20131119160651 et complete le 20190116141516 par les ponderations.  */

                         GET_ARGUMENT_L("Xnormalisees=""Xnorm=""Xn=",les_coordonnees_X_sont_normalisees);
                         GET_ARGUMENT_N("Xdenormalisees=""Xdenorm=""Xdn=",les_coordonnees_X_sont_normalisees);
                         GET_ARGUMENT_L("Ynormalisees=""Ynorm=""Yn=",les_coordonnees_Y_sont_normalisees);
                         GET_ARGUMENT_N("Ydenormalisees=""Ydenorm=""Ydn=",les_coordonnees_Y_sont_normalisees);
                         GET_ARGUMENT_L("Nnormalises=""Nnorm=""Nn=",les_niveaux_______sont_normalises_);
                         GET_ARGUMENT_N("Ndenormalises=""Ndenorm=""Ndn=",les_niveaux_______sont_normalises_);
                                        /* Argument introduit le 20140430152305...                                                   */

                         GET_ARGUMENT_F("facteur_X=""fX=",facteur_des_coordonnees_X);
                         GET_ARGUMENT_I("translation_X=""tX=",translation_denormalisee_des_coordonnees_X);
                         GET_ARGUMENT_F("facteur_Y=""fY=",facteur_des_coordonnees_Y);
                         GET_ARGUMENT_I("translation_Y=""tY=",translation_denormalisee_des_coordonnees_Y);
                         GET_ARGUMENT_F("facteur_niveaux=""fn=",facteur_des_niveaux______);
                         GET_ARGUMENT_F("translation_niveaux=""tn=",translation___normalisee_des_niveaux______);
                                        /* Arguments introduits le 20210309160941...                                                 */

                         GET_ARGUMENT_L("disperser=",disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires);
                         GET_ARGUMENT_N("concentrer=",disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires);
                         GET_ARGUMENT_L("ecraser_niveaux=""ecraser=",ecraser_les_niveaux_anterieurs);
                                        /* Arguments introduits le 20140101151916...                                                 */

                         GET_ARGUMENT_L("epaississement_circulaire=""ecirculaire=""circulaire=",faire_un_epaississement_circulaire);
                         GET_ARGUMENT_N("epaississement_carre=""ecarre=",faire_un_epaississement_circulaire);
                                        /* Arguments introduits le 20120517082358. On notera l'absence de "carre=" a cause de        */
                                        /* 'v $xig/fonct$vv$DEF carre='...                                                           */
                         GET_ARGUMENT_I("demi_pave_XG=""dpXG=",demi_pave_XG);
                         GET_ARGUMENT_I("demi_pave_YG=""dpYG=",demi_pave_YG);
                         GET_ARGUMENT_I("demi_pave_XD=""dpXD=",demi_pave_XD);
                         GET_ARGUMENT_I("demi_pave_YD=""dpYD=",demi_pave_YD);
                                        /* Arguments introduits le 20120430184507...                                                 */
                         GET_ARGUMENT_L("paves_homothetiques=""ph=",faire_des_paves_homothetiques);
                                        /* Arguments introduits le 20170322095152...                                                 */

                         GET_ARGUMENT_L("tester_hors_bornes_naturelles=""hors_bornes_naturelles=""hbn="
                                       ,tester_les_hors_bornes_naturelles
                                        );
                                        /* Arguments introduits le 20111113113031...                                                 */
                         GET_ARGUMENT_L("editer_hors_bornes_naturelles=""ehbn="
                                       ,editer_le_message_des_hors_bornes_naturelles
                                        );
                                        /* Arguments introduits le 20120124075103...                                                 */

                         GET_ARGUMENT_L("horizontale=""ho=",tracer_l__horizontale_de_chaque_point);
                         GET_ARGUMENT_L("verticale=""ve=",tracer_la_verticale___de_chaque_point);
                                        /* Arguments introduits le 20160323083049...                                                 */

                         GET_ARGUMENT_L("chainer_points=""cp=",chainer_les_points);
                         GET_ARGUMENT_L("chainer_points_etoile=""cpe=",chainer_les_points_en_etoile);
                                        /* Arguments introduits le 20111113113031 et completes le 20120129101749...                  */

                         GET_ARGUMENT_L("histogramme=""h=",utiliser_le_mode_histogramme);
                         GET_ARGUMENT_L("histogramme_horizontal=""hh=",utiliser_le_mode_histogramme_horizontal);
                         GET_ARGUMENT_I("Xmin_histogramme_horizontal=""hhXmin=",Xmin_histogramme_horizontal);
                         GET_ARGUMENT_L("histogramme_vertical=""hv=",utiliser_le_mode_histogramme_vertical);
                         GET_ARGUMENT_I("Ymin_histogramme_vertical=""hvYmin=",Ymin_histogramme_vertical);
                                        /* Arguments introduits le 20131201094231 et completes par {Xmin,Ymin} le 20210826103359...  */
                         )
                    );

     Test(IFET(EST_FAUX(les_images_sont_standards)
              ,IL_FAUT(chainer_les_points)
               )
          )
                                        /* Test introduit le 20121110112405...                                                       */
          Bblock
          PRINT_ATTENTION("le chainage des points n'est pas possible pour les images non standards");

          EGAL(chainer_les_points,FAUX);
                                        /* Et le chainage des points est inhibe...                                                   */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(EST_FAUX(les_images_sont_standards)
              ,IL_FAUT(utiliser_le_mode_histogramme)
               )
          )
                                        /* Test introduit le 20131201094231...                                                       */
          Bblock
          PRINT_ATTENTION("le mode histogramme n'est pas possible pour les images non standards");

          EGAL(utiliser_le_mode_histogramme,FAUX);
                                        /* Et le mode histogramme est inhibe...                                                      */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(EST_FAUX(les_images_sont_standards)
              ,IL_FAUT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires)
               )
          )
                                        /* Test introduit le 20140101152554...                                                       */
          Bblock
          PRINT_ATTENTION("le mode dispersion des niveaux n'est pas possible pour les images non standards");

          EGAL(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires,FAUX);
                                        /* Et le mode histogramme est inhibe...                                                      */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(chainer_les_points)
              ,IL_FAUT(utiliser_le_mode_histogramme)
               )
          )
                                        /* Test introduit le 20131201094231...                                                       */
          Bblock
          PRINT_ATTENTION("le mode histogramme est incompatible avec le chainage des points");

          EGAL(utiliser_le_mode_histogramme,FAUX);
                                        /* Et le mode histogramme est inhibe...                                                      */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires)
              ,IL_FAUT(utiliser_le_mode_histogramme)
               )
          )
                                        /* Test introduit le 20140101152554...                                                       */
          Bblock
          PRINT_ATTENTION("le mode dispersion des niveaux est incompatible avec le chainage des points");

          EGAL(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires,FAUX);
                                        /* Et le mode dispersion des niveaux est inhibe...                                           */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(utiliser_le_mode_histogramme)
              ,IFET(IL_NE_FAUT_PAS(utiliser_le_mode_histogramme_horizontal)
                   ,IL_NE_FAUT_PAS(utiliser_le_mode_histogramme_vertical)
                    )
               )
          )
                                        /* Test introduit le 20131201094231...                                                       */
          Bblock
          PRINT_ATTENTION("le mode histogramme n'est ni horizontal, ni vertical");

          EGAL(utiliser_le_mode_histogramme,FAUX);
                                        /* Et le mode histogramme est inhibe...                                                      */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(cumuler_les_niveaux)
              ,IFNE(dimension_de_l_espace,BI_DIMENSIONNEL)
               )
          )
                                        /* Test introduit le 20131119160651...                                                       */
          Bblock
          PRINT_ATTENTION("le cumul des niveaux n'est possible qu'en mode bidimensionnel");

          EGAL(cumuler_les_niveaux,FAUX);
                                        /* Et le cumul des niveaux est inhibe...                                                     */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_nouveau_block
          Bblock
          DEFV(Logical,INIT(initialiser_le_fond,VRAI));
                                        /* La valeur par defaut assure la compatibilite anterieure (introduit le 123456789).         */
          DEFV(Logical,INIT(c_est_le_premier_point,VRAI));
                                        /* Utile uniquement dans le cas du chainage...                                               */

          Test(IFNE_chaine(nom_imageA,NOM_PIPE_Local))
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageG,IFmageR,nom_imageA))))
                    Bblock
                                        /* Chargement de l'image Argument, un eventuel fond (ceci fut introduit le 20181008143042).  */
                    EGAL(initialiser_le_fond,FAUX);
                                        /* Lorsque cela s'est bien passe, le fond n'est evidemment pas a initialiser...              */
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IL_FAUT(initialiser_le_fond))
               Bblock
               Test(EST_VRAI(les_images_sont_standards))
                    Bblock
                    CALi(FgERASE());
                                        /* Initialisation de l'image Resultat (ATTENTION : il s'agit de 'ImageG'...).                */
                    Eblock
               ATes
                    Bblock
                    CALi(IFinitialisation(IFmageR,FZERO));
                                        /* Initialisation de l'image Resultat.                                                       */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          DoIn(index
              ,premier_element_d_un_fichier
              ,DERNIER_ELEMENT_D_UN_FICHIER
              ,pas_de_parcours_d_un_fichier
               )
                                        /* Le 20211004113151 {premier_element_d_un_fichier,pas_de_parcours_d_un_fichier} ont ete     */
                                        /* introduits...                                                                             */
               Bblock
               DEFV(Float,INIT(coordonnee_X_normalisee,ELEMENT_DU_FICHIER_LISTE_X(index)));
               DEFV(Float,INIT(coordonnee_Y_normalisee,ELEMENT_DU_FICHIER_LISTE_Y(index)));
               DEFV(Float,INIT(coordonnee_Z_normalisee,ELEMENT_DU_FICHIER_LISTE_Z(index)));
                                        /* Recuperation des coordonnees normalisees {X,Y[,Z]} courantes dans les fichiers.           */
               DEFV(Int,INIT(coordonnee_X_denormalisee,UNDEF));
               DEFV(Int,INIT(coordonnee_Y_denormalisee,UNDEF));
               DEFV(Float,INIT(coordonnee_X_denormalisee_precise,FLOT__UNDEF));
               DEFV(Float,INIT(coordonnee_Y_denormalisee_precise,FLOT__UNDEF));
                                        /* Mis avant 'Test(IL_NE_FAUT_PAS(chainer_les_points))' le 20210312095035 afin de pouvoir    */
                                        /* beneficier des facteurs et translations des coordonnees...                                */

               DEFV(Float,INIT(niveau_courant_normalise,ELEMENT_DU_FICHIER_LISTE_NIVEAU(index)));
                                        /* On notera qu'il s'agit d'un 'Float' et non pas d'un 'genere_Float' car, en effet, c'est   */
                                        /* un element d'un fichier 'Float' et non pas un point 'genere_Float'...                     */
               DEFV(genere_p,INIT(niveau_courant_denormalise,NIVEAU_UNDEF));

               DEFV(Int,INIT(demi_pave_XG_effectif
                            ,GRANDEURS_HOMOTHETIQUES_OX(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_X(index),demi_pave_XG)
                                                       ,faire_des_paves_homothetiques
                                                       ,INTE
                                                        )
                             )
                    );
               DEFV(Int,INIT(demi_pave_YG_effectif
                            ,GRANDEURS_HOMOTHETIQUES_OY(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index),demi_pave_YG)
                                                       ,faire_des_paves_homothetiques
                                                       ,INTE
                                                        )
                             )
                    );
               DEFV(Int,INIT(demi_pave_XD_effectif
                            ,GRANDEURS_HOMOTHETIQUES_OX(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_X(index),demi_pave_XD)
                                                       ,faire_des_paves_homothetiques
                                                       ,INTE
                                                        )
                             )
                    );
               DEFV(Int,INIT(demi_pave_YD_effectif
                            ,GRANDEURS_HOMOTHETIQUES_OY(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index),demi_pave_YD)
                                                       ,faire_des_paves_homothetiques
                                                       ,INTE
                                                        )
                             )
                    );

               DEFV(Float,INIT(demi_diametre_du_pave,FLOT__UNDEF));
               EGAL(demi_diametre_du_pave
                   ,MIN2(FLOT(MIN2(demi_pave_XG_effectif,demi_pave_XD_effectif))
                        ,FLOT(MIN2(demi_pave_YG_effectif,demi_pave_YD_effectif))
                         )
                    );
                                        /* Demi-diametre du pave calcule a priori...                                                 */

               Test(EST_VRAI(les_niveaux_______sont_normalises_))
                                        /* Test introduit le 20140430152305...                                                       */
                    Bblock
                    EGAL(niveau_courant_normalise
                        ,AXPB(facteur_des_niveaux______
                             ,niveau_courant_normalise
                             ,translation___normalisee_des_niveaux______
                              )
                         );
                                        /* Introduit le 20210309160941...                                                            */

                    EGAL(niveau_courant_denormalise,__DENORMALISE_NIVEAU(niveau_courant_normalise));
                                        /* Recuperation du niveau normalise et denormalise du point courant {X,Y} dans le fichier.   */
                    Eblock
               ATes
                    Bblock
                    EGAL(niveau_courant_denormalise,GENP(niveau_courant_normalise));
                                        /* Les niveaux sont supposes deja denormalises (introduit le 20140430152305).                */
                    Eblock
               ETes

               Test(EST_VRAI(les_coordonnees_X_sont_normalisees))
                                        /* Test introduit le 20140430152305...                                                       */
                    Bblock
                    EGAL(coordonnee_X_denormalisee_precise,F__cDENORMALISE_OX(SUPER_ECHELLE_OX(coordonnee_X_normalisee)));
                                        /* Coordonnees denormalisees precises introduites pour 'store_point_continu_lineaire(...)'   */
                                        /* et 'storeF_point_continu_lineaire(...)' le 20140101151916...                              */
                    EGAL(coordonnee_X_denormalisee,SUPER_cDENORMALISE_OX(coordonnee_X_normalisee));
                                        /* Recuperation des coordonnees denormalisees {X,Y[,Z]} courantes dans les fichiers.         */
                                        /*                                                                                           */
                                        /* Le 20120417134325, '_cDENORMALISE_O?(...)' a ete remplace par 'SUPER_cDENORMALISE_O(...)' */
                                        /* afin de permettre de conserver, si besoin est, les proportions...                         */
                    Eblock
               ATes
                    Bblock
                    EGAL(coordonnee_X_denormalisee_precise,coordonnee_X_normalisee);
                    EGAL(coordonnee_X_denormalisee,coordonnee_X_normalisee);
                                        /* Les coordonnees 'X' sont supposees deja denormalisees (introduit le 20140430152305).      */
                    Eblock
               ETes

               EGAL(coordonnee_X_denormalisee_precise
                   ,COXA(AXPB(facteur_des_coordonnees_X
                             ,COXR(coordonnee_X_denormalisee_precise)
                             ,FLOT(translation_denormalisee_des_coordonnees_X)
                              )
                         )
                    );
               EGAL(coordonnee_X_denormalisee
                   ,COXA(INTE(AXPB(facteur_des_coordonnees_X
                                  ,COXR(coordonnee_X_denormalisee)
                                  ,translation_denormalisee_des_coordonnees_X
                                   )
                              )
                         )
                    );
                                        /* Introduit le 20210309160941 et mis avant 'Test(IL_NE_FAUT_PAS(chainer_les_points))        */
                                        /* le 20210312095035...                                                                      */

               Test(EST_VRAI(les_coordonnees_Y_sont_normalisees))
                                        /* Test introduit le 20140430152305...                                                       */
                    Bblock
                    EGAL(coordonnee_Y_denormalisee_precise,F__cDENORMALISE_OY(SUPER_ECHELLE_OY(coordonnee_Y_normalisee)));
                                        /* Coordonnees denormalisees precises introduites pour 'store_point_continu_lineaire(...)'   */
                                        /* et 'storeF_point_continu_lineaire(...)' le 20140101151916...                              */
                    EGAL(coordonnee_Y_denormalisee,SUPER_cDENORMALISE_OY(coordonnee_Y_normalisee));
                                        /* Recuperation des coordonnees denormalisees {X,Y[,Z]} courantes dans les fichiers.         */
                                        /*                                                                                           */
                                        /* Le 20120417134325, '_cDENORMALISE_O?(...)' a ete remplace par 'SUPER_cDENORMALISE_O(...)' */
                                        /* afin de permettre de conserver, si besoin est, les proportions...                         */
                    Eblock
               ATes
                    Bblock
                    EGAL(coordonnee_Y_denormalisee_precise,coordonnee_Y_normalisee);
                    EGAL(coordonnee_Y_denormalisee,coordonnee_Y_normalisee);
                                        /* Les coordonnees 'Y' sont supposees deja denormalisees (introduit le 20140430152305).      */
                    Eblock
               ETes

               EGAL(coordonnee_Y_denormalisee_precise
                   ,COYA(AXPB(facteur_des_coordonnees_Y
                             ,COYR(coordonnee_Y_denormalisee_precise)
                             ,FLOT(translation_denormalisee_des_coordonnees_Y)
                              )
                         )
                    );
               EGAL(coordonnee_Y_denormalisee
                   ,COYA(INTE(AXPB(facteur_des_coordonnees_Y
                                  ,COYR(coordonnee_Y_denormalisee)
                                  ,translation_denormalisee_des_coordonnees_Y
                                   )
                              )
                         )
                    );
                                        /* Introduit le 20210309160941 et mis avant 'Test(IL_NE_FAUT_PAS(chainer_les_points))        */
                                        /* le 20210312095035...                                                                      */

               Test(IL_NE_FAUT_PAS(chainer_les_points))
                                        /* Test introduit le 20120124075908...                                                       */
                    Bblock
                    Test(IFOU(IL_NE_FAUT_PAS(tester_les_hors_bornes_naturelles)
                             ,IFET(IL_FAUT(tester_les_hors_bornes_naturelles)
                                  ,IFET(TEST_DANS_L_IMAGE(coordonnee_X_denormalisee,coordonnee_Y_denormalisee)
                                       ,IFOU(IFET(EST_VRAI(les_niveaux_______sont_normalises_)
                                                 ,IFINff(niveau_courant_normalise
                                                        ,______________NOIR_NORMALISE
                                                        ,______________BLANC_NORMALISE
                                                         )
                                                  )
                                            ,IFET(EST_FAUX(les_niveaux_______sont_normalises_)
                                                 ,IFINff(niveau_courant_normalise
                                                        ,FLOT__NOIR
                                                        ,FLOT__BLANC
                                                         )
                                                  )
                                             )
                                        )
                                   )
                              )
                         )
                         Bblock
                         Test(IFET(IL_NE_FAUT_PAS(tracer_l__horizontale_de_chaque_point)
                                  ,IL_NE_FAUT_PAS(tracer_la_verticale___de_chaque_point)
                                   )
                              )
                                        /* Test introduit le 20160323083049...                                                       */
                              Bblock
                              begin_imageQ(DoIn
                                          ,COYA(SOUS(COYR(coordonnee_Y_denormalisee),demi_pave_YG_effectif))
                                          ,COYA(ADD2(COYR(coordonnee_Y_denormalisee),demi_pave_YD_effectif))
                                          ,PasY
                                          ,DoIn
                                          ,COXA(SOUS(COXR(coordonnee_X_denormalisee),demi_pave_XG_effectif))
                                          ,COXA(ADD2(COXR(coordonnee_X_denormalisee),demi_pave_XD_effectif))
                                          ,PasX
                                           )
                                        /* Introduit le 20120429165655 afin de pouvoir epaissir les points, mais surtout par         */
                                        /* "symetrie" avec 'v $xrv/store_album$K 20120429165655', puis generalise de facon           */
                                        /* potentiellement dissymetrique le 20120430184507...                                        */
                                   Bblock
                                   DEFV(Logical,INIT(ranger_le_niveau,VRAI));
                                        /* A priori, le niveau sera range systematiquement (indicateur introduit le 20120517083306). */

                                   Test(IL_FAUT(faire_un_epaississement_circulaire))
                                        /* Test introduit le 20120517083306...                                                       */
                                        Bblock
                                        DEFV(Float,INIT(distance_au_centre_du_pave
                                                       ,RdisF2D(FLOT(coordonnee_X_denormalisee)
                                                               ,FLOT(coordonnee_Y_denormalisee)
                                                               ,FLOT(X)
                                                               ,FLOT(Y)
                                                                )
                                                        )
                                             );
                                        /* Distance au centre du pave...                                                             */
                                        Test(IFLE(distance_au_centre_du_pave,demi_diametre_du_pave))
                                             Bblock
                                             EGAL(ranger_le_niveau,VRAI);
                                             Eblock
                                        ATes
                                             Bblock
                                             EGAL(ranger_le_niveau,FAUX);
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   Test(IL_FAUT(ranger_le_niveau))
                                        /* Test introduit le 20120517083306...                                                       */
                                        Bblock
                                        Test(EST_VRAI(les_images_sont_standards))
                                        /* Test introduit le 20121110112405...                                                       */
                                             Bblock
                                             DEFV(genere_p,INIT(niveau_courant_denormalise_effectif,niveau_courant_denormalise));

                                             Test(IL_FAUT(cumuler_les_niveaux))
                                        /* Test introduit le 20131119160651...                                                       */
                                                  Bblock
                                                  DEFV(genere_p,INIT(niveau_anterieur_denormalise,load_point_valide(ImageG,X,Y)));
                                        /* On notera le 'load_point_valide(...)' car, en effet, les coordonnees {X,Y} peuvent tres   */
                                        /* bien etre en dehors de [Xmin,Xmax]x[Ymin,Ymax]...                                         */

                                                  EGAL(niveau_courant_denormalise_effectif
                                                      ,GENP(NIVA(LIZ2(ponderation_cumuler_les_niveaux_ADD2
                                                                     ,FLOT(ADD2(NIVR(niveau_anterieur_denormalise)
                                                                               ,NIVR(niveau_courant_denormalise_effectif)
                                                                                )
                                                                           )
                                                                     ,ponderation_cumuler_les_niveaux_MAX2
                                                                     ,FLOT(MAX2(NIVR(niveau_anterieur_denormalise)
                                                                               ,NIVR(niveau_courant_denormalise_effectif)
                                                                                )
                                                                           )
                                                                      )
                                                                 )
                                                            )
                                                       );
                                        /* On notera au passage qu'il peut y avoir ici un debordement, mais que faire d'autre que    */
                                        /* de l'accepter...                                                                          */
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  Eblock
                                             ETes

                                             Test(IL_NE_FAUT_PAS(utiliser_le_mode_histogramme))
                                        /* Test introduit le 20131201094231...                                                       */
                                                  Bblock
                                                  Test(IL_FAUT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires))
                                                       Bblock
                                                       store_point_continu_lineaire(niveau_courant_denormalise
                                                                                   ,ImageG
                                                                                   ,ADD2(coordonnee_X_denormalisee_precise
                                                                                        ,FLOT(SOUS(X,Xmin_begin_ligneQ))
                                                                                         )
                                                                                   ,ADD2(coordonnee_Y_denormalisee_precise
                                                                                        ,FLOT(SOUS(Y,Ymin_begin_colonneQ))
                                                                                         )
                                                                                   ,ecraser_les_niveaux_anterieurs
                                                                                    );
                                        /* Possibilite introduite le 20140101152554...                                               */
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       store_point_ND(niveau_courant_denormalise_effectif
                                                                     ,ImageG
                                                                     ,X
                                                                     ,Y
                                                                     ,coordonnee_Z_normalisee
                                                                     ,dimension_de_l_espace
                                                                      );
                                        /* Rangement du point courant {X,Y[,Z]}...                                                   */
                                                       Eblock
                                                  ETes
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  DEFV(Int,INIT(X_point_courant,X));
                                                  DEFV(Int,INIT(Y_point_courant,Y));
                                        /* Memorisation du point courant {X,Y[,Z]}...                                                */

                                                  Test(IL_FAUT(utiliser_le_mode_histogramme_horizontal))
                                        /* Test introduit le 20131201094231...                                                       */
                                                       Bblock
                                                       begin_ligneQ(DoIn,Xmin_histogramme_horizontal,X_point_courant,pasX)
                                                            Bblock
                                                            store_point_ND(niveau_courant_denormalise_effectif
                                                                          ,ImageG
                                                                          ,X
                                                                          ,Y_point_courant
                                                                          ,coordonnee_Z_normalisee
                                                                          ,dimension_de_l_espace
                                                                           );
                                                            Eblock
                                                       end_ligneQ(EDoI)
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       Eblock
                                                  ETes

                                                  Test(IL_FAUT(utiliser_le_mode_histogramme_vertical))
                                        /* Test introduit le 20131201094231...                                                       */
                                                       Bblock
                                                       begin_colonneQ(DoIn,Ymin_histogramme_vertical,Y_point_courant,pasY)
                                                            Bblock
                                                            store_point_ND(niveau_courant_denormalise_effectif
                                                                          ,ImageG
                                                                          ,X_point_courant
                                                                          ,Y
                                                                          ,coordonnee_Z_normalisee
                                                                          ,dimension_de_l_espace
                                                                           );
                                                            Eblock
                                                       end_colonneQ(EDoI)
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       Eblock
                                                  ETes
                                                  Eblock
                                             ETes
                                             Eblock
                                        ATes
                                             Bblock
                                             DEFV(genere_Float,INIT(niveau_courant_normalise_effectif,niveau_courant_normalise));

                                             Test(IL_FAUT(cumuler_les_niveaux))
                                        /* Test introduit le 20131119160651...                                                       */
                                                  Bblock
                                                  DEFV(genere_Float,INIT(niveau_anterieur_normalise,loadF_point_valide(IFmageR,X,Y)));

                                                  EGAL(niveau_courant_normalise_effectif
                                                      ,LIZ2(ponderation_cumuler_les_niveaux_ADD2
                                                           ,ADD2(niveau_anterieur_normalise,niveau_courant_normalise_effectif)
                                                           ,ponderation_cumuler_les_niveaux_MAX2
                                                           ,MAX2(niveau_anterieur_normalise,niveau_courant_normalise_effectif)
                                                            )
                                                       );
                                        /* On notera le 'loadF_point_valide(...)' car, en effet, les coordonnees {X,Y} peuvent tres  */
                                        /* bien etre en dehors de [Xmin,Xmax]x[Ymin,Ymax]...                                         */
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  Eblock
                                             ETes

                                             storeF_point_ND(niveau_courant_normalise_effectif
                                                            ,IFmageR
                                                            ,X
                                                            ,Y
                                                            ,coordonnee_Z_normalisee
                                                            ,dimension_de_l_espace
                                                             );
                                        /* Rangement du point courant {X,Y[,Z]}...                                                   */
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              end_imageQ(EDoI,EDoI)
                              Eblock
                         ATes
                              Bblock
                              Test(IL_FAUT(tracer_l__horizontale_de_chaque_point))
                                        /* Test introduit le 20160323083049...                                                       */
                                   Bblock
                                   begin_ligne
                                        Bblock
                                        store_point_ND(niveau_courant_denormalise
                                                      ,ImageG
                                                      ,X
                                                      ,coordonnee_Y_denormalisee
                                                      ,coordonnee_Z_normalisee
                                                      ,dimension_de_l_espace
                                                       );
                                        Eblock
                                   end_ligne
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes

                              Test(IL_FAUT(tracer_la_verticale___de_chaque_point))
                                        /* Test introduit le 20160323083049...                                                       */
                                   Bblock
                                   begin_colonne
                                        Bblock
                                        store_point_ND(niveau_courant_denormalise
                                                      ,ImageG
                                                      ,coordonnee_X_denormalisee
                                                      ,Y
                                                      ,coordonnee_Z_normalisee
                                                      ,dimension_de_l_espace
                                                       );
                                        Eblock
                                   end_colonne
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Test(IL_FAUT(editer_le_message_des_hors_bornes_naturelles))
                                        /* Test introduit le 20120124075103...                                                       */
                              Bblock
                              PRINT_ERREUR("l'une au moins des trois valeurs associees a un point est hors de ses bornes naturelles");
                              CAL1(Prer4("(point d'index %d : X=%+.^^^ Y=%+.^^^ niveau=%+.^^^ -ces trois valeurs sont normalisees-)\n"
                                        ,index
                                        ,coordonnee_X_normalisee
                                        ,coordonnee_Y_normalisee
                                        ,niveau_courant_normalise
                                         )
                                   );
                                        /* Le 20060105161653, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123620, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    SET_COULEURS(NOIR,niveau_courant_denormalise);
                    SET_CURSOR(_____cNORMALISE_OX(coordonnee_X_denormalisee_precise)
                              ,_____cNORMALISE_OY(coordonnee_Y_denormalisee_precise)
                              ,coordonnee_Z_normalisee
                               );
                                        /* Depuis le 20210312100549 ce sont les coordonnees denormalisees qui sont referencees       */
                                        /* "en premier" afin de beneficier des facteurs et translations sur 'X' et 'Y'...            */

                    Test(EST_VRAI(c_est_le_premier_point))
                         Bblock
                         gA;

                         EGAL(c_est_le_premier_point,FAUX);
                         Eblock
                    ATes
                         Bblock
                         Test(IL_NE_FAUT_PAS(chainer_les_points_en_etoile))
                              Bblock
                              gB;
                                        /* Chainage automatique des points...                                                        */
                              Eblock
                         ATes
                              Bblock
                              gS;
                                        /* Chainage automatique des points en etoile (introduit le 20120129101749).                  */
                              Eblock
                         ETes
                         Eblock
                    ETes
                    Eblock
               ETes
               Eblock
          EDoI

          CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageG,IFmageR));
          Eblock
     end_nouveau_block

     lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_Y,DEMI_PAVE_Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_X,DEMI_PAVE_X_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_NIVEAU,NIVEAU_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE);

     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.