/*************************************************************************************************************************************/ /* */ /* E D I T I O N D ' U N P A V E D E P O I N T S D ' U N E I M A G E : */ /* */ /* */ /* Author of '$xci/niveau$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_IMAGESF_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define LES_COORDONNEES_SONT_DENORMALISEES \ VRAI \ /* Les coordonnees sont denormalisees ('VRAI') ou normalisees ('FAUX'). Ceci a ete introduit */ \ /* le 20041122205642... */ #define LES_COORDONNEES_NORMALISEES_DOIVENT_LE_RESTER \ FAUX \ /* Si 'EST_FAUX(les_coordonnees_sont_denormalisees)' alors elles doivent rester dans [0,1] */ \ /* ('VRAI') ou etre denormalisees ('FAUX'). Ceci a ete introduit le 20041123105646... */ #define PERIODISER_X_ET_Y \ VRAI #define SYMETRISER_X_ET_Y \ FAUX #define PROLONGER_X_ET_Y \ FAUX #define NIVEAU_FLOTTANT_HORS_IMAGE \ FZERO /* Pour savoir s'il faut periodiser ou prolonger les coordonnees {X,Y} dans [0,1]. */ /* La possibilite de symetriser a ete introduite le 20050721093201... */ #define EDITER_TOUTE_L_IMAGE \ FAUX \ /* Faut-il editer toute l'image ('VRAI') ou bien le sous-ensemble defini ci-apres ('FAUX') ? */ \ /* Ce parametre fut introduit le 20060430090401... */ #define ABSCISSE_DU_CENTRE_DENORMALISEE \ Xmin #define ORDONNEE_DU_CENTRE_DENORMALISEE \ Ymin /* Point donnant le centre du pave dont on veut les niveaux (coordonnees denormalisees). */ #define ABSCISSE_DU_CENTRE_NORMALISEE \ COORDONNEE_BARYCENTRIQUE_MINIMALE #define ORDONNEE_DU_CENTRE_NORMALISEE \ COORDONNEE_BARYCENTRIQUE_MAXIMALE /* Point donnant le centre du pave dont on veut les niveaux (coordonnees normalisees). */ #define PAS_DE_L_ABSCISSE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER \ _____lNORMALISE_OX(I_lHOMOTHETIE_Std_OX(PasX)) #define PAS_DE_L_ORDONNEE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER \ _____lNORMALISE_OY(I_lHOMOTHETIE_Std_OY(PasY)) /* Pas de {Xf,Yf} lorsqu'elles ont utilisees et qu'elles doivent rester dans [0,1]. Ceci a */ /* ete introduit le 20041124100735... */ /* */ /* Le 20120212100832, les 'I_lHOMOTHETIE_Std_O?(...)'s furent introduits... */ #define DEMI_DELTA_X \ ZERO #define DEMI_DELTA_Y \ ZERO /* Definition des demi-cotes du pave dont on veut les niveaux. */ #define EDITER_EN_DECIMAL \ VRAI \ /* Faut-il editer en decimal ('VRAI') ou en hexa-decimal ('FAUX') ? Cela a ete introduit */ \ /* le 20130705125807... */ #define NOMBRE_DE_CHIFFRES_CONSTANT \ FAUX \ /* Faut-il editer les niveaux de type 'genere_p' avec un nombre de chiffres constant */ \ /* ('VRAI') ou bien avec juste le nombre de chiffres necessaires ('FAUX') ? */ #define CONSERVER_LES_NOMBRES_NEGATIFS \ VRAI #define CONSERVER_LES_NOMBRES_POSITIFS \ VRAI /* Pour eliminer eventuellement les nombres negatifs et/ou les nombres positifs. */ #define VALEUR_D_EDITION_DES_NOMBRES_NEGATIFS \ FZERO #define VALEUR_D_EDITION_DES_NOMBRES_POSITIFS \ FZERO /* Valeur d'edition des nombres negatifs et/ou positifs eventuellement elimines. */ #define EDITER_LES_MESSAGES_DE_HORS_IMAGE \ FAUX \ /* Faut-il editer ('VRAI') ou pas ('FAUX') les messages d'erreur concernant les points */ \ /* hors-image (introduit le 20170923100510). */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/extrema.01.I" /* Introduit le 20051210184351 en ramplacement de 'NOMBRE_DE_CHIFFRES_NECESSAIRES(...)'. */ #define EDITION(condition,fonction_d_impression) \ Bblock \ Test(condition) \ Bblock \ BLOC(fonction_d_impression); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure d'edition conditionnelle... */ #define MISE_EN_PAGE_AVANT_EDITION(Y,Y_centre,dd_Y,pasY,Ymin,Ymax,X,X_centre,dd_X,pasX,Xmin,Xmax) \ Bblock \ EDITION(I3ET(IFGE(dd_Y,pasY),IFEQ(Y,Y_centre),IFEQ(X,Xmin)) \ ,BLOC(CALS(Fsauts_de_lignes(UN));) \ ); \ EDITION(IFET(IFGE(dd_X,pasX),IFEQ(X,X_centre)) \ ,BLOC(CALS(FPrme0(" "));) \ ); \ Eblock \ /* Procedure de mise en page avant edition d'une valeur (introduit le 20041124100148). */ #define MISE_EN_PAGE_APRES_EDITION(Y,Y_centre,dd_Y,pasY,Ymin,Ymax,X,X_centre,dd_X,pasX,Xmin,Xmax) \ Bblock \ EDITION(IFNE(X,Xmax) \ ,BLOC(CALS(FPrme0(" "));) \ ); \ EDITION(IFET(IFNE(Y,Ymin),IFEQ(X,Xmax)) \ ,BLOC(CALS(Fsauts_de_lignes(UN));) \ ); \ /* ATTENTION, on utilise ici 'Ymin' et non pas 'Ymax' car, en effet, l'axe 'OY' est */ \ /* decrit de bas en haut... */ \ \ EDITION(IFET(IFGE(dd_X,pasX),IFEQ(X,X_centre)) \ ,BLOC(CALS(FPrme0(" "));) \ ); \ EDITION(I3ET(IFGE(dd_Y,pasY),IFEQ(Y,Y_centre),IFEQ(X,Xmax)) \ ,BLOC(CALS(Fsauts_de_lignes(UN));) \ ); \ \ EDITION(I3ET(IFOU(IFGE(dd_Y,pasY),IFGE(dd_X,pasX)) \ ,IFEQ(Y,Ymin) \ ,IFEQ(X,Xmax) \ ) \ ,BLOC(CALS(Fsauts_de_lignes(UN));) \ ); \ \ EDITION(IL_FAUT(ajouter_un_K_LF_en_fin_de_format_d_edition) \ ,BLOC(CALS(Fsauts_de_lignes(UN));) \ ); \ /* Introduit le 20140430184053... */ \ Eblock \ /* Procedure de mise en page apres edition d'une valeur (introduit le 20041124100148). */ #define nombre_de_caracteres_pour_les_sorties_non_standard_a_nombre_de_chiffres_constant \ ADD2(nombre_de_decimales,TROIS) \ /* Introduit le 20121116165351 afin de garantir une bonne tabulation lors des sorties */ \ /* a nombre de chiffres constant pour les images non standards... */ #include xci/valeurs.02.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E D I T I O N D ' U N P A V E D E P O I N T S D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); DEFV(Logical,INIT(les_coordonnees_sont_denormalisees,LES_COORDONNEES_SONT_DENORMALISEES)); /* Les coordonnees sont denormalisees ('VRAI') ou normalisees ('FAUX'). Ceci a ete introduit */ /* le 20041122205642... */ DEFV(Logical,INIT(les_coordonnees_normalisees_doivent_le_rester,LES_COORDONNEES_NORMALISEES_DOIVENT_LE_RESTER)); /* Si 'EST_FAUX(les_coordonnees_sont_denormalisees)' alors elles doivent rester dans [0,1] */ /* ('VRAI') ou etre denormalisees ('FAUX'). Ceci a ete introduit le 20041123105646... */ DEFV(Logical,INIT(periodiser_X,PERIODISER_X_ET_Y)); DEFV(Logical,INIT(periodiser_Y,PERIODISER_X_ET_Y)); DEFV(Logical,INIT(symetriser_X,SYMETRISER_X_ET_Y)); DEFV(Logical,INIT(symetriser_Y,SYMETRISER_X_ET_Y)); DEFV(Logical,INIT(prolonger_X,PROLONGER_X_ET_Y)); DEFV(Logical,INIT(prolonger_Y,PROLONGER_X_ET_Y)); DEFV(genere_Float,INIT(niveau_flottant_hors_image,NIVEAU_FLOTTANT_HORS_IMAGE)); /* Pour savoir s'il faut periodiser ou prolonger les coordonnees {X,Y} dans [0,1]. */ /* La possibilite de symetriser a ete introduite le 20050721093201... */ DEFV(Logical,INIT(editer_toute_l_image,EDITER_TOUTE_L_IMAGE)); /* Faut-il editer toute l'image ('VRAI') ou bien le sous-ensemble defini ci-apres ('FAUX') ? */ /* Ce parametre fut introduit le 20060430090401... */ DEFV(Int,INIT(abscisse_du_centre_denormalisee,ABSCISSE_DU_CENTRE_DENORMALISEE)); DEFV(Int,INIT(ordonnee_du_centre_denormalisee,ORDONNEE_DU_CENTRE_DENORMALISEE)); /* Point donnant le centre du pave dont on veut les niveaux (coordonnees denormalisees). */ DEFV(Float,INIT(abscisse_du_centre_normalisee,FLOT__UNDEF)); DEFV(Float,INIT(ordonnee_du_centre_normalisee,FLOT__UNDEF)); /* Point donnant le centre du pave dont on veut les niveaux (coordonnees normalisees). */ DEFV(Float,INIT(pas_de_l_abscisse_du_centre_normalisee_lorsqu_elle_doit_le_rester,FLOT__UNDEF)); DEFV(Float,INIT(pas_de_l_ordonnee_du_centre_normalisee_lorsqu_elle_doit_le_rester,FLOT__UNDEF)); /* Pas de {Xf,Yf} lorsqu'elles ont utilisees et qu'elles doivent rester dans [0,1]. Ceci a */ /* ete introduit le 20041124100735... */ DEFV(Int,INIT(demi_delta_X,DEMI_DELTA_X)); DEFV(Int,INIT(demi_delta_Y,DEMI_DELTA_Y)); /* Definition des demi-cotes du pave dont on veut les niveaux. */ DEFV(Logical,INIT(editer_en_decimal,EDITER_EN_DECIMAL)); /* Faut-il editer en decimal ('VRAI') ou en hexa-decimal ('FAUX') ? Cela a ete introduit */ /* le 20130705125807... */ DEFV(Logical,INIT(nombre_de_chiffres_constant,NOMBRE_DE_CHIFFRES_CONSTANT)); /* Faut-il editer les niveaux de type 'genere_p' avec un nombre de chiffres constant */ /* ('VRAI') ou bien avec juste le nombre de chiffres necessaires ('FAUX') ? */ DEFV(Logical,INIT(conserver_les_nombres_negatifs,CONSERVER_LES_NOMBRES_NEGATIFS)); DEFV(Logical,INIT(conserver_les_nombres_positifs,CONSERVER_LES_NOMBRES_POSITIFS)); /* Pour eliminer eventuellement les nombres negatifs et/ou les nombres positifs. */ DEFV(Float,INIT(valeur_d_edition_des_nombres_negatifs,VALEUR_D_EDITION_DES_NOMBRES_NEGATIFS)); DEFV(Float,INIT(valeur_d_edition_des_nombres_positifs,VALEUR_D_EDITION_DES_NOMBRES_POSITIFS)); /* Valeur d'edition des nombres negatifs et/ou positifs eventuellement elimines. */ DEFV(Logical,INIT(editer_les_messages_de_hors_image,EDITER_LES_MESSAGES_DE_HORS_IMAGE)); /* Faut-il editer ('VRAI') ou pas ('FAUX') les messages d'erreur concernant les points */ /* hors-image (introduit le 20170923100510). */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_L("standard=",les_images_sont_standards); GET_ARGUMENT_L("denormalisees=""denorm=",les_coordonnees_sont_denormalisees); GET_ARGUMENT_N("normalisees=""norm=",les_coordonnees_sont_denormalisees); GET_ARGUMENT_L("rester_dans_0_1=""r_0_1=",les_coordonnees_normalisees_doivent_le_rester); GET_ARGUMENT_L("periodiser_X=""per_X=",periodiser_X); GET_ARGUMENT_L("symetriser_X=""sym_X=",symetriser_X); GET_ARGUMENT_L("prolonger_X=""pro_X=",prolonger_X); GET_ARGUMENT_L("periodiser_Y=""per_Y=",periodiser_Y); GET_ARGUMENT_L("symetriser_Y=""sym_Y=",symetriser_Y); GET_ARGUMENT_L("prolonger_Y=""pro_Y=",prolonger_Y); GET_ARGUMENT_F("niveau_hors_image=""nhi=",niveau_flottant_hors_image); GET_ARGUMENT_L("toute=""image=",editer_toute_l_image); GET_ARGUMENT_I("x=""X=",abscisse_du_centre_denormalisee); GIT_ARGUMENT_F("xf=""Xf=",abscisse_du_centre_normalisee,ABSCISSE_DU_CENTRE_NORMALISEE); GIT_ARGUMENT_F("pxf=""pXf=" ,pas_de_l_abscisse_du_centre_normalisee_lorsqu_elle_doit_le_rester ,PAS_DE_L_ABSCISSE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER ); GET_ARGUMENT_I("y=""Y=",ordonnee_du_centre_denormalisee); GIT_ARGUMENT_F("yf=""Yf=",ordonnee_du_centre_normalisee,ORDONNEE_DU_CENTRE_NORMALISEE); GIT_ARGUMENT_F("pyf=""pYf=" ,pas_de_l_ordonnee_du_centre_normalisee_lorsqu_elle_doit_le_rester ,PAS_DE_L_ORDONNEE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER ); GET_ARGUMENT_I("dx=""dX=""Dx=""DX=",demi_delta_X); GET_ARGUMENT_I("dy=""dY=""Dy=""DY=",demi_delta_Y); GET_ARGUMENT_L("decimal=""ed=",editer_en_decimal); GET_ARGUMENT_N("hexadecimal=""ehd=",editer_en_decimal); GET_ARGUMENT_L("constant=",nombre_de_chiffres_constant); GET_ARGUMENT_C("signe=",valeurs_signees); GET_ARGUMENT_C("format=",format_d_edition); /* On notera le 20070302110607, que l'on peut ecrire : */ /* */ /* format="f" */ /* */ /* ('v $Falias_change format=') comme argument explicite dans l'appel a une commande '$X'. */ /* Par contre, definir : */ /* */ /* set PaRaMeTrEs='... format="f" ...' */ /* */ /* puis appeler une commande '$X' avec comme argument explicite '$PaRaMeTrEs' ne marchera */ /* pas car, en effet, les '$K_QD' qui entourent le format 'f' seront integrees au format, */ /* ce qui est evidemment incorrect ('v $Falias_Udisk format='). Il a donc ete decide a cette */ /* date de ne jamais encadrer des formats ("f", "g",...) par des '$K_QD', quel que soit */ /* l'utilisation. Au passage, si l'on souhaitait veritablement "double quoter" les formats */ /* ("f", "g",...), il suffirait d'ecrire : */ /* */ /* set PaRaMeTrEs=`eval echo '... format="f" ...'` */ /* */ /* pour avoir les '$K_QD's et les "effacer" immediatement... */ GET_ARGUMENT_I("decimales=",nombre_de_decimales); GET_ARGUMENT_L("LF=""K_LF=",ajouter_un_K_LF_en_fin_de_format_d_edition); /* Introduit le 20140430184053... */ GET_ARGUMENT_L("negatifs=""n=",conserver_les_nombres_negatifs); GET_ARGUMENT_F("nn=""niveau_negatif=",valeur_d_edition_des_nombres_negatifs); GET_ARGUMENT_L("positifs=""p=",conserver_les_nombres_positifs); GET_ARGUMENT_F("np=""niveau_positif=",valeur_d_edition_des_nombres_positifs); GET_ARGUMENT_L("interpoler=""inter=" ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement ); GET_ARGUMENT_N("ne_pas_interpoler=""ninter=" ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement ); /* Parametres introduits le 20080926133545 et completes le 20090603182930 par la negation... */ GET_ARGUMENT_L("lineaire=""bilineaire=" ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire ); GET_ARGUMENT_N("cubique=""bicubique=" ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire ); GET_ARGUMENT_L("pasX_et_pasY=""pasXY=",FFload_point_coordonnees_01_____utiliser_pasX_et_pasY); GET_ARGUMENT_I("pasX=",FFload_point_coordonnees_01_____pasX); GET_ARGUMENT_I("pasY=",FFload_point_coordonnees_01_____pasY); GET_ARGUMENT_L("editer_les_messages_de_hors_image=""editer_messages=",editer_les_messages_de_hors_image); /* Arguments introduits le 20170923100510... */ ) ) Test(EST_FAUX(les_coordonnees_sont_denormalisees)) Bblock Test(EST_FAUX(les_coordonnees_normalisees_doivent_le_rester)) Bblock EGAL(abscisse_du_centre_denormalisee,_cDENORMALISE_OX(abscisse_du_centre_normalisee)); EGAL(ordonnee_du_centre_denormalisee,_cDENORMALISE_OY(ordonnee_du_centre_normalisee)); /* Cas ou les coordonnees etaient normalisees et qu'elles doivent etre denormalisees. */ Eblock ATes Bblock Test(EST_VRAI(les_images_sont_standards)) Bblock PRINT_ERREUR("pour les images 'standard's les coordonnees doivent etre denormalisees"); EGAL(les_coordonnees_normalisees_doivent_le_rester,FAUX); Eblock ATes Bblock Eblock ETes Eblock ETes Eblock ATes Bblock Eblock ETes Test(IL_FAUT(editer_toute_l_image)) Bblock EGAL(abscisse_du_centre_denormalisee,Xcentre); EGAL(ordonnee_du_centre_denormalisee,Ycentre); EGAL(demi_delta_X,dimX2); EGAL(demi_delta_Y,dimY2); EGAL(abscisse_du_centre_normalisee,_____cNORMALISE_OX(abscisse_du_centre_denormalisee)); EGAL(ordonnee_du_centre_normalisee,_____cNORMALISE_OY(ordonnee_du_centre_denormalisee)); /* Possibilite introduite le 20060430090401... */ Eblock ATes Bblock Eblock ETes Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA,IFmageA,nom_imageA)))) Bblock Test(I3ET(EST_FAUX(les_images_sont_standards) ,EST_FAUX(les_coordonnees_sont_denormalisees) ,EST_VRAI(les_coordonnees_normalisees_doivent_le_rester) ) ) Bblock Gbegin_imageQ(DoDe ,SOUS(ordonnee_du_centre_normalisee,_____lNORMALISE_OY(demi_delta_Y)) ,ADD2(ordonnee_du_centre_normalisee,_____lNORMALISE_OY(demi_delta_Y)) ,pas_de_l_ordonnee_du_centre_normalisee_lorsqu_elle_doit_le_rester ,Float ,SE12 ,DoIn ,SOUS(abscisse_du_centre_normalisee,_____lNORMALISE_OX(demi_delta_X)) ,ADD2(abscisse_du_centre_normalisee,_____lNORMALISE_OX(demi_delta_X)) ,pas_de_l_abscisse_du_centre_normalisee_lorsqu_elle_doit_le_rester ,Float ,SE12 ) Bblock Test(TEST_DANS_L_IMAGE(_cDENORMALISE_OX(X),_cDENORMALISE_OY(Y))) /* ATTENTION, jusqu'au 20090606144926, il y avait ici : */ /* */ /* Test(TEST_DANS_L_IMAGE(X,Y)) */ /* */ /* par erreur... */ Bblock MISE_EN_PAGE_AVANT_EDITION(Y ,ordonnee_du_centre_normalisee ,_____lNORMALISE_OY(demi_delta_Y) ,pasY ,Ymin_begin_colonneQ ,Ymax_begin_colonneQ ,X ,abscisse_du_centre_normalisee ,_____lNORMALISE_OX(demi_delta_X) ,pasX ,Xmin_begin_ligneQ ,Xmax_begin_ligneQ ); EDITION(EST_FAUX(les_images_sont_standards) ,BLOC(DEFV(genere_Float,INIT(niveau_courant ,FFload_point_coordonnees_01(IFmageA ,X ,Y ,periodiser_X ,periodiser_Y ,symetriser_X ,symetriser_Y ,prolonger_X ,prolonger_Y ,niveau_flottant_hors_image ) ) ); CAL3(Prme2(Cara(chain_Aconcaten4(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_negatifs),IZLT(niveau_courant)) ,valeur_d_edition_des_nombres_negatifs ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_positifs),IZGT(niveau_courant)) ,valeur_d_edition_des_nombres_positifs ,niveau_courant ) ) ) ); ) ); Eblock ATes Bblock Test(IL_FAUT(editer_les_messages_de_hors_image)) /* Test introduit le 20170923100510... */ Bblock CAL1(Prer0("\n")); /* Et ce a cause de la mise en page de 'MISE_EN_PAGE_APRES_EDITION(...)'. */ PRINT_ERREUR("le point demande est en dehors de l'image (1)"); Eblock ATes Bblock Eblock ETes Eblock ETes MISE_EN_PAGE_APRES_EDITION(Y ,ordonnee_du_centre_normalisee ,_____lNORMALISE_OY(demi_delta_Y) ,pasY ,Ymin_begin_colonneQ ,Ymax_begin_colonneQ ,X ,abscisse_du_centre_normalisee ,_____lNORMALISE_OX(demi_delta_X) ,pasX ,Xmin_begin_ligneQ ,Xmax_begin_ligneQ ); Eblock Gend_imageQ(EDoD,Float,EDoI,Float) Eblock ATes Bblock begin_imageQ(DoDe ,SOUS(ordonnee_du_centre_denormalisee,demi_delta_Y) ,ADD2(ordonnee_du_centre_denormalisee,demi_delta_Y) ,pasY ,DoIn ,SOUS(abscisse_du_centre_denormalisee,demi_delta_X) ,ADD2(abscisse_du_centre_denormalisee,demi_delta_X) ,pasX ) Bblock Test(TEST_DANS_L_IMAGE(X,Y)) Bblock MISE_EN_PAGE_AVANT_EDITION(Y ,ordonnee_du_centre_denormalisee ,demi_delta_Y ,pasY ,Ymin_begin_colonneQ ,Ymax_begin_colonneQ ,X ,abscisse_du_centre_denormalisee ,demi_delta_X ,pasX ,Xmin_begin_ligneQ ,Xmax_begin_ligneQ ); EDITION(EST_VRAI(les_images_sont_standards) ,BLOC(CAL3(Prme2(COND(IL_FAUT(editer_en_decimal) ,"%0*d" ,"%0*x" ) ,COND(IL_FAUT(editer_en_decimal) ,NOMBRE_DE_CHIFFRES_NECESSAIRES(load_point(ImageA,X,Y)) ,NHXOC ) ,load_point(ImageA,X,Y) ) ); ) ); #define nombre_caracteres_nombre_chiffres_constant \ nombre_de_caracteres_pour_les_sorties_non_standard_a_nombre_de_chiffres_constant \ /* Afin de raccourcir une ligne qui suit... */ EDITION(EST_FAUX(les_images_sont_standards) ,BLOC(DEFV(genere_Float,INIT(niveau_courant,loadF_point(IFmageA,X,Y))); CAL3(Prme2(COND(IL_NE_FAUT_PAS(nombre_de_chiffres_constant) ,Cara(chain_Aconcaten4(INTRODUCTION_FORMAT ,valeurs_signees ,".*" ,format_d_edition ) ) ,Cara(chain_Aconcaten5(INTRODUCTION_FORMAT ,valeurs_signees ,chain_Aentier(nombre_caracteres_nombre_chiffres_constant) ,".*" ,FORMAT_D_EDITION_g ) ) ) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_negatifs),IZLT(niveau_courant)) ,valeur_d_edition_des_nombres_negatifs ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_positifs),IZGT(niveau_courant)) ,valeur_d_edition_des_nombres_positifs ,niveau_courant ) ) ) ); ) ); /* Le 20121116165351 la gestion du nombre de chiffres constant pour les images non standards */ /* en forcant, en particulier, le format 'FORMAT_D_EDITION_g'... */ #undef nombre_caracteres_nombre_chiffres_constant Eblock ATes Bblock Test(IL_FAUT(editer_les_messages_de_hors_image)) /* Test introduit le 20170923100510... */ Bblock CAL1(Prer0("\n")); /* Et ce a cause de la mise en page de 'MISE_EN_PAGE_APRES_EDITION(...)'. */ PRINT_ERREUR("le point demande est en dehors de l'image (2)"); Eblock ATes Bblock Eblock ETes Eblock ETes MISE_EN_PAGE_APRES_EDITION(Y ,ordonnee_du_centre_denormalisee ,demi_delta_Y ,pasY ,Ymin_begin_colonneQ ,Ymax_begin_colonneQ ,X ,abscisse_du_centre_denormalisee ,demi_delta_X ,pasX ,Xmin_begin_ligneQ ,Xmax_begin_ligneQ ); Eblock end_imageQ(EDoD,EDoI) Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande