/*************************************************************************************************************************************/
/* */
/* R O T A T I O N E T T R A N S L A T I O N D ' U N E I M A G E : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une image */
/* dont le nom est le premier argument */
/* d'appel ; elle est le resultat de */
/* la rotation de la deuxieme */
/* image par un certain angle. */
/* */
/* On notera de plus que cette commande */
/* peut etre utilisee pour translater de facon */
/* arbitraire un image (voir 'v $xci/$Fnota'). */
/* */
/* */
/* Author of '$xci/rotate$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1987??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
#include image_image_IMAGESF_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define X_ATRANSLATION \
X_A_TRANSLATION_POUR_ROTATION
#define Y_ATRANSLATION \
Y_A_TRANSLATION_POUR_ROTATION
#define X_RATRANSLATION \
X_RA_TRANSLATION_POUR_ROTATION
#define Y_RATRANSLATION \
Y_RA_TRANSLATION_POUR_ROTATION
#define X_RRTRANSLATION \
X_RR_TRANSLATION_POUR_ROTATION
#define Y_RRTRANSLATION \
Y_RR_TRANSLATION_POUR_ROTATION
#define ANGLE \
NEUT(PI_SUR_2)
#define INTERPOLER \
VRAI
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R O T A T I O N D ' U N E I M A G E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(Float,INIT(angle_de_rotation,ANGLE));
/* Angle de rotation. ATTENTION, il y avait autrefois : */
/* */
/* #define ANGLE \ */
/* NEGA(PI_SUR_2) */
/* */
/* mais il est en fait plus pratique d'utiliser +pi/2 comme valeur implicite... */
DEFV(Logical,INIT(interpoler,INTERPOLER));
/* Pour savoir s'il faut interpoler a l'interieur de la transformee */
/* de la maille elementaire. */
DEFV(Float,INIT(X_Atranslation,X_ATRANSLATION));
DEFV(Float,INIT(Y_Atranslation,Y_ATRANSLATION));
DEFV(deltaF_2D,Atranslation);
/* Translation de l'image Argument, */
DEFV(Float,INIT(X_RAtranslation,X_RATRANSLATION));
DEFV(Float,INIT(Y_RAtranslation,Y_RATRANSLATION));
DEFV(deltaF_2D,RAtranslation);
/* Translation de l'image Resultat pendant l'acces a l'image Argument, */
DEFV(Float,INIT(X_RRtranslation,X_RRTRANSLATION));
DEFV(Float,INIT(Y_RRtranslation,Y_RRTRANSLATION));
DEFV(deltaF_2D,RRtranslation);
/* Translation de l'image Resultat. */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(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 20200123100543... */
GET_ARGUMENT_F("angle=",angle_de_rotation);
GET_ARGUMENT_L("interpoler=""inter=",interpoler);
GET_ARGUMENTS2_L("interpolation_cubique=""cubique="
,Irotation_image_____interpolation_cubique
,IFrotation_image_____interpolation_cubique
);
GET_ARGUMENTS2_N("interpolation_lineaire=""lineaire="
,Irotation_image_____interpolation_cubique
,IFrotation_image_____interpolation_cubique
);
/* Arguments introduits le 20131230130228 et completes le 20200123101435... */
GET_ARGUMENT_F("txA=",X_Atranslation);
GET_ARGUMENT_F("tyA=",Y_Atranslation);
GET_ARGUMENT_F("txRA=",X_RAtranslation);
GET_ARGUMENT_F("tyRA=",Y_RAtranslation);
GET_ARGUMENT_F("txRR=",X_RRtranslation);
GET_ARGUMENT_F("tyRR=",Y_RRtranslation);
)
);
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,ImageA,IFmageA,nom_imageA))))
/* Chargement de l'image a transformer. */
Bblock
INITIALISATION_ACCROISSEMENT_2D(Atranslation,X_Atranslation,Y_Atranslation);
INITIALISATION_ACCROISSEMENT_2D(RAtranslation,X_RAtranslation,Y_RAtranslation);
INITIALISATION_ACCROISSEMENT_2D(RRtranslation,X_RRtranslation,Y_RRtranslation);
CALS(gIrotation_image(les_images_sont_standards
,ImageR,IFmageR
,ImageA,IFmageA
,VRAI
,ADRESSE(RRtranslation),ADRESSE(RAtranslation),ADRESSE(Atranslation)
,angle_de_rotation
,interpoler
)
);
/* Et rotation de l'image Argument (avec re-initialisation prealable, afin d'assurer une */
/* eventuelle compatibilite...). */
CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
RETU_Commande;
Eblock
ECommande