/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E A L I S A T I O N   D ' U N E   " T A P I S S E R I E "                                                                */
/*        P A R   D O U B L E - S Y M E T R I E     ( P A R   D E F A U T )  :                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une image qui                                                                            */
/*                  est une reduction de moitie de l'image                                                                           */
/*                  Argument repetee quatre fois a l'aide                                                                            */
/*                  de symetries axiales.                                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Supposons un tableau carre                                                                                     */
/*                  de 2x2=4 (carre) images ; celles-ci                                                                              */
/*                  seront disposees ainsi (les numeros                                                                              */
/*                  de 01 a 04 donnant le numero des                                                                                 */
/*                  'ImageA' de manoeuvre).                                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                Y ^                                                                                                                */
/*                  |                                                                                                                */
/*             Ymax |----------------------------------------                                                                        */
/*                  |                   |                   |                                                                        */
/*                  | 1                 | 2                 |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |     originale     |   Sy(originale)   |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  |                   |                   |                                                                        */
/*                  | 3                 | 4                 |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |   Sx(originale)   | Sx(Sy(originale)) |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |                   |                   |                                                                        */
/*                  |                   |                   |                                                                        */
/*             Ymin |------------------------------------------->                                                                    */
/*                 Xmin                                   Xmax  X                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/tapisserie$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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
                                        /* L'introduction des images non standard a eu lieu le 20150123154350...                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NOMBRE_D_ITERATIONS                                                                                                           \
                    UN                                                                                                                  \
                                        /* Nombre d'iterations. Ceci a ete introduit le 20140430085557, la valeur par defaut         */ \
                                        /* garantissant la compatibilite anterieure...                                               */
#define   FAIRE_UN_CACHE                                                                                                                \
                    FAUX
#define   ANTI_ALIASER                                                                                                                  \
                    VRAI
                                        /* Faut-il mettre l'image Argument au premier plan ('VRAI') ou pas ('FAUX') ? Ceci a ete     */
                                        /* introduit le 20140430083825, la valeur par defaut garantissant la compatibilite           */
                                        /* anterieure...                                                                             */

#define   FAIRE_UN_CHANGEMENT_D_ECHELLE                                                                                                 \
                    FAUX
#define   FACTEUR_D_ECHELLE                                                                                                             \
                    FU
#define   FACTEUR_DE_TRANSLATION                                                                                                        \
                    FLOT__NOIR
                                        /* Faut-il faire un changement d'echelle a chaque iteration ('VRAI') ou pas ('FAUX') ?       */
                                        /* Ceci a ete introduit le 20150419073124...                                                 */

#define   DEMI_FENETRE_HG_1_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_HG_1_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_HG_Ix_symetrie                                                                                                   \
                    FAUX
#define   DEMI_FENETRE_HG_Iy_symetrie                                                                                                   \
                    FAUX
#define   DEMI_FENETRE_HG_2_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_HG_2_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_HG'.                          */
#define   DEMI_FENETRE_HD_1_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_HD_1_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_HD_Ix_symetrie                                                                                                   \
                    FAUX
#define   DEMI_FENETRE_HD_Iy_symetrie                                                                                                   \
                    VRAI
#define   DEMI_FENETRE_HD_2_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_HD_2_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_HD'.                          */
#define   DEMI_FENETRE_BG_1_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_BG_1_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_BG_Ix_symetrie                                                                                                   \
                    VRAI
#define   DEMI_FENETRE_BG_Iy_symetrie                                                                                                   \
                    FAUX
#define   DEMI_FENETRE_BG_2_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_BG_2_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_BG'.                          */
#define   DEMI_FENETRE_BD_1_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_BD_1_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_BD_Ix_symetrie                                                                                                   \
                    VRAI
#define   DEMI_FENETRE_BD_Iy_symetrie                                                                                                   \
                    VRAI
#define   DEMI_FENETRE_BD_2_Irotation_de_plus__pi_sur_2                                                                                 \
                    FAUX
#define   DEMI_FENETRE_BD_2_Irotation_de_moins_pi_sur_2                                                                                 \
                    FAUX
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_BD'.                          */

#define   CALCULER_LA_MOYENNE                                                                                                           \
                    VRAI                                                                                                                \
                                        /* Indique s'il faut calculer la moyenne ('VRAI') ou pas ('FAUX').                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TRANSFORM_TAPISSERIE(imageR,iFmageR,imageA,iFmageA,T_1_plus__ps2,T_1_moins_ps2,T_x_sym,T_y_sym,T_2_plus__ps2,T_2_moins_ps2)   \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(T_1_plus__ps2))                                                                                        \
                         Bblock                                                                                                         \
                         CALS(gIrotation_de_plus_ou_moins_pi_sur_2(les_images_sont_standards,ImageA6,IFmageA6,imageA,iFmageA,VRAI));    \
                                        /* Application de la rotation de +pi/2.                                                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALS(gImove(les_images_sont_standards,ImageA6,IFmageA6,imageA,iFmageA));                                       \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(T_1_moins_ps2))                                                                                        \
                         Bblock                                                                                                         \
                         CALS(gIrotation_de_plus_ou_moins_pi_sur_2(les_images_sont_standards,ImageA7,IFmageA7,ImageA6,IFmageA6,FAUX));  \
                                        /* Application de la rotation de -pi/2.                                                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALS(gImove(les_images_sont_standards,ImageA7,IFmageA7,ImageA6,IFmageA6));                                     \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(T_x_sym))                                                                                              \
                         Bblock                                                                                                         \
                         CALS(gIx_symetrie(les_images_sont_standards,ImageA8,IFmageA8,ImageA7,IFmageA7));                               \
                                        /* Application de la symetrie 'OX'.                                                          */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALS(gImove(les_images_sont_standards,ImageA8,IFmageA8,ImageA7,IFmageA7));                                     \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(T_y_sym))                                                                                              \
                         Bblock                                                                                                         \
                         CALS(gIy_symetrie(les_images_sont_standards,ImageA7,IFmageA7,ImageA8,IFmageA8));                               \
                                        /* Application de la symetrie 'OY'.                                                          */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALS(gImove(les_images_sont_standards,ImageA7,IFmageA7,ImageA8,IFmageA8));                                     \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(T_2_plus__ps2))                                                                                        \
                         Bblock                                                                                                         \
                         CALS(gIrotation_de_plus_ou_moins_pi_sur_2(les_images_sont_standards,ImageA6,IFmageA6,ImageA7,IFmageA7,VRAI));  \
                                        /* Application de la rotation de +pi/2.                                                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALS(gImove(les_images_sont_standards,ImageA6,IFmageA6,ImageA7,IFmageA7));                                     \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(T_2_moins_ps2))                                                                                        \
                         Bblock                                                                                                         \
                         CALS(gIrotation_de_plus_ou_moins_pi_sur_2(les_images_sont_standards,imageR,iFmageR,ImageA6,IFmageA6,FAUX));    \
                                        /* Application de la rotation de -pi/2.                                                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALS(gImove(les_images_sont_standards,imageR,iFmageR,ImageA6,IFmageA6));                                       \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Application des differentes transformations (eventuellement...).                          */

#define   GENERE(FENETRE,F_FENETRE,NOM_DE_LA_FENETRE,imageA,iFmageA)                                                                    \
                    Bblock                                                                                                              \
                    Test(EST_VRAI(les_images_sont_standards))                                                                           \
                         Bblock                                                                                                         \
                                        /* Cas d'une image 'image' :                                                                 */ \
                         FENETRE(ImageR                                                                                                 \
                                ,imageA                                                                                                 \
                                ,calculer_la_moyenne                                                                                    \
                                ,CALCUL_DU_MAXIMUM_DANS_UNE_DEMI_FENETRE                                                                \
                                 );                                                                                                     \
                                        /* R = image Resultat obtenue par reduction de la 'FENETRE' demandee extraite dans           */ \
                                        /*     l'image Argument.                                                                     */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas d'une image 'imageF' :                                                                */ \
                         F_FENETRE(IFmageR                                                                                              \
                                  ,iFmageA                                                                                              \
                                  ,calculer_la_moyenne                                                                                  \
                                  ,CALCUL_DU_MAXIMUM_DANS_UNE_DEMI_FENETRE                                                              \
                                   );                                                                                                   \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure de recuperation d'une moitie de l'image Argument.                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E A L I S A T I O N   D ' U N E   " T A P I S S E R I E "                                                                */
/*        P A R   D O U B L E - S Y M E T R I E     ( P A R   D E F A U T )  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));

     DEFV(Positive,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS));
                                        /* Nombre d'iterations. Ceci a ete introduit le 20140430085557, la valeur par defaut         */
                                        /* garantissant la compatibilite anterieure...                                               */

     DEFV(Logical,INIT(faire_un_cache,FAIRE_UN_CACHE));
     DEFV(Logical,INIT(anti_aliaser,ANTI_ALIASER));
                                        /* Faut-il mettre l'image Argument au premier plan ('VRAI') ou pas ('FAUX') ? Ceci a ete     */
                                        /* introduit le 20140430083825, la valeur par defaut garantissant la compatibilite           */
                                        /* anterieure...                                                                             */

     DEFV(Logical,INIT(faire_un_changement_d_echelle,FAIRE_UN_CHANGEMENT_D_ECHELLE));
     DEFV(Float,INIT(facteur_d_echelle,FACTEUR_D_ECHELLE));
     DEFV(Float,INIT(facteur_de_translation,FACTEUR_DE_TRANSLATION));
                                        /* Faut-il faire un changement d'echelle a chaque iteration ('VRAI') ou pas ('FAUX') ?       */
                                        /* Ceci a ete introduit le 20150419073124...                                                 */

     DEFV(Logical,INIT(demi_fenetre_HG_1_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_HG_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_HG_1_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_HG_1_Irotation_de_moins_pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_HG_Ix_symetrie,DEMI_FENETRE_HG_Ix_symetrie));
     DEFV(Logical,INIT(demi_fenetre_HG_Iy_symetrie,DEMI_FENETRE_HG_Iy_symetrie));
     DEFV(Logical,INIT(demi_fenetre_HG_2_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_HG_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_HG_2_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_HG_1_Irotation_de_moins_pi_sur_2));
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_HG'.                          */
     DEFV(Logical,INIT(demi_fenetre_HD_1_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_HD_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_HD_1_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_HD_1_Irotation_de_moins_pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_HD_Ix_symetrie,DEMI_FENETRE_HD_Ix_symetrie));
     DEFV(Logical,INIT(demi_fenetre_HD_Iy_symetrie,DEMI_FENETRE_HD_Iy_symetrie));
     DEFV(Logical,INIT(demi_fenetre_HD_2_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_HD_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_HD_2_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_HD_1_Irotation_de_moins_pi_sur_2));
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_HD'.                          */
     DEFV(Logical,INIT(demi_fenetre_BG_1_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_BG_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_BG_1_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_BG_1_Irotation_de_moins_pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_BG_Ix_symetrie,DEMI_FENETRE_BG_Ix_symetrie));
     DEFV(Logical,INIT(demi_fenetre_BG_Iy_symetrie,DEMI_FENETRE_BG_Iy_symetrie));
     DEFV(Logical,INIT(demi_fenetre_BG_2_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_BG_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_BG_2_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_BG_1_Irotation_de_moins_pi_sur_2));
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_BG'.                          */
     DEFV(Logical,INIT(demi_fenetre_BD_1_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_BD_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_BD_1_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_BD_1_Irotation_de_moins_pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_BD_Ix_symetrie,DEMI_FENETRE_BD_Ix_symetrie));
     DEFV(Logical,INIT(demi_fenetre_BD_Iy_symetrie,DEMI_FENETRE_BD_Iy_symetrie));
     DEFV(Logical,INIT(demi_fenetre_BD_2_Irotation_de_plus__pi_sur_2,DEMI_FENETRE_BD_1_Irotation_de_plus__pi_sur_2));
     DEFV(Logical,INIT(demi_fenetre_BD_2_Irotation_de_moins_pi_sur_2,DEMI_FENETRE_BD_1_Irotation_de_moins_pi_sur_2));
                                        /* Definition des transformations sur la fenetre 'DEMI_FENETRE_BD'.                          */

     DEFV(Logical,INIT(calculer_la_moyenne,CALCULER_LA_MOYENNE));
                                        /* Indique s'il faut calculer la moyenne ('VRAI') ou pas ('FAUX').                           */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("Ireduction_moitie_____compatibilite_20030611=""compatibilite_20030611="
                                       ,Ireduction_moitie_____compatibilite_20030611
                                        );
                         GET_ARGUMENT_L("IFreduction_moitie_____compatibilite_20150123=""compatibilite_20150123="
                                       ,IFreduction_moitie_____compatibilite_20150123
                                        );
                                        /* Argument introduit le 20150123175544...                                                   */

                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_L("standard=",les_images_sont_standards);
                                        /* Argument introduit le 20150123154350...                                                   */

                         GET_ARGUMENT_I("iterations=""n=",nombre_d_iterations);
                                        /* Arguments introduits le 20140430085557...                                                 */

                         GET_ARGUMENT_L("premier_plan=""cache=",faire_un_cache);
                         GET_ARGUMENT_L("anti_aliaser=""aa=""anti_aliasing=",anti_aliaser);
                                        /* Arguments introduits le 20140430083825...                                                 */

                         GET_ARGUMENT_L("changement_echelle=""echelle=",faire_un_changement_d_echelle);
                         GET_ARGUMENT_F("a=",facteur_d_echelle);
                         GET_ARGUMENT_F("b=",facteur_de_translation);
                                        /* Arguments introduits le 20150419073124...                                                 */

                         GET_ARGUMENT_L("HG_1_pps2=",demi_fenetre_HG_1_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("HG_1_mps2=",demi_fenetre_HG_1_Irotation_de_moins_pi_sur_2);
                         GET_ARGUMENT_L("HG_Ix=",demi_fenetre_HG_Ix_symetrie);
                         GET_ARGUMENT_L("HG_Iy=",demi_fenetre_HG_Iy_symetrie);
                         GET_ARGUMENT_L("HG_2_pps2=",demi_fenetre_HG_2_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("HG_2_mps2=",demi_fenetre_HG_2_Irotation_de_moins_pi_sur_2);

                         GET_ARGUMENT_L("HD_1_pps2=",demi_fenetre_HD_1_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("HD_1_mps2=",demi_fenetre_HD_1_Irotation_de_moins_pi_sur_2);
                         GET_ARGUMENT_L("HD_Ix=",demi_fenetre_HD_Ix_symetrie);
                         GET_ARGUMENT_L("HD_Iy=",demi_fenetre_HD_Iy_symetrie);
                         GET_ARGUMENT_L("HD_2_pps2=",demi_fenetre_HD_2_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("HD_2_mps2=",demi_fenetre_HD_2_Irotation_de_moins_pi_sur_2);

                         GET_ARGUMENT_L("BG_1_pps2=",demi_fenetre_BG_1_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("BG_1_mps2=",demi_fenetre_BG_1_Irotation_de_moins_pi_sur_2);
                         GET_ARGUMENT_L("BG_Ix=",demi_fenetre_BG_Ix_symetrie);
                         GET_ARGUMENT_L("BG_Iy=",demi_fenetre_BG_Iy_symetrie);
                         GET_ARGUMENT_L("BG_2_pps2=",demi_fenetre_BG_2_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("BG_2_mps2=",demi_fenetre_BG_2_Irotation_de_moins_pi_sur_2);

                         GET_ARGUMENT_L("BD_1_pps2=",demi_fenetre_BD_1_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("BD_1_mps2=",demi_fenetre_BD_1_Irotation_de_moins_pi_sur_2);
                         GET_ARGUMENT_L("BD_Ix=",demi_fenetre_BD_Ix_symetrie);
                         GET_ARGUMENT_L("BD_Iy=",demi_fenetre_BD_Iy_symetrie);
                         GET_ARGUMENT_L("BD_2_pps2=",demi_fenetre_BD_2_Irotation_de_plus__pi_sur_2);
                         GET_ARGUMENT_L("BD_2_mps2=",demi_fenetre_BD_2_Irotation_de_moins_pi_sur_2);

                         GET_ARGUMENTS2_F("angle_positif=""ap=""pps2="
                                         ,Irotation_de_plus_ou_moins_pi_sur_2_____angle_positif
                                         ,IFrotation_de_plus_ou_moins_pi_sur_2_____angle_positif
                                          );
                         GET_ARGUMENTS2_F("angle_negatif=""an=""mps2="
                                         ,Irotation_de_plus_ou_moins_pi_sur_2_____angle_negatif
                                         ,IFrotation_de_plus_ou_moins_pi_sur_2_____angle_negatif
                                          );
                                        /* Arguments introduits le 20160114084855...                                                 */

                         GET_ARGUMENT_L("moyenne=""moy=",calculer_la_moyenne);
                         GET_ARGUMENTS2_L("minimum=""min="
                                         ,Ireduction_moitie_____calcul_du_minimum
                                         ,IFreduction_moitie_____calcul_du_minimum
                                          );
                         GET_ARGUMENTS2_N("maximum=""max="
                                         ,Ireduction_moitie_____calcul_du_minimum
                                         ,IFreduction_moitie_____calcul_du_minimum
                                          );
                                        /* Arguments introduits le 20160114084855...                                                 */
                         )
                    );

     Test(EST_FAUX(les_images_sont_standards))
          Bblock
                                        /* Cas d'une image 'imageF' :                                                                */
          Test(IL_FAUT(faire_un_cache))
               Bblock
               PRINT_ATTENTION("l'option 'cache=' n'a pas de sens en mode non 'standard'");
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
                                        /* Cas d'une image 'image' :                                                                 */
          Eblock
     ETes

     CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR));
                                        /* Initialisation de l'image Resultat.                                                       */

     Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageR,IFmageR,nom_imageA))))
                                        /* ImageR = image-originale (avant le 20140430085557, il s'agissait de 'ImageA1'...          */
          Bblock
          Repe(nombre_d_iterations)
               Bblock
               CALS(gImove(les_images_sont_standards,ImageA1,IFmageA1,ImageR,IFmageR));

               TRANSFORM_TAPISSERIE(ImageA2,IFmageA2
                                   ,ImageA1,IFmageA1
                                   ,demi_fenetre_HG_1_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_HG_1_Irotation_de_moins_pi_sur_2
                                   ,demi_fenetre_HG_Ix_symetrie
                                   ,demi_fenetre_HG_Iy_symetrie
                                   ,demi_fenetre_HG_2_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_HG_2_Irotation_de_moins_pi_sur_2
                                    );
               TRANSFORM_TAPISSERIE(ImageA3,IFmageA3
                                   ,ImageA1,IFmageA1
                                   ,demi_fenetre_HD_1_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_HD_1_Irotation_de_moins_pi_sur_2
                                   ,demi_fenetre_HD_Ix_symetrie
                                   ,demi_fenetre_HD_Iy_symetrie
                                   ,demi_fenetre_HD_2_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_HD_2_Irotation_de_moins_pi_sur_2
                                    );
               TRANSFORM_TAPISSERIE(ImageA4,IFmageA4
                                   ,ImageA1,IFmageA1
                                   ,demi_fenetre_BG_1_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_BG_1_Irotation_de_moins_pi_sur_2
                                   ,demi_fenetre_BG_Ix_symetrie
                                   ,demi_fenetre_BG_Iy_symetrie
                                   ,demi_fenetre_BG_2_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_BG_2_Irotation_de_moins_pi_sur_2
                                    );
               TRANSFORM_TAPISSERIE(ImageA5,IFmageA5
                                   ,ImageA1,IFmageA1
                                   ,demi_fenetre_BD_1_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_BD_1_Irotation_de_moins_pi_sur_2
                                   ,demi_fenetre_BD_Ix_symetrie
                                   ,demi_fenetre_BD_Iy_symetrie
                                   ,demi_fenetre_BD_2_Irotation_de_plus__pi_sur_2
                                   ,demi_fenetre_BD_2_Irotation_de_moins_pi_sur_2
                                    );
                                        /* ATTENTION, les symetries et les rotations ne commutent pas, d'ou deux groupes de          */
                                        /* rotations entourant les symetries (au passage, on aurait pu permuter le role des          */
                                        /* rotations et des symetries...).                                                           */

               GENERE(DEMI_FENETRE_HG,F_DEMI_FENETRE_HG,"HG",ImageA2,IFmageA2);
               GENERE(DEMI_FENETRE_HD,F_DEMI_FENETRE_HD,"HD",ImageA3,IFmageA3);
               GENERE(DEMI_FENETRE_BG,F_DEMI_FENETRE_BG,"BG",ImageA4,IFmageA4);
               GENERE(DEMI_FENETRE_BD,F_DEMI_FENETRE_BD,"BD",ImageA5,IFmageA5);
                                        /* Realisation de la tapisserie a partir de l'image Argument.                                */

               Test(EST_VRAI(les_images_sont_standards))
                    Bblock
                                        /* Cas d'une image 'image' :                                                                 */
                    Test(IL_FAUT(faire_un_cache))
                         Bblock
                         Test(IL_FAUT(faire_un_changement_d_echelle))
                              Bblock
                              CALS(Iscale(ImageAA,facteur_d_echelle,ImageR,facteur_de_translation));
                              CALS(Imove(ImageR,ImageAA));
                                        /* Execution de la fonction (en entier) :                                                    */
                                        /*                                                                                           */
                                        /*                  R = a.I + b                                                              */
                                        /*                                                                                           */
                                        /* Cette possibilite a ete introduite le 20150419073124...                                   */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IL_NE_FAUT_PAS(anti_aliaser))
                              Bblock
                              CALS(Iproduit_de_masquage(ImageA9,ImageA1,ImageR));
                                        /* Et masquage...                                                                            */
                              Eblock
                         ATes
                              Bblock
                              CALS(Iproduit_de_masquage_anti_aliase(ImageA9,ImageA1,ImageR));
                                        /* Et masquage "anti-aliase" (introduit le 20090126111043).                                  */
                              Eblock
                         ETes

                         CALS(Imove(ImageR,ImageA9));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                                        /* Cas d'une image 'imageF' :                                                                */
                    Eblock
               ETes
               Eblock
          ERep

          CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
                                        /* Et rangement...                                                                           */
          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.