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