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