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