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