/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C U M U L A T I O N   D ' U N E   S E R I E   D ' I M A G E S                                                          */
/*        E N   F O N C T I O N   D E   L A   T R O I S I E M E   D I M E N S I O N  :                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande "accumule" une serie d'images                                                                   */
/*                  en effectuant l'operation suivante ('i' designant                                                                */
/*                  un indice de parcours de la liste 'Image') :                                                                     */
/*                                                                                                                                   */
/*                                      Cumul <-- Cumul + Image(i) en fonction du 'Z-Buffer'                                         */
/*                                                                                                                                   */
/*                  avec implicitement un parcours d'arriere en avant (c'est-a-dire                                                  */
/*                  que la premiere image recuperee est mise en arriere-plan et la                                                   */
/*                  derniere au premier-plan), cet ordre pouvant etre inverse.                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/accumule.22$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19990609094902).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

#define   INVERSER_L_ORDRE_DE_RECUPERATION_DES_IMAGES                                                                                   \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images. On a :           */ \
                                        /*                                                                                           */ \
                                        /*                  FAUX    : l'image d'arriere-plan est la premiere de la liste,            */ \
                                        /*                  VRAI    : l'image d'arriere-plan est la derniere de la liste.            */ \
                                        /*                                                                                           */

#include  xci/accumule.01.I"

#define   MEMORISER_LE_Z_BUFFER                                                                                                         \
                    FAUX                                                                                                                \
                                        /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie         */ \
                                        /* apres le calcul ('FAUX'). On notera que la sortie du 'Z-Buffer' peut etre redondante      */ \
                                        /* d'avec celle de l'accumulation proprement dite, mais que cela n'est plus vrai des que     */ \
                                        /* 'IL_NE_FAUT_PAS(binariser_les_images)'.                                                   */
#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').                                          */

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C U M U L A T I O N   D ' U N E   S E R I E   D ' I M A G E S                                                          */
/*        E N   F O N C T I O N   D E   L A   T R O I S I E M E   D I M E N S I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de la sequence a integrer.                                                            */
     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
     DEFV(CHAR,INIC(POINTERc(nom_imageAZ),NOM_PIPE));
                                        /* Nom de la sequence 'Z-Buffer' Argument.                                                   */
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom du Resultat de l'integration.                                                         */
     DEFV(CHAR,INIC(POINTERc(nom_imageRZ),NOM_PIPE));
                                        /* Nom de l'eventuel 'Z-Buffer' Resultat.                                                    */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(translation_des_numeros_des_images,TRANSLATION_DES_NUMEROS_DES_IMAGES));
                                        /* Les numeros d'images peuvent etre translates. Lorsque tel est le cas, le numero           */
                                        /* d'image utilise est le numero translate modulo {premiere,derniere}.                       */
     DEFV(Logical,INIT(inverser_l_ordre_de_recuperation_des_images,INVERSER_L_ORDRE_DE_RECUPERATION_DES_IMAGES));
                                        /* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images. On a :           */
                                        /*                                                                                           */
                                        /*                  FAUX    : l'image d'arriere-plan est la premiere de la liste,            */
                                        /*                  VRAI    : l'image d'arriere-plan est la derniere de la liste.            */
                                        /*                                                                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     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'). On notera que la sortie du 'Z-Buffer' peut etre redondante      */
                                        /* d'avec celle de l'accumulation proprement dite, mais que cela n'est plus vrai des que     */
                                        /* 'IL_NE_FAUT_PAS(binariser_les_images)'.                                                   */
     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').                                          */
     /*..............................................................................................................................*/
#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 20070223105727)...                    */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_C("imageAZ=""AZ=",nom_imageAZ);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("imageRZ=""RZ=",nom_imageRZ);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("derniere=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_I("modulo=",translation_des_numeros_des_images);
                         GET_ARGUMENT_L("inverser=",inverser_l_ordre_de_recuperation_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         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
                                        );
                         )
                    );

#undef    GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard

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

     DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
          Bblock
          EGAL(nom_image
              ,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE)
                   ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA
                                                  ,chain_numero_modulo(NUMERO_D_IMAGE,nombre_de_chiffres)
                                                   )
                   ,chain_Aconcaten3_sauf_nom_pipe(nom_imageA
                                                  ,chain_numero_modulo(NUMERO_D_IMAGE,nombre_de_chiffres)
                                                  ,nom_postfixe
                                                   )
                    )
               );
                                        /* Le 20221212114750, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */

          Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_image))))
               Bblock
                                        /* 'ImageA' donne la couche a l'instant courant.                                             */
               EGAL(nom_image
                   ,chain_Aconcaten2_sauf_nom_pipe(nom_imageAZ
                                                  ,chain_numero_modulo(NUMERO_D_IMAGE,nombre_de_chiffres)
                                                   )
                    );
                                        /* Le 20221212114750, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */

               Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA,nom_image))))
                    Bblock
                                        /* 'IFmageA' donne le 'Z-Buffer' a l'instant courant.                                        */
                    CALS(ImoveM_3D_volume(ImageR,ImageA,IFmageA));
                                        /* Et "cumul" en fonction du 'Z-Buffer'...                                                   */
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test__CODE_ERREUR__ERREUR07;
               Eblock
          ETes

          CALZ_FreCC(nom_image);
          Eblock
     EDoI

     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_imageRZ,ImageA));
               Eblock
          ATes
               Bblock
               CALi(IupdateF_image(nom_imageRZ,Z_Buffer));
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



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