/*************************************************************************************************************************************/
/* */
/* P R O D U I T G E N E R A L I S E D E D E U X I M A G E S : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une image */
/* dont le nom est le premier argument */
/* d'appel ; elle est le resultat du */
/* produit generalise des deux images */
/* Arguments a l'aide d'une table de */
/* multiplication generalisee extraite */
/* d'une troisieme image Argument. */
/* */
/* */
/* Author of '$xci/multi_02.04$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1993??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 INVERSER_LE_PRODUIT_GENERALISE \
FAUX \
/* Faut-il inverser le produit ('VRAI') ou calculer le produit direct ('FAUX') ? Ceci a ete */ \
/* introduit le 20040203101948 uniquement si 'EST_VRAI(les_images_sont_standards)'... */
#define INVERSER_LE_PRODUIT_GENERALISE_AU_CENTRE \
FAUX \
/* L'inconnue est-elle 'T' ("centre"='VRAI') ou 'A1' ou 'A2' ("centre"='FAUX') ? Ceci a ete */ \
/* introduit le 20040205090947 uniquement si 'EST_VRAI(les_images_sont_standards)'... */
#define INVERSER_LE_PRODUIT_GENERALISE_A_DROITE \
VRAI \
/* L'inconnue est-elle 'A2' ("gauche"='VRAI') ou 'A1' ("droite"='FAUX') ? Ceci a ete */ \
/* introduit le 20040203121217 uniquement si 'EST_VRAI(les_images_sont_standards)'... */
#define X_COEFFICIENT \
DIVI(FLOT(k___dimX),FLOT(COULEURS))
#define Y_COEFFICIENT \
DIVI(FLOT(k___dimY),FLOT(COULEURS))
/* Facteur multiplicatif permettant de "dilater" l'image 'T' definissant la table de */
/* multiplication generalisee. */
/* */
/* ATTENTION : le 20021002173746 ont ete introduits les 'FLOT(...)' dans les definitions */
/* ci-dessus, d'ou des risques d'incompatibilite avec des generations anterieures... */
#define X_TRANSLATION \
FZERO
#define Y_TRANSLATION \
FZERO
/* Translation de l'image 'T' definissant la table de multiplication generalisee. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P R O D U I T G E N E R A L I S E D E D E U X I M A G E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Logical,INIT(des_arguments_pour_les_images_non_standards,NEXIST));
/* Introduit le 20050603150507 afin de savoir s'il y a des arguments qui ne sont utilies que */
/* dans le cas 'EST_FAUX(les_images_sont_standards)'... */
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA1),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA2),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageT),NOM_PIPE));
DEFV(Logical,INIT(inverser_le_produit_generalise_au_centre,INVERSER_LE_PRODUIT_GENERALISE_AU_CENTRE));
/* L'inconnue est-elle 'T' ("centre"='VRAI') ou 'A1' ou 'A2' ("centre"='FAUX') ? Ceci a ete */
/* introduit le 20040205090947 uniquement si 'EST_VRAI(les_images_sont_standards)'... */
DEFV(Logical,INIT(inverser_le_produit_generalise,INVERSER_LE_PRODUIT_GENERALISE));
/* Faut-il inverser le produit ('VRAI') ou calculer le produit direct ('FAUX'). Ceci a ete */
/* introduit le 20040203101948 uniquement si 'EST_VRAI(les_images_sont_standards)'... */
DEFV(Logical,INIT(inverser_le_produit_generalise_a_droite,INVERSER_LE_PRODUIT_GENERALISE_A_DROITE));
/* L'inconnue est-elle 'A2' ("gauche"='VRAI') ou 'A1' ("droite"='FAUX') ? Ceci a ete */
/* introduit le 20040203121217 uniquement si 'EST_VRAI(les_images_sont_standards)'... */
/* */
/* L'utilisation sera la suivante : */
/* */
/* inverse=FAUX */
/* T=$xTV/IMAGE.T < . . . . . . . . . . . . */
/* A1=$xTV/IMAGE.A1 < . . . . . . . . . . . */
/* A2=$xTV/IMAGE.A2 < . . . . . . . . . */
/* R=$xTV/IMAGE.R ---------- . . . */
/* | . . . */
/* | . . . */
/* inverse=VRAI centre=FAUX droite=VRAI | . . . */
/* A1=$xTV/IMAGE.A1 | . . . */
/* A2_R=$xTV/IMAGE.R <---------| . . . */
/* T=$xTV/IMAGE.T | . . . */
/* R_A2=$xTV/IMAGE.R_A2 . . . . . | . . . . */
/* | . . */
/* | . . */
/* inverse=VRAI centre=FAUX gauche=VRAI | . . */
/* A1_R=$xTV/IMAGE.R <---------| . . */
/* A2=$xTV/IMAGE.A2 | . . */
/* T=$xTV/IMAGE.T | . . */
/* R_A1=$xTV/IMAGE.R_A1 . . . . . | . . . . . . */
/* | . */
/* | . */
/* inverse=VRAI centre=VRAI | . */
/* A1=$xTV/IMAGE.A1 | . */
/* A2=$xTV/IMAGE.A2 | . */
/* T_R=$xTV/IMAGE.R <--------- . */
/* R_T=$xTV/IMAGE.R_T . . . . . . . . . . . . . */
/* */
DEFV(coeffF_2D,coefficient);
/* Facteur multiplicatif permettant de "dilater" l'image 'T' definissant la table de */
/* multiplication generalisee. */
/* */
/* ATTENTION : le 20021002173746 'coefficient' est passe de 'coeffI_2D' a 'coeffF_2D' */
/* ci-dessus, d'ou des risques d'incompatibilite avec des generations anterieures... */
DEFV(deltaF_2D,trans);
/* Translation de l'image 'T' definissant la table de multiplication generalisee. On notera */
/* le nom 'trans' a la place de 'translation' du a des questions de mise en page lors de */
/* l'utilisation de 'INITIALISATION_QUELCONQUE_TABLE_DE_MULTIPLICATION(...)'... */
/*..............................................................................................................................*/
INITIALISATION_COEFFICIENT_2D(coefficient,X_COEFFICIENT,Y_COEFFICIENT);
/* Initialisation du facteur multiplicatif permettant de "dilater" l'image 'T' definissant */
/* la table de multiplication generalisee. */
INITIALISATION_ACCROISSEMENT_2D(trans,X_TRANSLATION,Y_TRANSLATION);
/* Initialisation de la translation de l'image 'T' definissant la table de multiplication */
/* generalisee. */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA1_R=""imageA1=""A1_R=""A1=",nom_imageA1);
GET_ARGUMENT_C("imageA2_R=""imageA2=""A2_R=""A2=",nom_imageA2);
GET_ARGUMENT_C("imageT_R=""imageTM=""imageT=""imageA3=""T_R=""TM=""T=""A3=",nom_imageT);
GET_ARGUMENT_C("imageR_TM=""imageR_T=""imageR_A2=""imageR_A1=""imageR=""R_TM=""R_A2=""R_A1=""R_T=""R="
,nom_imageR
);
GET_ARGUMENT_L("standard=",les_images_sont_standards);
GET_ARGUMENT_F("Cx=",ASD1(coefficient,cx));
GET_ARGUMENT_F("Cy=",ASD1(coefficient,cy));
GET_ARGUMENT_F("Tx=",ASD1(trans,dx));
GET_ARGUMENT_F("Ty=",ASD1(trans,dy));
EGAL(cumul_logique_de_valeur_recherchee,NEXIST);
/* Introduit le 20050603150507 afin de savoir si des arguments utiles uniquement dans le */
/* cas 'EST_FAUX(les_images_sont_standards)' ont ete rencontres... */
GET_ARGUMENT_L("drenormaliser=""dr="
,IFproduit_generalise_____faire_IFnormalisation_automatique_des_operandes
);
/* Parametre introduit le 20040129091816... */
GET_ARGUMENT_L("non_inversible=""avertir="
,IFproduit_generalise_____avertir_de_la_non_inversibilite_eventuelle
);
GET_ARGUMENT_F("fx=""fX=",IFproduit_generalise_____facteur_des_coordonnees_X);
GET_ARGUMENT_I("trx=""trX=",IFproduit_generalise_____translateur_des_coordonnees_X);
GET_ARGUMENT_F("fy=""fY=",IFproduit_generalise_____facteur_des_coordonnees_Y);
GET_ARGUMENT_I("try=""trY=",IFproduit_generalise_____translateur_des_coordonnees_Y);
/* Arguments introduits le 20040228091849... */
GET_ARGUMENT_F("pxn=""pXn=",IFproduit_generalise_____ponderation_des_coordonnees_X_n);
GET_ARGUMENT_F("pxx=""pXX=",IFproduit_generalise_____ponderation_des_coordonnees_X_X);
GET_ARGUMENT_F("pxy=""pXY=",IFproduit_generalise_____ponderation_des_coordonnees_X_Y);
GET_ARGUMENT_F("pyn=""pYn=",IFproduit_generalise_____ponderation_des_coordonnees_Y_n);
GET_ARGUMENT_F("pyx=""pYX=",IFproduit_generalise_____ponderation_des_coordonnees_Y_X);
GET_ARGUMENT_F("pyy=""pYY=",IFproduit_generalise_____ponderation_des_coordonnees_Y_Y);
/* Arguments introduits le 20040831143514... */
GET_ARGUMENT_L("periodiser_X=""periodX=",IFproduit_generalise_____periodiser_X);
GET_ARGUMENT_L("periodiser_Y=""periodY=",IFproduit_generalise_____periodiser_Y);
GET_ARGUMENT_L("symetriser_X=""symetrX=",IFproduit_generalise_____symetriser_X);
GET_ARGUMENT_L("symetriser_Y=""symetrY=",IFproduit_generalise_____symetriser_Y);
GET_ARGUMENT_L("prolonger_X=""prolX=",IFproduit_generalise_____prolonger_X);
GET_ARGUMENT_L("prolonger_Y=""prolY=",IFproduit_generalise_____prolonger_Y);
GET_ARGUMENT_F("niveau_hors_image=""niveau=",IFproduit_generalise_____niveau_hors_image);
/* Arguments introduits le 20040228091849... */
GET_ARGUMENT_L("inverser=""inverse=",inverser_le_produit_generalise);
GET_ARGUMENT_N("direct=",inverser_le_produit_generalise);
GET_ARGUMENT_L("centre=",inverser_le_produit_generalise_au_centre);
GET_ARGUMENT_L("droite=""d=",inverser_le_produit_generalise_a_droite);
GET_ARGUMENT_N("gauche=""g=",inverser_le_produit_generalise_a_droite);
GET_ARGUMENT_L("icrenormaliser=""icr="
,IFproduit_generalise_inverse_au_centre_T_____faire_IFnormalisation_automatique_des_operandes
);
GET_ARGUMENT_L("igrenormaliser=""igr="
,IFproduit_generalise_inverse_a_gauche_A1_____faire_IFnormalisation_automatique_des_operandes
);
GET_ARGUMENT_L("idrenormaliser=""idr="
,IFproduit_generalise_inverse_a_droite_A2_____faire_IFnormalisation_automatique_des_operandes
);
GET_ARGUMENT_F("npnc=""niveau_des_points_non_calcules="
,IFproduit_generalise_inverse_au_centre_T_____niveau_des_points_non_calcules_de_imageR_T
);
/* Parametre introduit le 20040206091745. */
EGAL(des_arguments_pour_les_images_non_standards
,OUIN(des_arguments_pour_les_images_non_standards
,cumul_logique_de_valeur_recherchee
)
);
/* Introduit le 20050603150507 afin de savoir si des arguments utiles uniquement dans le */
/* cas 'EST_FAUX(les_images_sont_standards)' ont ete rencontres... */
)
);
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,ImageA1,IFmageA1,nom_imageA1))))
Bblock
/* Chargement de la premiere image Argument. */
Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA2,IFmageA2,nom_imageA2))))
Bblock
/* Chargement de la deuxieme image Argument. */
Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA3,IFmageA3,nom_imageT))))
Bblock
/* Chargement de la troisieme image Argument. */
Test(IL_NE_FAUT_PAS(inverser_le_produit_generalise))
Bblock
DEFV(table_de_multiplication_generalisee,table_de_multiplication);
/* Table de multiplication generalisee... */
/* */
/* ATTENTION : la structure 'table_de_multiplication' doit etre declaree quel que soit la */
/* valeur de 'les_images_sont_standards' (que cela soit 'VRAI' ou 'FAUX') a cause de sa */
/* reference dans 'gIproduit_generalise(...)' qui est situe a l'exterieur du 'Test(...)' */
/* correspondant ci-apres... */
Test(EST_VRAI(les_images_sont_standards))
/* Cette possibilite a ete introduite le 20040127142617... */
Bblock
/* Cas d'une image 'image' : */
Test(PRESENT(des_arguments_pour_les_images_non_standards))
Bblock
PRINT_ERREUR("les arguments presents relatifs aux images non 'standard's ne seront pas utilises");
Eblock
ATes
Bblock
Eblock
ETes
INITIALISATION_QUELCONQUE_TABLE_DE_MULTIPLICATION
(table_de_multiplication
,load_point_valide(ImageA3
,COXA(INTE(AXPB(ASD1(coefficient,cx)
,NIVR(SE12(niveau1,niveau2))
,_lDENORMALISE_OX(ASD1(trans,dx))
)
)
)
,COYA(INTE(AXPB(ASD1(coefficient,cy)
,NIVR(SE22(niveau1,niveau2))
,_lDENORMALISE_OY(ASD1(trans,dy))
)
)
)
)
);
/* Initialisation de la table de multiplication generalisee. Le 20021002141437, j'ai mis */
/* les procedures 'CO?A(...)' la ou il faut, alors qu'avant cette date, elles avaient */
/* comme arguments les 'NIVR(...)'. */
Eblock
ATes
Bblock
/* Cas d'une image 'imageF' : */
Eblock
ETes
CALS(gIproduit_generalise(les_images_sont_standards
,ImageR,IFmageR
,ImageA1,IFmageA1
,ImageA2,IFmageA2
,table_de_multiplication,IFmageA3
)
);
/* Produit des deux images arguments 'ImageA1' et 'ImageA2' via la table de multiplication */
/* 'ImageA3'. */
Eblock
ATes
Bblock
Test(EST_VRAI(les_images_sont_standards))
Bblock
/* Cas d'une image 'image' : */
PRINT_ERREUR("l'inversion du produit generalise est impossible avec les images 'standard's");
Eblock
ATes
Bblock
/* Cas d'une image 'imageF' : */
Test(IL_FAUT(inverser_le_produit_generalise_au_centre))
Bblock
CALS(IFproduit_generalise_inverse_au_centre_T(IFmageR
,IFmageA1
,IFmageA2
,IFmageA3
)
);
/* Inversion du produit a droite... */
Eblock
ATes
Bblock
Test(IL_FAUT(inverser_le_produit_generalise_a_droite))
Bblock
CALS(IFproduit_generalise_inverse_a_droite_A2(IFmageR
,IFmageA1
,IFmageA2
,IFmageA3
)
);
/* Inversion du produit a droite... */
Eblock
ATes
Bblock
CALS(IFproduit_generalise_inverse_a_gauche_A1(IFmageR
,IFmageA1
,IFmageA2
,IFmageA3
)
);
/* Inversion du produit a gauche... */
Eblock
ETes
Eblock
ETes
Eblock
ETes
Eblock
ETes
CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
RETU_Commande;
Eblock
ECommande