/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I S E   D ' U N   M E S S A G E   S U R   U N E   I M A G E                                                              */
/*        A V E C   A   P R I O R I   U N   L I S E R E T   D E   L A   C O U L E U R   D U   F O N D   L ' E N C A D R A N T  :     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/message$K' :                                                                                               */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1995??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_CONTOURS_EXT
#include  image_image_ALPHABET_0_EXT
#include  image_image_ALPHABET_1_EXT
#include  image_image_ALPHABET_2_EXT
                                        /* L'include de 'image_image_ALPHABET_3_DEF' a ete supprime le 20110502095100...             */
#include  image_image_ALPHABET_3_EXT
#include  image_image_ALPHABET_4_EXT
                                        /* Introduit le 20161116111552...                                                            */
#include  image_image_ALPHABET_5_EXT
                                        /* Introduit le 20230516121144...                                                            */
#include  image_image_ALPHABET_6_EXT
                                        /* Introduit le 20240419180233...                                                            */
#include  image_image_ALPHABETS_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Y_POSITION_MESSAGE                                                                                                            \
                    Ycentre                                                                                                             \
                                        /* Ordonnee du message dans l'image.                                                         */
#define   X_POSITION_MESSAGE                                                                                                            \
                    Xcentre                                                                                                             \
                                        /* Abscisse du message dans l'image.                                                         */

#define   CENTRER_LE_MESSAGE                                                                                                            \
                    FAUX                                                                                                                \
                                        /* Faut-il centrer le message ('VRAI') ou pas ('FAUX') ?                                     */ \
                                        /*                                                                                           */ \
                                        /* Cela indique si le message doit etre centre dans les trois directions. Mais ATTENTION,    */ \
                                        /* je note le 20080909134353 qu'en general cela ne permet qu'un centrage horizontal car,     */ \
                                        /* en effet, les caracteres debutent sur un certain 'Y' (l'horizontale de reference) et      */ \
                                        /* terminent dessus ; alors seul le 'X' a progresse (le 'Z' n'intervenant en general pas).   */

#define   NIVEAU_FOND                                                                                                                   \
                    NOIR
#define   NIVEAU_MESSAGE                                                                                                                \
                    BLANC
#define   TAILLE_DES_CARACTERES_DES_MESSAGES                                                                                            \
                    GRO2(INTER_POINT)

#define   ANTI_ALIASING                                                                                                                 \
                    FAUX                                                                                                                \
                                        /* Pas d'anti-aliasing a priori...                                                           */

#define   EDITER_LA_POSITION_DE_LA_FIN_DU_MESSAGE                                                                                       \
                    FAUX                                                                                                                \
                                        /* Faut-il editer le curseur graphique au bout du message ('VRAI') ou pas ('FAUX'). Cela     */ \
                                        /* facilitera le positionnement d'un autre message derriere, par exemple, avec une taille    */ \
                                        /* differente...                                                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   VALIDATION_DES_DIMENSIONS_DES_IMAGES                                                                                          \
                    Bblock                                                                                                              \
                    Test(IFNE(dimX,dimY))                                                                                               \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("les images ne sont pas carrees ce qui posera des problemes lors d'eventuelles rotations");    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Validation introduite le 20161116142813 ('v $xiii/alphabet.3$FON 20080910141723')...      */

#define   VALIDATION_DU_MARQUAGE_DE_L_INTERIEUR_DES_CONTOURS_04                                                                         \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(FgL_All_04_____marquer_l_interieur_des_contours))                                                      \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("le marquage de l'interieur des contours n'a pas de sens pour la bibliotheque demandee");      \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Validation introduite le 20161124174319...                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I S E   D ' U N   M E S S A G E   S U R   U N E   I M A G E                                                              */
/*        A V E C   A   P R I O R I   U N   L I S E R E T   D E   L A   C O U L E U R   D U   F O N D   L ' E N C A D R A N T  :     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(message),C_VIDE));
                                        /* Message a centrer en bas de l'image.                                                      */
     DEFV(Float,INIT(X_position_message,FLOT__UNDEF));
     DEFV(Float,INIT(Y_position_message,FLOT__UNDEF));
                                        /* Coordonnees du message.                                                                   */
     DEFV(Logical,INIT(centrer_le_message,CENTRER_LE_MESSAGE));
                                        /* Faut-il centrer le message ('VRAI') ou pas ('FAUX') ?                                     */
                                        /*                                                                                           */
                                        /* Cela indique si le message doit etre centre dans les trois directions. Mais ATTENTION,    */
                                        /* je note le 20080909134353 qu'en general cela ne permet qu'un centrage horizontal car,     */
                                        /* en effet, les caracteres debutent sur un certain 'Y' (l'horizontale de reference) et      */
                                        /* terminent dessus ; alors seul le 'X' a progresse (le 'Z' n'intervenant en general pas).   */
     DEFV(genere_p,INIT(niveau_fond,NIVEAU_FOND));
     DEFV(genere_p,INIT(niveau_message,NIVEAU_MESSAGE));
     DEFV(Positive,INIT(taille_des_caracteres_des_messages,TAILLE_DES_CARACTERES_DES_MESSAGES));
     DEFV(Logical,INIT(anti_aliasing,ANTI_ALIASING));
                                        /* Indique s'il faut ou pas faire le traitement anti-aliasing...                             */
     DEFV(Logical,INIT(editer_la_position_de_la_fin_du_message,EDITER_LA_POSITION_DE_LA_FIN_DU_MESSAGE));
                                        /* Faut-il editer le curseur graphique au bout du message ('VRAI') ou pas ('FAUX'). Cela     */
                                        /* facilitera le positionnement d'un autre message derriere, par exemple, avec une taille    */
                                        /* differente...                                                                             */
     /*..............................................................................................................................*/
     GET_ARGUMENTSg(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("DEBUT_CENTRAGE_____compatibilite_20080909=""compatibilite_20080909="
                                       ,DEBUT_CENTRAGE_____compatibilite_20080909
                                        );
                                        /* Parametre introduit le 20080909143159...                                                  */
                         GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420="
                                       ,Ipoint_anti_aliase_segment_____compatibilite_20110420
                                        );
                                        /* Parametre introduit le 20110420140611...                                                  */

                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_C("message=",message);

                         GET_ARGUMENT_I("bibliotheque=",vecteurs_____num_bibliotheque);
                         GET_ARGUMENT_L("bibliotheque_00_fonte_proportionnelle=""b00fp=",Fg_00_____fonte_proportionnelle);
                                        /* Parametres introduits le 20190506135030 pour 'v $xiirv/$Fnota Debut_listG_PIPO_H0_1'...   */
                         GET_ARGUMENT_L("bibliotheque_00_remplacer_0_O=""b00r0O=",FgL0_00_____remplacer_par_un_O);
                                        /* Parametres introduits le 20241031125616 pour 'v $xiirv/.RDNW.d1.2.$U remplacer_0_O'...    */
                         GET_ARGUMENT_L("UnderScoreEspace=""USE=",FgLunder_score_00_____remplacer_par_un_espace);
                                        /* Parametres introduits le 20180130135401 pour 'v $xiirc/.VONK.51.3.$U UnderScoreEspace'... */
                                        /*                                                                                           */
                                        /* Je note le 20201206104600 que pour 'v $xiirv/.AXPA.11.1.$U UnderScoreEspace.' cela        */
                                        /* permet de mettre '$xci/message$X' dans un 'execRVB' qui a le defaut de faire disparaitre  */
                                        /* les '$K_QS' et '$K_QD' et qui fait que si l'on ecrit par exemple :                        */
                                        /*                                                                                           */
                                        /*                  message='droite D'                                                       */
                                        /*                                                                                           */
                                        /* cela devient (a cause de la programmation de 'execRVB') :                                 */
                                        /*                                                                                           */
                                        /*                  message=droite D                                                         */
                                        /*                                                                                           */
                                        /* et "D" devient donc un argument (non reconnu evidemment) de '$xci/message$X'...           */
                         GET_ARGUMENT_L("EgalDiese=""ED=",FgLegal_00_____remplacer_par_un_diese);
                                        /* Parametres introduits le 20180131140115 pour 'v $xiirc/.VONK.51.3.$U EgalDiese'...        */

                         GIT_ARGUMENT_F("x=""ph=""X=",X_position_message,_____cNORMALISE_OX(X_POSITION_MESSAGE));
                         GIT_ARGUMENT_F("y=""pv=""Y=",Y_position_message,_____cNORMALISE_OY(Y_POSITION_MESSAGE));
                         GET_ARGUMENT_L("centrer=",centrer_le_message);

                         GET_ARGUMENT_L("lisere=",Imessage_____mettre_un_lisere_de_la_couleur_du_fond_autour_du_message);
                                        /* Parametre introduit le 20230516165959 pour 'v $xigP/Impossible.02$Z lisere'...            */

                         GET_ARGUMENT_P("niveau_fond=""f=""Nfond=",niveau_fond);
                         GET_ARGUMENT_P("t=""niveau_message=""Nmessage=",niveau_message);
                         GET_ARGUMENT_I("taille=""T=",taille_des_caracteres_des_messages);
                         GET_ARGUMENT_L("anti_aliasing=""a=",anti_aliasing);

                         GET_ARGUMENT_P("t1=""niveau_message1=""Nmessage1=",FgL_All_04_____niveau_1);
                         GET_ARGUMENT_P("t2=""niveau_message2=""Nmessage2=",FgL_All_04_____niveau_2);
                                        /* Introduit le 20181022175812 pour les nouvelles definitions (faites au mois de 201810)     */
                                        /* de 'v $xiii/alphabet.4$FON', soit {M,N,O,P,Q,R,m,n,o,p,q,r,S}...                          */

                         GET_ARGUMENT_L("fin=""editer=",editer_la_position_de_la_fin_du_message);

                         GET_ARGUMENT_L("editer_vecteur_2D=""ev2D=",IFsegment_____editer_le_vecteur_bidimensionnel);
                         GET_ARGUMENT_L("editer_vecteur_3D=""ev3D=",IFseg3D_____editer_le_vecteur_tridimensionnel);
                                        /* Parametres introduits le 20080908183706...                                                */
                         GET_ARGUMENT_L("editer_points=""ep=""editer_XYN=""eXYN="
                                       ,EDITION_DES_VECTEURS_BIDIMENSIONNELS_____editer_les_coordonnees_X_Y_et_les_niveaux
                                        );
                                        /* Parametre introduit le 20230511092350 pour 'v $xigP/Impossible.02$Z editer_XYN'...        */
                         GET_ARGUMENT_L("editer_points_entiers=""epe="
                                       ,EDITION_DES_VECTEURS_BIDIMENSIONNELS_____editer_les_coordonnees_X_Y_en_entiers
                                        );
                         GET_ARGUMENT_N("editer_points_flottants=""epf="
                                       ,EDITION_DES_VECTEURS_BIDIMENSIONNELS_____editer_les_coordonnees_X_Y_en_entiers
                                        );
                                        /* Parametres introduits le 20230520104432...                                                */
                         GET_ARGUMENT_L("editer_points_hors_image=""ephi="
                                       ,EDITION_DES_VECTEURS_BIDIMENSIONNELS_____editer_les_points_hors_image
                                        );
                                        /* Parametre introduit le 20230517093427 pour 'v $xigP/Impossible.02$Z hors_ecran'...        */

                         GET_ARGUMENT_F("vSK=",Imessage_____facteur_scale_globale);
                         GET_ARGUMENT_F("vSX=",Imessage_____facteur_scale_OX);
                         GET_ARGUMENT_F("vSY=",Imessage_____facteur_scale_OY);
                         GET_ARGUMENT_F("vSZ=",Imessage_____facteur_scale_OZ);
                                        /* Parametres introduits le 20230522140520...                                                */
                         GET_ARGUMENT_L("homothetique=""SKH=",TRACE_TEXTE_____utiliser_SKH);
                         GET_ARGUMENT_N("non_homothetique=""SK=",TRACE_TEXTE_____utiliser_SKH);
                                        /* Parametres introduits le 20110423111542...                                                */
                         GET_ARGUMENT_L("renormaliser_scale_globale=""rsg=",vecteurs_____renormaliser_scale_globale);
                                        /* Parametre introduit le 20230505100159...                                                  */

                         GET_ARGUMENT_L("marquer_interieur_contours=""mic=",FgL_All_04_____marquer_l_interieur_des_contours);
                                        /* Parametres introduits le 20161118094827...                                                */

                         GET_ARGUMENT_F("TauxDepthCueing=""tdc=",Ipoint_segment_____taux_depth_cueing);
                                        /* Introduits le 20240519113041...                                                           */
                                        /*                                                                                           */
                                        /* Le "depth-cueing" maximal est donc obtenu simplement en faisant :                         */
                                        /*                                                                                           */
                                        /*                  TauxDepthCueing=1                                                        */
                                        /*                                                                                           */
                         )
                    );

     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageG,nom_imageA))))
          Bblock
          Choi(vecteurs_____num_bibliotheque)
                                        /* Validation introduite le 20161116142813...                                                */
               Bblock
               Ca1e(BIBLIOTHEQUE_00)
                    Bblock
                    VALIDATION_DU_MARQUAGE_DE_L_INTERIEUR_DES_CONTOURS_04;
                    Eblock
               ECa1

               Ca1e(BIBLIOTHEQUE_01)
                    Bblock
                    VALIDATION_DU_MARQUAGE_DE_L_INTERIEUR_DES_CONTOURS_04;
                    Eblock
               ECa1

               Ca1e(BIBLIOTHEQUE_02)
                    Bblock
                    VALIDATION_DU_MARQUAGE_DE_L_INTERIEUR_DES_CONTOURS_04;
                    Eblock
               ECa1

               Ca1e(BIBLIOTHEQUE_03)
                    Bblock
                    VALIDATION_DES_DIMENSIONS_DES_IMAGES;
                    VALIDATION_DU_MARQUAGE_DE_L_INTERIEUR_DES_CONTOURS_04;
                    Eblock
               ECa1

               Ca1e(BIBLIOTHEQUE_04)
                    Bblock
                    VALIDATION_DES_DIMENSIONS_DES_IMAGES;
                    Eblock
               ECa1

               Ca1e(BIBLIOTHEQUE_05)
                                        /* Introduit le 20230516105746...                                                            */
                    Bblock
                    VALIDATION_DES_DIMENSIONS_DES_IMAGES;
                    Eblock
               ECa1

               Ca1e(BIBLIOTHEQUE_06)
                                        /* Introduit le 20240419183024...                                                            */
                    Bblock
                    VALIDATION_DU_MARQUAGE_DE_L_INTERIEUR_DES_CONTOURS_04;
                    Eblock
               ECa1

               Defo
                    Bblock
                    PRINT_ERREUR("la bibliotheque demandee n'existe pas");
                    Eblock
               EDef
               Eblock
          ECho

          SET_CURSOR(X_position_message,Y_position_message,FZorigine);

          SET_ANTI_ALIASING(anti_aliasing);
                                        /* Indique s'il faut ou pas faire le traitement anti-aliasing...                             */

          Test(IL_FAUT(editer_la_position_de_la_fin_du_message));
               Bblock
               EGAL(DEBUT_MESSAGE__FIN_MESSAGE_____faire_FgMIC_FgMOC,FAUX);
                                        /* Afin que le curseur graphique progresse...                                                */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          CALS(Imessage(message,niveau_fond,niveau_message,taille_des_caracteres_des_messages,centrer_le_message));

          Test(IL_FAUT(editer_la_position_de_la_fin_du_message));
               Bblock
               DEFV(Float,INIT(X_position_de_la_fin_du_message,FLOT__UNDEF));
               DEFV(Float,INIT(Y_position_de_la_fin_du_message,FLOT__UNDEF));
               DEFV(Float,INIT(Z_position_de_la_fin_du_message,FLOT__UNDEF));
                                        /* Coordonnees de la fin du message.                                                         */
               GET_CURSOR(X_position_de_la_fin_du_message,Y_position_de_la_fin_du_message,Z_position_de_la_fin_du_message);
                                        /* Recuperation des coordonnees de la fin du message.                                        */
               CAL3(Prme2("X=%+f Y=%+f\n"
                         ,X_position_de_la_fin_du_message
                         ,Y_position_de_la_fin_du_message
                          )
                    );
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          CALi(Iupdate_image(nom_imageR,ImageG));
          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.