/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I S E   E N   M O N T A G N E   D E   L ' I M A G E   A R G U M E N T  :                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une image                                                                                */
/*                  dont le nom est le premier argument                                                                              */
/*                  d'appel ; elle est le resultat de                                                                                */
/*                  la mise en montagne de la deuxieme image.                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/montagne.01$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1987??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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    TYPE_DE_imageA_surface_VERSION_02
#    include   image_image_IMAGESF_EXT
#Aifdef   TYPE_DE_imageA_surface_VERSION_02
#Eifdef   TYPE_DE_imageA_surface_VERSION_02

#include  image_image_MONTAGNES_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#define   COMPATIBILITE_20131031                                                                                                        \
                    FAUX                                                                                                                \
                                        /* Permet d'assurer la compatibilite anterieure au 20131031074405 si besoin est...           */

#ifdef    TYPE_DE_imageA_surface_VERSION_02
#    define    LA_SURFACE_EST_UNE_IMAGE_STANDARD                                                                                        \
                         VRAI                                                                                                           \
                                        /* L'image "surface" est-elle une image 'image' ou une image 'imageF' ???                    */
#    define    RENORMALISER_LA_SURFACE                                                                                                  \
                         VRAI                                                                                                           \
                                        /* Lorsque l'image "surface" est une image 'imageF' faut-il la renormaliser ('VRAI') ou      */ \
                                        /* pas ('FAUX') ?                                                                            */
#    define    CONSERVER_LE_ZERO                                                                                                        \
                         VRAI                                                                                                           \
                                        /* En cas d'image 'imageF' doit-on conserver le zero ('VRAI') ou pas ('FAUX').               */

#    define    IL_FAUT_CALCULER_LES_EXTREMA_DES_IMAGES_NON_STANDARDS                                                                    \
                         VRAI                                                                                                           \
                                        /* Dans le cas d'une image flottante faut-il calculer les extrema pour la conversion         */ \
                                        /* ('VRAI') ou les forcer ('FAUX') ?                                                         */
#    define    MINIMUM_FORCE                                                                                                            \
                         FLOT__NOIR
#    define    MAXIMUM_FORCE                                                                                                            \
                         FLOT__BLANC
                                        /* Valeur forcee des extrema d'une image flottante lorsque les extrema ne sont pas a         */
                                        /* calculer ou lorsque des images 'Standard's sont a convertir en flottant...                */

#define   EPSILON_DE_SEUILLAGE_INFERIEUR                                                                                                \
                    RACX(EPSILON_DE_SEUILLAGE_INFERIEUR_PAR_RAPPORT_AU_NIVEAU_ORIGINE_POUR_IFnormalisation)                             \
                                        /* Pour 'IFnormalisation_____epsilon_de_seuillage_inferieur_par_rapport_au_niveau_origine'.  */ \
                                        /* On utilise implicitement 'RACX(...)' afin de prevenir des "underflow" ulterieurs car, en  */ \
                                        /* effet, le resultat de l'eventuelle 'IFnormalisation(...)' va etre utilise dans des        */ \
                                        /* 'prdF3D(...)' ('v $xiii/montagnes$FON prdF3D.normale,rayon_lumineux.').                   */
#Aifdef   TYPE_DE_imageA_surface_VERSION_02
#Eifdef   TYPE_DE_imageA_surface_VERSION_02

#define   CHARGER_UN_FOND                                                                                                               \
                    FAUX                                                                                                                \
                                        /* Pour charger un fond a placer en arriere-plan de la montagne.                             */
#define   EFFACEMENT_PRELIMINAIRE                                                                                                       \
                    FAUX                                                                                                                \
                                        /* Pour ne pas effacer initialement l'image a generer puisqu'on fait un 'Inoir()'.           */
#define   GENERER_LES_OMBRES_PORTEES                                                                                                    \
                    VRAI                                                                                                                \
                                        /* Pour generer les ombres portees.                                                          */
#define   LARGEUR_DE_LA_ZONE_DE_PENOMBRE                                                                                                \
                    FLOT(DOUZE)                                                                                                         \
                                        /* Largeur de la zone de penombre.                                                           */

#define   FAIRE_DU_DEPTH_CUEING                                                                                                         \
                    FAUX                                                                                                                \
                                        /* Pour ne pas faire du "depth-cueing".                                                      */
#define   MINIMUM_DU_DEPTH_CUEING                                                                                                       \
                    FZERO                                                                                                               \
                                        /* Pour que le "depth-cueing" soit maximal lorsqu'il est demande.                            */
#define   VUE_D_AVION                                                                                                                   \
                    FAUX                                                                                                                \
                                        /* Pour voir la montagne en perspective.                                                     */
#define   FAIRE_LE_TRAITEMENT_ANTI_ALIASING                                                                                             \
                    VRAI                                                                                                                \
                                        /* Pour faire le traitement anti-aliasing.                                                   */

#define   ECHELLE_DU_CHAMP                                                                                                              \
                    FU                                                                                                                  \
                                        /* On laisse le champ invariant...                                                           */

#define   X_TRANSLATION_DE_LA_MONTAGNE                                                                                                  \
                    FZERO                                                                                                               \
                                        /* Translation horizontale,                                                                  */
#define   Y_TRANSLATION_DE_LA_MONTAGNE                                                                                                  \
                    FDU                                                                                                                 \
                                        /* Translation verticale,                                                                    */

#define   X_SOURCE_LUMINEUSE                                                                                                            \
                    FLOT(HUIT)                                                                                                          \
                                        /* Abscisse de la source lumineuse (autrefois 6.4453),                                       */
#define   Y_SOURCE_LUMINEUSE                                                                                                            \
                    FLOT(HUIT)                                                                                                          \
                                        /* Ordonnee de la source lumineuse (autrefois 2.7343).                                       */

#define   MEMORISER_LE_Z_BUFFER                                                                                                         \
                    FAUX                                                                                                                \
                                        /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie         */ \
                                        /* apres le calcul ('FAUX').                                                                 */
#define   MEMORISER_LE_Z_BUFFER_COMME_UNE_IMAGE_STANDARD                                                                                \
                    VRAI                                                                                                                \
                                        /* Indique si le 'Z-Buffer' est fourni comme resultat, si ce dernier doit etre fourni en     */ \
                                        /* tant qu'image standard ('VRAI') ou pas ('FAUX').                                          */

#define   AIDER_AU_CADRAGE                                                                                                              \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit editer les plus grandes ordonnees dans [0,1] rencontrees             */ \
                                        /* globalement et sur la 'last' ligne lors de la generation de la montagne.                  */
#define   EDITER_LES_EXTREMA_DU_Z_Buffer                                                                                                \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit editer les extrema {Z_Buffer_____minimum,Z_Buffer_____maximum} du    */ \
                                        /* 'Z-Buffer' lorsque 'IL_FAUT(aider_au_cadrage)'.                                           */

#define   TRAITEMENT_ANTI_ALIASING_LES_LIGNES_DE_CRETE                                                                                  \
                    FAUX
#define   TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_DILATATION                                                         \
                    C_VIDE
#define   TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_CONVOLUTION                                                        \
                    C_VIDE
                                        /* Introduit le 20151208113024 afin de traiter ("anti-aliasing") les lignes de crete...      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   imageSURFACE                                                                                                                  \
                    ImageA1
#define   FimageSURFACE                                                                                                                 \
                    IFmageA
                                        /* Definition de la surface (introduit le 20151208113024).                                   */

#define   imageTEXTURE                                                                                                                  \
                    ImageA2                                                                                                             \
                                        /* Definition de la texture (introduit le 20151208113024).                                   */
#define   imageZ_BUFFER                                                                                                                 \
                    ImageA3                                                                                                             \
                                        /* Definition du 'Z-Buffer' (introduit le 20151208113024).                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E X E C U T I O N   D E   L A   M I S E   E N   M O N T A G N E  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageT),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageZ),NOM_PIPE));

     DEFV(Logical,INIT(compatibilite_20131031,COMPATIBILITE_20131031));
                                        /* Permet d'assurer la compatibilite anterieure au 20131031074405 si besoin est...           */

#ifdef    TYPE_DE_imageA_surface_VERSION_02
     DEFV(Logical,INIT(la_surface_est_une_image_standard,LA_SURFACE_EST_UNE_IMAGE_STANDARD));
                                        /* L'image "surface" est-elle une image 'image' ou une image 'imageF' ???                    */
     DEFV(Logical,INIT(renormaliser_la_surface,RENORMALISER_LA_SURFACE));
                                        /* Lorsque l'image "surface" est une image 'imageF' faut-il la renormaliser ('VRAI') ou      */
                                        /* pas ('FAUX') ?                                                                            */
     DEFV(Logical,INIT(conserver_le_zero,CONSERVER_LE_ZERO));
                                        /* En cas d'image 'imageF' doit-on conserver le zero ('VRAI') ou pas ('FAUX').               */
     DEFV(Logical,INIT(il_faut_calculer_les_extrema_des_images_non_standards,IL_FAUT_CALCULER_LES_EXTREMA_DES_IMAGES_NON_STANDARDS));
                                        /* Dans le cas d'une image flottante faut-il calculer les extrema pour la conversion         */
                                        /* ('VRAI') ou les forcer ('FAUX') ?                                                         */
     DEFV(genere_Float,INIT(minimum_force,MINIMUM_FORCE));
     DEFV(genere_Float,INIT(maximum_force,MAXIMUM_FORCE));
                                        /* Valeur forcee des extrema d'une image flottante lorsque les extrema ne sont pas a         */
                                        /* calculer ou lorsque des images 'Standard's sont a convertir en flottant...                */
#Aifdef   TYPE_DE_imageA_surface_VERSION_02
#Eifdef   TYPE_DE_imageA_surface_VERSION_02

     DEFV(Float,INIT(echelle_du_champ,ECHELLE_DU_CHAMP));
                                        /* Facteur d'echelle a appliquer a l'image Argument.                                         */
     DEFV(deltaF_2D,translation_de_la_montagne);
                                        /* Translation de la montagne dans l'image.                                                  */
     DEFV(pointF_2D,source_lumineuse);
                                        /* Position de la source lumineuse.                                                          */
     DEFV(Logical,INIT(charger_un_fond,CHARGER_UN_FOND));
                                        /* Pour charger un fond a placer en arriere-plan de la montagne.                             */
     DEFV(Logical,INIT(effacement_preliminaire,EFFACEMENT_PRELIMINAIRE));
                                        /* Pour l'effacement initial de l'image Resultat.                                            */
     DEFV(Logical,INIT(generer_les_ombres_portees,GENERER_LES_OMBRES_PORTEES));
                                        /* Pour mettre ou pas les ombres portees,                                                    */
     DEFV(Float,INIT(largeur_de_la_zone_de_penombre,LARGEUR_DE_LA_ZONE_DE_PENOMBRE));
                                        /* Largeur de la zone de penombre.                                                           */
     DEFV(Logical,INIT(faire_du_depth_cueing,FAIRE_DU_DEPTH_CUEING));
                                        /* Pour faire ou pas du "depth-cueing",                                                      */
     DEFV(Float,INIT(minimum_du_depth_cueing,MINIMUM_DU_DEPTH_CUEING));
                                        /* Pour ponderer dans [0,1] le "depth-cueing" : plus on est proche de                        */
                                        /* zero, plus il est fort...                                                                 */
     DEFV(Logical,INIT(vue_d_avion,VUE_D_AVION));
                                        /* Pour voir d'avion ou pas la montagne.                                                     */
     DEFV(Logical,INIT(faire_le_traitement_anti_aliasing,FAIRE_LE_TRAITEMENT_ANTI_ALIASING));
                                        /* Pour faire ou pas le traitement anti-aliasing.                                            */
     DEFV(Logical,INIT(memoriser_le_Z_Buffer,MEMORISER_LE_Z_BUFFER));
                                        /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie         */
                                        /* apres le calcul ('FAUX').                                                                 */
     DEFV(Logical,INIT(memoriser_le_Z_Buffer_comme_une_image_standard,MEMORISER_LE_Z_BUFFER_COMME_UNE_IMAGE_STANDARD));
                                        /* Indique si le 'Z-Buffer' est fourni comme resultat, si ce dernier doit etre fourni en     */
                                        /* tant qu'image standard ('VRAI') ou pas ('FAUX').                                          */
     DEFV(Logical,INIT(aider_au_cadrage,AIDER_AU_CADRAGE));
                                        /* Indique si l'on doit editer les plus grandes ordonnees dans [0,1] rencontrees             */
                                        /* globalement et sur la 'last' ligne lors de la generation de la montagne.                  */
     DEFV(Logical,INIT(editer_les_extrema_du_Z_Buffer,EDITER_LES_EXTREMA_DU_Z_Buffer));
                                        /* Indique si l'on doit editer les extrema {Z_Buffer_____minimum,Z_Buffer_____maximum} du    */
                                        /* 'Z-Buffer' lorsque 'IL_FAUT(aider_au_cadrage)'.                                           */

     DEFV(Logical,INIT(traitement_anti_aliasing_les_lignes_de_crete,TRAITEMENT_ANTI_ALIASING_LES_LIGNES_DE_CRETE));
     DEFV(CHAR,INIC(POINTERc(traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation)
                   ,TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_DILATATION
                    )
          );
     DEFV(CHAR,INIC(POINTERc(traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution)
                   ,TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_CONVOLUTION
                    )
          );
                                        /* Introduit le 20151208113024 afin de traiter ("anti-aliasing") les lignes de crete...      */
     /*..............................................................................................................................*/
     EGAL(Z_Buffer_____valeur_initiale,VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES);
                                        /* A priori, au cas ou le 'Z' serait interpole dans le 'Z-Buffer'...                         */

     INITIALISATION_ACCROISSEMENT_2D(translation_de_la_montagne,X_TRANSLATION_DE_LA_MONTAGNE,Y_TRANSLATION_DE_LA_MONTAGNE);
                                        /* Initialisation par defaut de la translation de la montagne.                               */
     INITIALISATION_POINT_2D(source_lumineuse,X_SOURCE_LUMINEUSE,Y_SOURCE_LUMINEUSE);
                                        /* Initialisation par defaut de la source lumineuse.                                         */

#define   GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing                                     \
                    "zbuffer_interpole=""zBuffer_interpole=""Zi=""Zbuffer_interpole=""ZBuffer_interpole=""Z-Buffer_interpole="
#define   GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard                                                             \
                    "zbuffer_standard=""zBuffer_standard=""Zbuffer_standard=""ZBuffer_standard=""Z-Buffer_standard="
                                        /* Afin de raccourcir une ligne suivante (introduit le 20070223135715)...                    */

#ifdef    TYPE_DE_imageA_surface_VERSION_01
     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("compatibilite_20131031=",compatibilite_20131031);
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20061220=""compatibilite_20061220="
                                       ,Imontagnes_precises_____compatibilite_20061220
                                        );
                                        /* Introduit le 20061220104910...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090130=""compatibilite_20090130="
                                       ,Imontagnes_precises_____compatibilite_20090130
                                        );
                                        /* Introduit le 20090130182048...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090202=""compatibilite_20090202="
                                       ,Imontagnes_precises_____compatibilite_20090202
                                        );
                                        /* Introduit le 20090202104006...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090203=""compatibilite_20090203="
                                       ,Imontagnes_precises_____compatibilite_20090203
                                        );
                                        /* Introduit le 20090203155036...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20100223=""compatibilite_20100223="
                                       ,Imontagnes_precises_____compatibilite_20100223
                                        );
                                        /* Introduit le 20100223173603...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20210928=""compatibilite_20210928="
                                       ,Imontagnes_precises_____compatibilite_20210928
                                        );
                                        /* Introduit le 20210928141600...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20211001=""compatibilite_20211001="
                                       ,Imontagnes_precises_____compatibilite_20211001
                                        );
                                        /* Introduit le 20211001181008...                                                            */

                         GET_ARGUMENT_C("imageF=""F=",nom_imageF);
                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("texture=""T=",nom_imageT);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ);
                         GET_ARGUMENT_L("fond=",charger_un_fond);
                         GET_ARGUMENT_L(GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
                                       ,Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
                                        );
                         GET_ARGUMENT_F("Z0=",Z_Buffer_____valeur_initiale);
                         GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer);
                         GET_ARGUMENT_L(GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard
                                       ,memoriser_le_Z_Buffer_comme_une_image_standard
                                        );
                                        /* On notera le 20151208094749 que le 'Z-Buffer' en mode "standard", complemente et          */
                                        /* legerement dilate peut servir de noyau de convolution (via 'v $xci/convol.02$K')          */
                                        /* pour "anti-aliaser" les lignes de crete ('v $xiirc/VONK.72$M' a ce propos...).            */

                         GET_ARGUMENT_F("Tx=",ASD1(translation_de_la_montagne,dx));
                         GET_ARGUMENT_F("Ty=",ASD1(translation_de_la_montagne,dy));
                         GET_ARGUMENT_F("sx=""Sx=",ASD1(source_lumineuse,x));
                         GET_ARGUMENT_F("sy=""Sy=",ASD1(source_lumineuse,y));

                         GET_ARGUMENT_L("effacement=""init=",effacement_preliminaire);
                         GET_ARGUMENT_F("echelle=""e=",echelle_du_champ);

                         GET_ARGUMENT_F("Tz=",Imontagnes_precises_____translation_de_la_coordonnee_Z_lors_d_une_vue_d_avion);
                                        /* Introduit le 20080214131153 lors de la regeneration de 'v $xiirf/PAYS.R5$M' pour laquelle */
                                        /* 'facteur_d_echelle' est negatif ce qui provoquait alors des 'Zf' tous negatifs            */
                                        /* dans 'v $xiii/montagnes$FON TRACE_POINT_3D_VUE_D_AVION' et donc des points invisibles...  */

                         GET_ARGUMENT_F("source_lumineuse_intensite_speculaire=""slis=""is=""speculaire="
                                       ,Imontagnes_precises_____source_lumineuse_specularite
                                        );
                                        /* Introduit le 20130101110056...                                                            */
                         GET_ARGUMENT_L("ombres=",generer_les_ombres_portees);
                         GET_ARGUMENT_F("largeur_penombre=""penombre=",largeur_de_la_zone_de_penombre);
                         GET_ARGUMENT_L("depth_cueing=""depth=",faire_du_depth_cueing);
                         GET_ARGUMENT_F("minimum=""min_depth_cueing=""min=",minimum_du_depth_cueing);
                                        /* Le 20110223144930 furent introduits "depth_cueing=" et "min_depth_cueing="...             */
                         GET_ARGUMENT_F("depthN=",Imontagnes_precises_____depth_cueing_ponderation_niveau);
                         GET_ARGUMENT_F("depthX=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_X);
                         GET_ARGUMENT_F("depthY=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_Y);
                         GET_ARGUMENT_F("depthT=",Imontagnes_precises_____depth_cueing_translation);
                         GET_ARGUMENT_L("avion=",vue_d_avion);
                         GET_ARGUMENT_F("perspective=",Imontagnes_precises_____facteur_de_correction_perspective);
                         GET_ARGUMENT_L("verification_perspective=""vp="
                                       ,Imontagnes_precises_____verification_de_la_correction_perspective
                                        );
                                        /* Introduit le 20170413103808...                                                            */
                         GET_ARGUMENT_L("alias=",faire_le_traitement_anti_aliasing);
                         GET_ARGUMENT_F("fc=""facteur_cretes=",Imontagnes_precises_____facteur_profondeur_toutes_lignes_de_crete);
                                        /* Introduit le 20061220160522...                                                            */

                         GET_ARGUMENT_F("fc1=""facteur_cretes_1="
                                       ,Imontagnes_precises_____facteur_1_interpolation_toutes_lignes_de_crete
                                        );
                         GET_ARGUMENT_F("fc2=""facteur_cretes_2="
                                       ,Imontagnes_precises_____facteur_2_interpolation_toutes_lignes_de_crete
                                        );
                                        /* Introduit le 20061220120334 et etendu le 20061220134944 a deux facteurs...                */

                         GET_ARGUMENT_L("interpoler=",Imontagnes_precises_____interpoler_les_lignes_de_crete_sur_la_montagne);
                         GET_ARGUMENT_L("falaise=",Imontagnes_precises_____visualiser_la_falaise_avant_de_la_montagne);
                         GET_ARGUMENT_F("idv=",Imontagnes_precises_____importance_du_decalage_vertical);
                         GET_ARGUMENT_L("aide_cadrage=""cadrage=""aide=",aider_au_cadrage);
                         GET_ARGUMENT_L("Zextrema=",editer_les_extrema_du_Z_Buffer);

                         GET_ARGUMENT_L("anti_aliasing_lignes_crete=""aalc=",traitement_anti_aliasing_les_lignes_de_crete);
                         GET_ARGUMENT_C("arguments_dilatation=""ad="
                                       ,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation
                                        );
                         GET_ARGUMENT_C("arguments_convolution=""ac="
                                       ,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution
                                        );
                                        /* Introduits le 20151208113024...                                                           */
                         )
                    );
#Aifdef   TYPE_DE_imageA_surface_VERSION_01
#Eifdef   TYPE_DE_imageA_surface_VERSION_01

#ifdef    TYPE_DE_imageA_surface_VERSION_02
     EGAL(IFnormalisation_____epsilon_de_seuillage_inferieur_par_rapport_au_niveau_origine,EPSILON_DE_SEUILLAGE_INFERIEUR);

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("compatibilite_20131031=",compatibilite_20131031);
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20061220=""compatibilite_20061220="
                                       ,Imontagnes_precises_____compatibilite_20061220
                                        );
                                        /* Introduit le 20061220104910...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090130=""compatibilite_20090130="
                                       ,Imontagnes_precises_____compatibilite_20090130
                                        );
                                        /* Introduit le 20090130182048...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090202=""compatibilite_20090202="
                                       ,Imontagnes_precises_____compatibilite_20090202
                                        );
                                        /* Introduit le 20090202104006...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090203=""compatibilite_20090203="
                                       ,Imontagnes_precises_____compatibilite_20090203
                                        );
                                        /* Introduit le 20090203155036...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20100223=""compatibilite_20100223="
                                       ,Imontagnes_precises_____compatibilite_20100223
                                        );
                                        /* Introduit le 20100223173603...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20210928=""compatibilite_20210928="
                                       ,Imontagnes_precises_____compatibilite_20210928
                                        );
                                        /* Introduit le 20210928141600...                                                            */
                         GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20211001=""compatibilite_20211001="
                                       ,Imontagnes_precises_____compatibilite_20211001
                                        );
                                        /* Introduit le 20211001181008...                                                            */

                         GET_ARGUMENT_C("imageF=""F=",nom_imageF);
                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("texture=""T=",nom_imageT);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ);
                         GET_ARGUMENT_L("standard=",la_surface_est_une_image_standard);
                         GET_ARGUMENT_L("rn=""renormaliser=",renormaliser_la_surface);
                         GET_ARGUMENT_L("zero=",conserver_le_zero);
                         GET_ARGUMENT_L("extrema=",il_faut_calculer_les_extrema_des_images_non_standards);
                         GET_ARGUMENT_F("minimum_force=",minimum_force);
                         GET_ARGUMENT_F("maximum_force=",maximum_force);
                         GET_ARGUMENT_L("fond=",charger_un_fond);
                         GET_ARGUMENT_L(GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
                                       ,Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
                                        );
                         GET_ARGUMENT_F("Z0=",Z_Buffer_____valeur_initiale);
                         GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer);
                         GET_ARGUMENT_L(GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard
                                       ,memoriser_le_Z_Buffer_comme_une_image_standard
                                        );

                         GET_ARGUMENT_F("Tx=",ASD1(translation_de_la_montagne,dx));
                         GET_ARGUMENT_F("Ty=",ASD1(translation_de_la_montagne,dy));
                                        /* On notera le 20150112124927 que "Ty=", "perspective=" et "echelle=" ne sont bien          */
                                        /* "homothetiques" (lors d'un changement de format) que si les valeurs contenues dans        */
                                        /* le fichier 'nom_imageA' sont bien dans [0,1]. Des difficultes liees a des bornes          */
                                        /* differentes ont ete rencontrees lors de la generation de l'image 'v $xiirv/CHAR.12$M',    */
                                        /* le probleme venant surtout de 'v $xiii/montagnes$FON 013313_013824'...                    */
                         GET_ARGUMENT_F("sx=""sX=""Sx=""SX=",ASD1(source_lumineuse,x));
                         GET_ARGUMENT_F("sy=""sY=""Sy=""SY=",ASD1(source_lumineuse,y));

                         GET_ARGUMENT_L("effacement=""init=",effacement_preliminaire);
                         GET_ARGUMENT_F("echelle=""e=",echelle_du_champ);
                                        /* On notera le 20150112124927 que "Ty=", "perspective=" et "echelle=" ne sont bien          */
                                        /* "homothetiques" (lors d'un changement de format) que si les valeurs contenues dans        */
                                        /* le fichier 'nom_imageA' sont bien dans [0,1]. Des difficultes liees a des bornes          */
                                        /* differentes ont ete rencontrees lors de la generation de l'image 'v $xiirv/CHAR.12$M',    */
                                        /* le probleme venant surtout de 'v $xiii/montagnes$FON 013313_013824'...                    */

                         GET_ARGUMENT_F("Tz=",Imontagnes_precises_____translation_de_la_coordonnee_Z_lors_d_une_vue_d_avion);
                                        /* Introduit le 20080214131153 lors de la regeneration de 'v $xiirf/PAYS.R5$M' pour laquelle */
                                        /* 'facteur_d_echelle' est negatif ce qui provoquait alors des 'Zf' tous negatifs            */
                                        /* dans 'v $xiii/montagnes$FON TRACE_POINT_3D_VUE_D_AVION' et donc des points invisibles...  */

                         GET_ARGUMENT_F("source_lumineuse_intensite_speculaire=""slis=""is=""speculaire="
                                       ,Imontagnes_precises_____source_lumineuse_specularite
                                        );
                                        /* Introduit le 20130101110056...                                                            */
                         GET_ARGUMENT_L("ombres=",generer_les_ombres_portees);
                         GET_ARGUMENT_F("largeur_penombre=""penombre=",largeur_de_la_zone_de_penombre);
                         GET_ARGUMENT_F("attenuation=",Imontagnes_precises_____facteur_d_attenuation_a_l_ombre);
                         GET_ARGUMENT_F("Nminimum=",minimum_normalise_du_cosinus_d_une_normale);
                         GET_ARGUMENT_F("Nmaximum=",maximum_normalise_du_cosinus_d_une_normale);
                         GET_ARGUMENT_L("depth_cueing=""depth=",faire_du_depth_cueing);
                         GET_ARGUMENT_F("minimum=""min_depth_cueing=""min=",minimum_du_depth_cueing);
                                        /* Le 20110223144930 furent introduits "depth_cueing=" et "min_depth_cueing="...             */
                         GET_ARGUMENT_F("Adepth_cueing=""Adepth=""Ad=",Imontagnes_precises_____Ay_reduit);
                         GET_ARGUMENT_F("Bdepth_cueing=""Bdepth=""Bd=",Imontagnes_precises_____By_reduit);
                                        /* Introduits le 20140627115805 afin de pouvoir, par exemple, inverser le "depth-cueing"...  */
                         GET_ARGUMENT_F("depthN=",Imontagnes_precises_____depth_cueing_ponderation_niveau);
                         GET_ARGUMENT_F("depthX=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_X);
                         GET_ARGUMENT_F("depthY=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_Y);
                         GET_ARGUMENT_F("depthT=",Imontagnes_precises_____depth_cueing_translation);

                         GET_ARGUMENT_L("avion=",vue_d_avion);
                         GET_ARGUMENT_F("perspective=",Imontagnes_precises_____facteur_de_correction_perspective);
                                        /* On notera le 20150112124927 que "Ty=", "perspective=" et "echelle=" ne sont bien          */
                                        /* "homothetiques" (lors d'un changement de format) que si les valeurs contenues dans        */
                                        /* le fichier 'nom_imageA' sont bien dans [0,1]. Des difficultes liees a des bornes          */
                                        /* differentes ont ete rencontrees lors de la generation de l'image 'v $xiirv/CHAR.12$M',    */
                                        /* le probleme venant surtout de 'v $xiii/montagnes$FON 013313_013824'...                    */
                         GET_ARGUMENT_L("verification_perspective=""vp="
                                       ,Imontagnes_precises_____verification_de_la_correction_perspective
                                        );
                                        /* Introduit le 20170413103808...                                                            */
                         GET_ARGUMENT_L("alias=",faire_le_traitement_anti_aliasing);

                         GET_ARGUMENT_F("fc=""facteur_cretes=",Imontagnes_precises_____facteur_profondeur_toutes_lignes_de_crete);
                                        /* Introduit le 20061220160522...                                                            */
                         GET_ARGUMENT_F("fc1=""facteur_cretes_1="
                                       ,Imontagnes_precises_____facteur_1_interpolation_toutes_lignes_de_crete
                                        );
                         GET_ARGUMENT_F("fc2=""facteur_cretes_2="
                                       ,Imontagnes_precises_____facteur_2_interpolation_toutes_lignes_de_crete
                                        );
                                        /* Introduit le 20061220120334 et etendu le 20061220134944 a deux facteurs...                */

                         GET_ARGUMENT_L("interpoler=",Imontagnes_precises_____interpoler_les_lignes_de_crete_sur_la_montagne);
                         GET_ARGUMENT_L("falaise=",Imontagnes_precises_____visualiser_la_falaise_avant_de_la_montagne);
                         GET_ARGUMENT_F("idv=",Imontagnes_precises_____importance_du_decalage_vertical);
                         GET_ARGUMENT_L("aide_cadrage=""cadrage=""aide=",aider_au_cadrage);
                         GET_ARGUMENT_L("Zextrema=",editer_les_extrema_du_Z_Buffer);
                         GET_ARGUMENT_P("noir=""NOIR=",noir_plancher_substitution);
                         GET_ARGUMENT_I("pas_falaise=",pas_entre_CLIPPING_INTENSITE_et_MIN_INTENSITE);
                         GET_ARGUMENT_F("epsilon=",IFnormalisation_____epsilon_de_seuillage_inferieur_par_rapport_au_niveau_origine);

                         GET_ARGUMENT_L("anti_aliasing_lignes_crete=""aalc=",traitement_anti_aliasing_les_lignes_de_crete);
                         GET_ARGUMENT_C("arguments_dilatation=""ad="
                                       ,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation
                                        );
                         GET_ARGUMENT_C("arguments_convolution=""ac="
                                       ,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution
                                        );
                                        /* Introduits le 20151208113024...                                                           */

                         GET_ARGUMENT_L("editer_Z=""eZ=",Itrace_segment_vertical_____editer_la_coordonnee_Z_d_un_point);
                         GET_ARGUMENT_I("point_X=""pX="
                                       ,Itrace_segment_vertical_____coordonnee_X_du_point_dont_on_veut_la_coordonnee_Z
                                        );
                         GET_ARGUMENT_I("point_Y=""pY="
                                       ,Itrace_segment_vertical_____coordonnee_Y_du_point_dont_on_veut_la_coordonnee_Z
                                        );
                                        /* Introduits le 20240330120932 pour faire des tests. Voici un exemple d'utilisation :       */
                                        /*                                                                                           */
                                        /*                  Squ                                                                      */
                                        /*                  v         $xiirv/PIPO.U1$m                                               */
                                        /*                                                                                           */
                                        /* Le curseur pointant sur un pic "9" (entre "27" et "50") donne :                           */
                                        /*                                                                                           */
                                        /*                                      curseur=(+1372.000000,+1010.000000)                  */
                                        /*                                                                                           */
                                        /* On communique ensuite aux differents '$xci/montagne.01$X' les arguments suivants :        */
                                        /*                                                                                           */
                                        /*                  editer_Z=VRAI       pX=1372 pY=1010                                      */
                                        /*                                                                                           */
                                        /* qui donne :                                                                               */
                                        /*                                                                                           */
                                        /*                                      Y(OrigineVecteur)=1074 Y(ExtremiteVecteur)=1075      */
                                        /*                                      X=1372 Y=1010 Z=1075                                 */
                                        /*                                        ----          ----                                 */
                                        /*                                         /\            /\                                  */
                                        /*                                         ||            ||                                  */
                                        /* Puis :                                  ||             --------------------------------   */
                                        /*                                         ||                                             |  */
                                        /*                                          ------------------------------------          |  */
                                        /*                                                                              |         |  */
                                        /*                                                                              |         |  */
                                        /*                                                                              |         |  */
                                        /*                  v         $xiirv/PIPO.U1$M                                  |         |  */
                                        /*                                                                              |         |  */
                                        /* le curseur pointant sur le sommet du meme pic "9" donne :                    |         |  */
                                        /*                                                                              |         |  */
                                        /*                                      curseur=(+1372.000000,+1075.000000)     |         |  */
                                        /*                                                                              |         |  */
                                        /* soit :                                                                       |         |  */
                                        /*                                                                              |         |  */
                                        /*                                      X=1372    <-----------------------------          |  */
                                        /*                                      Y=1075    <---------------------------------------   */
                                        /*                                                                                           */
                                        /* et ainsi, le sommet du pic est a l'ordonnee Y=1075 du plan de l'image, ce qui correspond  */
                                        /* bien a la hauteur Z=1075 du pic utilise pour le test...                                   */
                         )
                    );
#Aifdef   TYPE_DE_imageA_surface_VERSION_02
#Eifdef   TYPE_DE_imageA_surface_VERSION_02

#undef    GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
#undef    GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard

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

     Test(IFEQ_chaine(nom_imageR,NOM_PIPE))
          Bblock
          Test(IL_FAUT(traitement_anti_aliasing_les_lignes_de_crete))
                                        /* Test introduit le 20151208113024...                                                       */
               Bblock
               PRINT_ATTENTION("pour l'anti-aliasing de crete, l'image Resultat ne peut pas etre le 'pipe', on y renonce donc.");
                                        /* En effet, lors du traiement "anti-alising" des lignes de crete, le nom 'nom_imageR'       */
                                        /* sert dans 'convol.02' alors que le "pipe" est deja utilise pour le dialogue entre         */
                                        /* 'eor' et ce meme 'convol.02', d'ou un conflit...                                          */

               EGAL(traitement_anti_aliasing_les_lignes_de_crete,FAUX);
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

#ifdef    TYPE_DE_imageA_surface_VERSION_01
     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(imageSURFACE,nom_imageA))))
#Aifdef   TYPE_DE_imageA_surface_VERSION_01
#Eifdef   TYPE_DE_imageA_surface_VERSION_01

#ifdef    TYPE_DE_imageA_surface_VERSION_02
     Test(PAS_D_ERREUR(CODE_ERROR(COND(EST_VRAI(la_surface_est_une_image_standard)
                                      ,Iload_image(imageSURFACE,nom_imageA)
                                      ,IloadF_image(FimageSURFACE,nom_imageA)
                                       )
                                  )
                       )
          )
#Aifdef   TYPE_DE_imageA_surface_VERSION_02
#Eifdef   TYPE_DE_imageA_surface_VERSION_02

                                        /* Chargement de l'image a transformer.                                                      */
          Bblock
          Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(imageTEXTURE,nom_imageT))))
                                        /* Chargement de la texture.                                                                 */
               Bblock
               Test(IL_FAUT(Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing))
                    Bblock
                    Test(IFNE(Z_Buffer_____valeur_initiale,VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES))
                         Bblock
                         PRINT_ATTENTION("la valeur d'initialisation du 'Z-Buffer' n'est pas compatible avec un effet de brume");

                         Test(IL_FAUT(compatibilite_20131031))
                              Bblock
                              EGAL(Z_Buffer_____valeur_initiale,VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES);
                                        /* Dans le cas ou le 'Z' va etre interpole dans le 'Z-Buffer', il est important que la       */
                                        /* valeur d'initialisation de ce dernier soit la bonne...                                    */
                                        /*                                                                                           */
                                        /* Je note le 20131030082449 que si l'image 'nom_imageA' contient des valeurs negatives      */
                                        /* (et donc inferieures a 'VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES'), alors il y      */
                                        /* aura des "trous" dans la surface. Cela s'est vu a cette date lors de la generation des    */
                                        /* images du type 'v $xiirf/PAYU.F4$m p=$xiP/gris.01' et a impose l'utilisation de :         */
                                        /*                                                                                           */
                                        /*                  renormaliser=VRAI                                                        */
                                        /*                                                                                           */
                                        /* D'ou la modification du 20131031074405...                                                 */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALS(Iinit_Z_Buffer());
                                        /* Initialisation standard du 'Z-Buffer'.                                                    */

               Test(IL_FAUT(charger_un_fond))
                    Bblock
                    Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageR,nom_imageF))))
                         Bblock
                         EGAL(effacement_preliminaire,FAUX);
                                        /* Pour ne surtout pas effacer l'image Resultat.                                             */
                         Eblock
                    ATes
                         Bblock
                         Test__CODE_ERREUR__ERREUR07;
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

#ifdef    TYPE_DE_imageA_surface_VERSION_01
               CALS(Imontagnes(ImageR
                              ,echelle_du_champ,imageSURFACE
                              ,imageTEXTURE
                              ,effacement_preliminaire
                              ,ADRESSE(translation_de_la_montagne)
                              ,generer_les_ombres_portees,largeur_de_la_zone_de_penombre,ADRESSE(source_lumineuse)
                              ,faire_du_depth_cueing,minimum_du_depth_cueing
                              ,vue_d_avion
                              ,faire_le_traitement_anti_aliasing
                               )
                    );
#Aifdef   TYPE_DE_imageA_surface_VERSION_01
#Eifdef   TYPE_DE_imageA_surface_VERSION_01

#ifdef    TYPE_DE_imageA_surface_VERSION_02
               Test(EST_VRAI(la_surface_est_une_image_standard))
                    Bblock
                                        /* Cas d'une image 'image' :                                                                 */
                    CALS(Imontagnes(ImageR
                                   ,echelle_du_champ,imageSURFACE
                                   ,imageTEXTURE
                                   ,effacement_preliminaire
                                   ,ADRESSE(translation_de_la_montagne)
                                   ,generer_les_ombres_portees,largeur_de_la_zone_de_penombre,ADRESSE(source_lumineuse)
                                   ,faire_du_depth_cueing,minimum_du_depth_cueing
                                   ,vue_d_avion
                                   ,faire_le_traitement_anti_aliasing
                                    )
                         );
                    Eblock
               ATes
                    Bblock
                                        /* Cas d'une image 'imageF' :                                                                */
                    Test(IL_NE_FAUT_PAS(renormaliser_la_surface))
                         Bblock
                         CALS(IFmove(IFmageR,FimageSURFACE));
                                        /* Cas ou la surface n'est pas renormalisee...                                               */
                         Eblock
                    ATes
                         Bblock
                         DEFV(genere_Float,INIT(nivo_minimum,minimum_force));
                         DEFV(genere_Float,INIT(nivo_maximum,maximum_force));
                                        /* Niveaux extrema de la surface.                                                            */

                         Test(EST_VRAI(il_faut_calculer_les_extrema_des_images_non_standards))
                              Bblock
                              CALS(IFnivo_extrema(FimageSURFACE,ADRESSE(nivo_minimum),ADRESSE(nivo_maximum)));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IL_FAUT(conserver_le_zero))
                              Bblock
                              CALS(IFnormalisation_avec_le_vrai_zero(IFmageR,FimageSURFACE,nivo_minimum,nivo_maximum));
                                        /* Cas ou la surface est renormalisee en conservant le vrai zero...                          */
                              Eblock
                         ATes
                              Bblock
                              CALS(IFnormalisation(IFmageR,FimageSURFACE,nivo_minimum,nivo_maximum));
                                        /* Cas ou la surface est renormalisee...                                                     */
                              Eblock
                         ETes
                         Eblock
                    ETes

                    CALS(Imontagnes_precises(ImageR
                                            ,echelle_du_champ,IFmageR
                                            ,imageTEXTURE
                                            ,effacement_preliminaire
                                            ,ADRESSE(translation_de_la_montagne)
                                            ,generer_les_ombres_portees,largeur_de_la_zone_de_penombre,ADRESSE(source_lumineuse)
                                            ,faire_du_depth_cueing,minimum_du_depth_cueing
                                            ,vue_d_avion
                                            ,faire_le_traitement_anti_aliasing
                                             )
                         );
                    Eblock
               ETes
#Aifdef   TYPE_DE_imageA_surface_VERSION_02
#Eifdef   TYPE_DE_imageA_surface_VERSION_02

               CALi(Iupdate_image(nom_imageR,ImageR));

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

               Test(IL_FAUT(aider_au_cadrage))
                    Bblock
                    CAL3(Prme3("%+.^^^ %+.^^^ Ty=%+.^^^\n"
                              ,Itrace_segment_vertical_____plus_grande_ordonnee_sur_la_montagne
                              ,Itrace_segment_vertical_____plus_grande_ordonnee_sur_la_last_ligne_de_la_montagne
                              ,SOUS(ASD1(translation_de_la_montagne,dy)
                                   ,Itrace_segment_vertical_____plus_grande_ordonnee_sur_la_last_ligne_de_la_montagne
                                    )
                               )
                         );
                                        /* Edition des plus grandes ordonnees denormalisees :                                        */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*              :#-*     --......................................................            */
                                        /*             :--o#** o-##o                                                    plus grande  */
                                        /*           -:.+-##o#+-*+#+#*o                                                 ordonnee sur */
                                        /*        o -:.:+#-*+o:o-**o:*+                                                 la montagne  */
                                        /*        o*.--*-#-###-*-o*oo*#* -                                       o                   */
                                        /*        ##*#:-:-*o++#+*o-*+*#**oo.                                :+-*--                   */
                                        /*        ##-#o-:-*--****+o+*o#++*+o++#       +*                   .+#++:-                   */
                                        /*        +*oo#*.:--*+*#*o-o-##o*-o**-+#### +####:+#*+* o         -+**+.-:                   */
                                        /*        *#o-#*-:+-o+#+##o#-o###-o#*-o*+-:-:-++:#o*#o**o*oo+*++-###+o-:*:                   */
                                        /*        --#####*oo*o:+-#o#*o+##o**+o+*+-+.**:o+##--:o--#+:#:-++o:*oo:#:-                   */
                                        /*        o-###+o+#*##--**oo#*o*##o**+++::::--+-o*:##+o*-*++*---++o*#++o:-                   */
                                        /*        o+#-o#o#o*#*-**o*oo*o*#o##oo*o:..:o---*-:-#ooooo:o*-#:o*oo#:#**:                   */
                                        /*        *+o###-#-**+oo#****#-*o##--*oo.:.:-.+++-+***o*o+o:o*-*+o+*#:+-:+                   */
                                        /*        ##**###+###+***#*-++****o#+*o:::.-::.o+++---*:::--#-***+o++++-+#                   */
                                        /*        **##+#:-#**+--#oo#-o+*+-#*#+---::::.-----:#:o-.--*##*#:-##++:+o:                   */
                                        /*        o+#o*-*+*ooo*+*#o*#*o**+-#*o+:::..-:-+-o#:o-::--:o**o+**+*-*#:#-                   */
                                        /*        o*#*#+#*o#*#o**##-*##-*#:##*-::..+::-#++:::::-.-:*+:**+*:--o-+o#                   */
                                        /*        +++*####o+*#*+o+*++*#o#*##*#:.+*oo:o#*-++-::.-:--*ooo#*+..+:o##-                   */
                                        /*        o++o###*####*o##o:+o*#+*-#o*--:-+#:.::*-o+-#::-+++o:##+**::*o#+o                   */
                                        /*        o+o:*o#o-#*--*#+-::+#**oo+#+-.:+o#.#-#+##***++:#-o-*o:-+-:+#-o++                   */
                                        /*        o+o-o***##+#*-*#-:+#o#*o#---::-.+o++*o**o-*#-.+#:::*-:-o:+-#*o+:                   */
                                        /*        **.*-o##o*#**-:-#-######o+:+.....++++o*##:*-*+#oo.::.+.+-:o*+o*+                   */
                                        /*        o+oo:##**##o:#*#-*#o#o#***+::...-:o+:-##:**+*-#+o+-:.:.-.-+o+#**                   */
                                        /*        #oo-:--*#+.-*#*#:-***oo*#+::...:++o:-oo#:*oo#-#*-::.....:o+o#oo:                   */
                                        /*        #o---.+:+##**o:oo#:--#*+oo-*+:.#-#*--+-*#*o:#*oo:-:::...::+-#+o#                   */
                                        /*        +#*:--:#+:+#-:*#-#*o##-o#+:*::o*o-#*:-+##*-#o++o--::##+:-::+#**+                   */
                                        /*        -*:*-*o-o#*-:-+:-+*##o:#*-##o#***#o##.-*o## ...........................            */
                                        /*        +o:----++*o--#+o#o:-+o#*###**+##*+#*o-:#      +:o-#-::-+::+*oo##      plus grande  */
                                        /*        -...--o.#**--#o*-###*#-o#*o-+-*#*o+*--         #+:#**:++::o*:oo+      ordonnee sur */
                                        /*        *o+-+#o+-o+o*.+:.+o-###*#o#o*:-o#+*#:            ###+---:-*++*#:      la 'last'    */
                                        /*                                                                              ligne de la  */
                                        /*                                                                              montagne     */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Le 20060105155204, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123248, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20151209113217, fut introduit l'edition de la valeur optimale de "Ty=" afin de voir    */
                                        /* le bas de la montagne, sans zones noires...                                               */
                    Test(IL_FAUT(editer_les_extrema_du_Z_Buffer))
                         Bblock
                         CAL3(Prme2("Zmin=%+.^^^ Zmax=%+.^^^\n"
                                   ,Z_Buffer_____minimum
                                   ,Z_Buffer_____maximum
                                    )
                              );
                                        /* Edition des extrema du 'Z-Buffer'.                                                        */
                                        /*                                                                                           */
                                        /* Le 20060105155204, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123248, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(traitement_anti_aliasing_les_lignes_de_crete))
                    Bblock
                                        /* Test introduit le 20151208113024...                                                       */
                    DEFV(CHAR,INIC(POINTERc(nom_ZBuffer),generation_d_un_nom_absolu_dans_xT_temporaire(Gvar("Z_BUFFER"))));
                    DEFV(CHAR,INIC(POINTERc(nom_ZBufferMasque),generation_d_un_nom_absolu_dans_xT_temporaire("MASQUE")));
                    DEFV(CHAR,INIC(POINTERc(nom_ZBufferDilate),generation_d_un_nom_absolu_dans_xT_temporaire("DILATE")));
                    DEFV(CHAR,INIC(POINTERc(nom_ZBufferErode),generation_d_un_nom_absolu_dans_xT_temporaire("ERODE")));

                    CALS(Ifloat_std_du_Z_Buffer(imageZ_BUFFER));
                    CALi(Iupdate_image(nom_ZBuffer,imageZ_BUFFER));
                                        /* Conversion du 'Z-Buffer' en une image "standard" et sauvegarde...                         */

#define   arguments_de_dilatation                                                                                                       \
                    traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation
#define   arguments_de_convolution                                                                                                      \
                    traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution
                                        /* Afin de raccourcir des lignes a suivre...                                                 */

                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
                        (chain_Aconcaten11(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"seuil")
                                          ," A=",nom_ZBuffer
                                          ," seuil=",chain_Aentier(NOIR)
                                          ,GENERATION_DE_formatI
                                          ,C_SH__REDIRECTION_PROGRAMME
                                          ,GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"complement")
                                          ," R=",nom_ZBufferMasque
                                          ,GENERATION_DE_formatI
                                           )
                         );
                                        /* Creation, a partir du 'Z-Buffer" d'un masque binaire definissant tout ce qui est          */
                                        /* au-dessus des lignes de crete...                                                          */

                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
                        (chain_Aconcaten13(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"dilate.01")
                                          ," A=",nom_ZBufferMasque
                                          ," dilater=VRAI"," circulaire=VRAI"," circulaire_optimale=VRAI"
                                          ," points=",chain_Aentier(EXP2(CINQ))
                                          ," ",arguments_de_dilatation
                                          ," R=",nom_ZBufferDilate
                                          ,GENERATION_DE_formatI
                                           )
                         );
                                        /* Dilatation de ce masque...                                                                */

                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
                        (chain_Aconcaten13(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"dilate.01")
                                          ," A=",nom_ZBufferMasque
                                          ," dilater=FAUX"," circulaire=VRAI"," circulaire_optimale=VRAI"
                                          ," points=",chain_Aentier(EXP2(CINQ))
                                          ," ",arguments_de_dilatation
                                          ," R=",nom_ZBufferErode
                                          ,GENERATION_DE_formatI
                                           )
                         );
                                        /* Erosion de ce masque...                                                                   */

                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
                        (chain_Aconcaten22(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"eor")
                                          ," A1=",nom_ZBufferDilate
                                          ," A2=",nom_ZBufferErode
                                          ,GENERATION_DE_formatI
                                          ,C_SH__REDIRECTION_PROGRAMME
                                          ,GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"convol.02")
                                          ," A=",nom_imageR
                                          ," V=",chain_Aentier(BLANC)
                                          ," F=",chain_Aentier(BLANC)
                                          ," messages_noyau_convolution_variable=FAUX"
                                          ," circulaire=VRAI"," circulaire_optimale=VRAI"
                                          ," ",arguments_de_convolution
                                          ," R=",nom_imageR
                                          ,GENERATION_DE_formatI
                                           )
                         );
                                        /* Le ou exclusif entre le masque erode et le masque dilate donne un masque situe            */
                                        /* "a cheval" sur les lignes de crete. C'est lui qui sert alors de noyau de convolution      */
                                        /* variable qui ne portera donc que sur les lignes de crete...                               */

#undef    arguments_de_dilatation
#undef    arguments_de_convolution

                    CALS(Idelete_image(nom_ZBufferErode));
                    CALS(Idelete_image(nom_ZBufferDilate));
                    CALS(Idelete_image(nom_ZBufferMasque));
                    CALS(Idelete_image(nom_ZBuffer));
                                        /* Nettoyage final...                                                                        */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test__CODE_ERREUR__ERREUR07;
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



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