/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O U P E   D ' U N   A L B U M   D ' I M A G E S  :                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande fait une coupe plane                                                                            */
/*                  dans un album Argument.                                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/coupe_3D$K' :                                                                                              */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20140913094315).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

#define   ATTENDRE_LES_IMAGES_INEXISTANTES                                                                                              \
                    VRAI                                                                                                                \
                                        /* Indique si les images inexistantes constituent une erreur ('FAUX'), ou bien si cela est   */ \
                                        /* normal ('VRAI'), ce qui signifie qu'elles n'ont pas encore ete calculee...                */
#define   DUREE_D_ATTENTE_DES_IMAGES_INEXISTANTES                                                                                       \
                    ZERO                                                                                                                \
                                        /* Duree d'attente des images inexistantes avec une valeur par defaut assurant la            */ \
                                        /* compatibilite avec la version anterieure au 20040928095323.                               */

#define   FAIRE_UNE_COUPE_QUELCONQUE                                                                                                    \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut faire une coupe plane ('FAUX'), ou bien une coups quelconque ('VRAI').  */ \
                                        /* Ceci fut introduit le 20171027115642 en garantissant la compatibilite anterieure...       */

#define   COEFFICIENT_A                                                                                                                 \
                    NEUT(FU)
#define   COEFFICIENT_B                                                                                                                 \
                    NEUT(FU)
#define   COEFFICIENT_C                                                                                                                 \
                    NEUT(FU)
#define   COEFFICIENT_D                                                                                                                 \
                    NEGA(FU)
                                        /* Definition du plan de coupe :                                                             */
                                        /*                                                                                           */
                                        /*                  X + Y + Z - 1 = 0                                                        */
                                        /*                                                                                           */
                                        /* par defaut...                                                                             */
                                        /*                                                                                           */
                                        /* On notera que le plan utile pour l'eponge de Manger ('v $xiirf/MENG.22.5.1') est le       */
                                        /* plan :                                                                                    */
                                        /*                                                                                           */
                                        /*                  2.X - 2.Y + 2.Z - 1 = 0                                                  */
                                        /*                                                                                           */
                                        /* Ce plan passe par les milieux de 6 aretes du cube unite dont les coordonnees sont :       */
                                        /*                                                                                           */
                                        /*                  {1/2,0,0}                                                                */
                                        /*                  {1,1/2,0}                                                                */
                                        /*                  {1,1,1/2}                                                                */
                                        /*                  {1/2,1,1}                                                                */
                                        /*                  {0,1/2,1}                                                                */
                                        /*                  {0,0,1/2}                                                                */
                                        /*                                                                                           */
                                        /* C'est ce plan d'intersection qui donne la coupe "etoilee" ('v $xiirf/MENG.32.5.1').       */

#define   NIVEAU_D_EFFACEMENT                                                                                                           \
                    NOIR                                                                                                                \
                                        /* Niveau a donner aux points qui sont effaces par la coupe...                               */

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O U P E   D ' U N   A L B U M   D ' I M A G E S  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom de la sequence a generer eventuellement.                                              */
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de la sequence a visualiser.                                                          */

     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */

     DEFV(Logical,INIT(attendre_les_images_inexistantes,ATTENDRE_LES_IMAGES_INEXISTANTES));
                                        /* Indique si les images inexistantes constituent une erreur ('FAUX'), ou bien si cela est   */
                                        /* normal ('VRAI'), ce qui signifie qu'elles n'ont pas encore ete calculee...                */
     DEFV(Positive,INIT(duree_d_attente_des_images_inexistantes,DUREE_D_ATTENTE_DES_IMAGES_INEXISTANTES));
                                        /* Duree d'attente des images inexistantes avec une valeur par defaut assurant la            */
                                        /* compatibilite avec la version anterieure au 20040928095323.                               */

     DEFV(Logical,INIT(faire_une_coupe_quelconque,FAIRE_UNE_COUPE_QUELCONQUE));
                                        /* Indique s'il faut faire une coupe plane ('FAUX'), ou bien une coups quelconque ('VRAI').  */
                                        /* Ceci fut introduit le 20171027115642 en garantissant la compatibilite anterieure...       */

     DEFV(Float,INIT(coefficient_A,COEFFICIENT_A));
     DEFV(Float,INIT(coefficient_B,COEFFICIENT_B));
     DEFV(Float,INIT(coefficient_C,COEFFICIENT_C));
     DEFV(Float,INIT(coefficient_D,COEFFICIENT_D));
                                        /* Definition du plan de coupe :                                                             */
                                        /*                                                                                           */
                                        /*                  X+Y+Z-1 = 0                                                              */
                                        /*                                                                                           */
                                        /* par defaut...                                                                             */

     DEFV(genere_p,INIT(niveau_d_effacement,NIVEAU_D_EFFACEMENT));
                                        /* Niveau a donner aux points qui sont effaces par la coupe...                               */
     /*..............................................................................................................................*/
     EGAL(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers,EDITER_LES_MESSAGES_D_ERREUR);
                                        /* Initialisation de l'indicateur d'edition des messages d'erreur...                         */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("attendre=",attendre_les_images_inexistantes);
                         GET_ARGUMENT_I("attente=",duree_d_attente_des_images_inexistantes);
                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENTS2_I("pas=",pas_des_images,pasZ);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);

                         GET_ARGUMENTS2_L("super_echelle=""se="
                                         ,Acoupe_plane_____utiliser_la_super_echelle
                                         ,Acoupe_quelconque_____utiliser_la_super_echelle
                                          );

                         GET_ARGUMENTS2_L("IZLE="
                                         ,Acoupe_plane_____faire_un_IZLE
                                         ,Acoupe_quelconque_____faire_un_IZLE
                                          );
                         GET_ARGUMENTS2_N("IZGT="
                                         ,Acoupe_plane_____faire_un_IZLE
                                         ,Acoupe_quelconque_____faire_un_IZLE
                                          );

                         GET_ARGUMENT_L("coupe_quelconque=""quelconque=""cq=",faire_une_coupe_quelconque);
                         GET_ARGUMENT_N("coupe_plane=""plane=""cp=",faire_une_coupe_quelconque);
                                        /* Arguments introduits le 20171027115642...                                                 */

                         GET_ARGUMENT_F("cA=""pA=",coefficient_A);
                         GET_ARGUMENT_F("cB=""pB=",coefficient_B);
                         GET_ARGUMENT_F("cC=""pC=",coefficient_C);
                         GET_ARGUMENT_F("cD=""pD=",coefficient_D);

                         GET_ARGUMENT_F("a333=",Acoupe_quelconque_____a333);
                         GET_ARGUMENT_F("a332=",Acoupe_quelconque_____a332);
                         GET_ARGUMENT_F("a331=",Acoupe_quelconque_____a331);
                         GET_ARGUMENT_F("a330=",Acoupe_quelconque_____a330);
                         GET_ARGUMENT_F("a323=",Acoupe_quelconque_____a323);
                         GET_ARGUMENT_F("a322=",Acoupe_quelconque_____a322);
                         GET_ARGUMENT_F("a321=",Acoupe_quelconque_____a321);
                         GET_ARGUMENT_F("a320=",Acoupe_quelconque_____a320);
                         GET_ARGUMENT_F("a313=",Acoupe_quelconque_____a313);
                         GET_ARGUMENT_F("a312=",Acoupe_quelconque_____a312);
                         GET_ARGUMENT_F("a311=",Acoupe_quelconque_____a311);
                         GET_ARGUMENT_F("a310=",Acoupe_quelconque_____a310);
                         GET_ARGUMENT_F("a303=",Acoupe_quelconque_____a303);
                         GET_ARGUMENT_F("a302=",Acoupe_quelconque_____a302);
                         GET_ARGUMENT_F("a301=",Acoupe_quelconque_____a301);
                         GET_ARGUMENT_F("a300=",Acoupe_quelconque_____a300);
                         GET_ARGUMENT_F("a233=",Acoupe_quelconque_____a233);
                         GET_ARGUMENT_F("a232=",Acoupe_quelconque_____a232);
                         GET_ARGUMENT_F("a231=",Acoupe_quelconque_____a231);
                         GET_ARGUMENT_F("a230=",Acoupe_quelconque_____a230);
                         GET_ARGUMENT_F("a223=",Acoupe_quelconque_____a223);
                         GET_ARGUMENT_F("a222=",Acoupe_quelconque_____a222);
                         GET_ARGUMENT_F("a221=",Acoupe_quelconque_____a221);
                         GET_ARGUMENT_F("a220=",Acoupe_quelconque_____a220);
                         GET_ARGUMENT_F("a213=",Acoupe_quelconque_____a213);
                         GET_ARGUMENT_F("a212=",Acoupe_quelconque_____a212);
                         GET_ARGUMENT_F("a211=",Acoupe_quelconque_____a211);
                         GET_ARGUMENT_F("a210=",Acoupe_quelconque_____a210);
                         GET_ARGUMENT_F("a203=",Acoupe_quelconque_____a203);
                         GET_ARGUMENT_F("a202=",Acoupe_quelconque_____a202);
                         GET_ARGUMENT_F("a201=",Acoupe_quelconque_____a201);
                         GET_ARGUMENT_F("a200=",Acoupe_quelconque_____a200);
                         GET_ARGUMENT_F("a133=",Acoupe_quelconque_____a133);
                         GET_ARGUMENT_F("a132=",Acoupe_quelconque_____a132);
                         GET_ARGUMENT_F("a131=",Acoupe_quelconque_____a131);
                         GET_ARGUMENT_F("a130=",Acoupe_quelconque_____a130);
                         GET_ARGUMENT_F("a123=",Acoupe_quelconque_____a123);
                         GET_ARGUMENT_F("a122=",Acoupe_quelconque_____a122);
                         GET_ARGUMENT_F("a121=",Acoupe_quelconque_____a121);
                         GET_ARGUMENT_F("a120=",Acoupe_quelconque_____a120);
                         GET_ARGUMENT_F("a113=",Acoupe_quelconque_____a113);
                         GET_ARGUMENT_F("a112=",Acoupe_quelconque_____a112);
                         GET_ARGUMENT_F("a111=",Acoupe_quelconque_____a111);
                         GET_ARGUMENT_F("a110=",Acoupe_quelconque_____a110);
                         GET_ARGUMENT_F("a103=",Acoupe_quelconque_____a103);
                         GET_ARGUMENT_F("a102=",Acoupe_quelconque_____a102);
                         GET_ARGUMENT_F("a101=",Acoupe_quelconque_____a101);
                         GET_ARGUMENT_F("a100=",Acoupe_quelconque_____a100);
                         GET_ARGUMENT_F("a033=",Acoupe_quelconque_____a033);
                         GET_ARGUMENT_F("a032=",Acoupe_quelconque_____a032);
                         GET_ARGUMENT_F("a031=",Acoupe_quelconque_____a031);
                         GET_ARGUMENT_F("a030=",Acoupe_quelconque_____a030);
                         GET_ARGUMENT_F("a023=",Acoupe_quelconque_____a023);
                         GET_ARGUMENT_F("a022=",Acoupe_quelconque_____a022);
                         GET_ARGUMENT_F("a021=",Acoupe_quelconque_____a021);
                         GET_ARGUMENT_F("a020=",Acoupe_quelconque_____a020);
                         GET_ARGUMENT_F("a013=",Acoupe_quelconque_____a013);
                         GET_ARGUMENT_F("a012=",Acoupe_quelconque_____a012);
                         GET_ARGUMENT_F("a011=",Acoupe_quelconque_____a011);
                         GET_ARGUMENT_F("a010=",Acoupe_quelconque_____a010);
                         GET_ARGUMENT_F("a003=",Acoupe_quelconque_____a003);
                         GET_ARGUMENT_F("a002=",Acoupe_quelconque_____a002);
                         GET_ARGUMENT_F("a001=",Acoupe_quelconque_____a001);
                         GET_ARGUMENT_F("a000=",Acoupe_quelconque_____a000);
                                        /* Arguments introduits le 20171027115642...                                                 */

                         GET_ARGUMENT_P("niveau_effacement=""niveau=""effacement=",niveau_d_effacement);
                         )
                    );

     begin_nouveau_block
          Bblock
          BDEFV(album,album_d_images);
                                        /* Definition de l'album d'images avant la coupe plane.                                      */
          BDEFV(album,album_d_images_coupe);
                                        /* Definition de l'album d'images apres la coupe plane.                                      */

          CALi(dAload_album(album_d_images
                           ,nom_imageA
                           ,nom_postfixe
                           ,premiere_image
                           ,pas_des_images
                           ,nombre_de_chiffres
                           ,attendre_les_images_inexistantes
                           ,duree_d_attente_des_images_inexistantes
                           ,FAUX
                            )
               );

          Test(IL_NE_FAUT_PAS(faire_une_coupe_quelconque))
                                        /* Test introduit le 20171027115642...                                                       */
               Bblock
               CALS(Acoupe_plane(album_d_images_coupe
                                ,album_d_images
                                ,coefficient_A
                                ,coefficient_B
                                ,coefficient_C
                                ,coefficient_D
                                ,niveau_d_effacement
                                 )
                    );
                                        /* Coupe plane...                                                                            */
               Eblock
          ATes
               Bblock
               CALS(Acoupe_quelconque(album_d_images_coupe
                                     ,album_d_images
                                     ,niveau_d_effacement
                                      )
                    );
                                        /* Coupe quelconque introduite le 20171027115642...                                          */
                                        /*                                                                                           */
                                        /* Le 20200127150342, grace a 'v $xiirv/.STRX.31.2.$U', on notera que les parametres         */
                                        /* suivants :                                                                                */
                                        /*                                                                                           */
                                        /*                  a100=0    a010=0    a001=0                                               */
                                        /*                  a003=0    a002=+1   a001=-1                                              */
                                        /*                  a030=0    a020=+1   a010=-1                                              */
                                        /*                  a300=0    a200=+1   a100=-1                                              */
                                        /*                  a000=...                                                                 */
                                        /*                                                                                           */
                                        /* definissent une sphere de rayon 'a000'...                                                 */
               Eblock
          ETes

          CALi(dAupdate_album(nom_imageR
                             ,nom_postfixe
                             ,premiere_image
                             ,pas_des_images
                             ,album_d_images_coupe
                             ,nombre_de_chiffres
                             ,FAUX
                              )
               );

          EDEFV(album,album_d_images_coupe);
                                        /* Definition de l'album d'images apres la coupe plane.                                      */
          EDEFV(album,album_d_images);
                                        /* Definition de l'album d'images avant la coupe plane.                                      */

          Eblock
     end_nouveau_block

     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.