/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A G E N E R A T I O N D E S I M A G E S : */
/* */
/* */
/* Author of '$xrv/champs_5.14$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 1992??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D U P A R A L L E L I S M E : */
/* */
/*************************************************************************************************************************************/
#include xrv/champs_5.34.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D E S T R A I N E E S : */
/* */
/*************************************************************************************************************************************/
#define CONVOLUTION_D_UNE_COMPOSANTE(composante) \
Bblock \
BLOC(VIDE;); \
Eblock \
/* La convolution d'une composante n'est pas utile ici... */
#define GENERER_LES_TRAINEES \
FAUX
#include xrv/champs_5.LN.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S E L E C T I O N D E S C O M P O S A N T E S ( P O U R ' $xrk/lorenz.01$K ' ) : */
/* */
/*************************************************************************************************************************************/
#define GENERER_LA_COMPOSANTE_ROUGE \
VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_composante_ROUGE,GENERER_LA_COMPOSANTE_ROUGE)));
/* Indique si l'on doit generer la composante ROUGE ('VRAI') ou pas ('FAUX'). */
#define GENERER_LA_COMPOSANTE_VERTE \
VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_composante_VERTE,GENERER_LA_COMPOSANTE_VERTE)));
/* Indique si l'on doit generer la composante VERTE ('VRAI') ou pas ('FAUX'). */
#define GENERER_LA_COMPOSANTE_BLEUE \
VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_composante_BLEUE,GENERER_LA_COMPOSANTE_BLEUE)));
/* Indique si l'on doit generer la composante BLEUE ('VRAI') ou pas ('FAUX'). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N E C O M P O S A N T E : */
/* */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageR),NOM_PIPE_Local)));
/* Nom de la sequence a generer... */
DEFV(Local,DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES)));
/* Nombre de chiffres codant le numero des images de la serie... */
#define TRANSLATION_DU_NUMERO_D_IMAGE \
ZERO
DEFV(Local,DEFV(Int,INIT(translation_du_numero_d_image,TRANSLATION_DU_NUMERO_D_IMAGE)));
/* Translation du numero d'image. */
#define NUMERO_IMAGE(numero_image) \
chain_numero(ADD2(numero_image,translation_du_numero_d_image),nombre_de_chiffres) \
/* Numero caracteristique d'une image. */
#define TEMPORISATION_D_ATTENTE_D_ESPACE_DISQUE \
DEUX \
/* Lorsqu'il n'y a pas suffisamment d'espace-disque de libre, on attend un certain temps */ \
/* avant de renouveler le test... */
#define GENERATION_D_UNE_COMPOSANTE(nom_de_la_composante,image,generer_la_composante) \
Bblock \
Test(IL_FAUT(generer_la_composante)) \
Bblock \
Test(IFDI(ptCARA(image),ptCARA(Z_Buffer))) \
Bblock \
CALi(Iupdate_image(nom_de_la_composante,ConversionEventuelle_CHAR(image))); \
Eblock \
ATes \
Bblock \
CALi(IupdateF_image(nom_de_la_composante,ConversionEventuelle_Float(image))); \
Eblock \
ETes \
/* Les procedures 'ConversionEventuelle_CHAR(...)' et 'ConversionEventuelle_Float(...)' */ \
/* ont ete introduites le 20040619191401... */ \
/* */ \
/* On notera que jusqu'au 20061204120809, lors d'erreur d'ecriture des composantes, il */ \
/* avait bouclage tant que l'erreur subsistait. Cela avait ete mis en place il y a tres */ \
/* longtemps, du temps ou il y avait peu de place sur les disques. Aujourd'hui, cela ne */ \
/* se justifie plus, d'autant plus que les erreurs rencontrees sont bien plus souvent */ \
/* des erreurs qui ne disparaissent pas spontanement (cas des composantes en mode */ \
/* '$READ_ONLY' par exemple...). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Generation d'une composante d'une image de nom donne... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N E I M A G E " T R I - C O M P O S A N T E " : */
/* */
/*************************************************************************************************************************************/
#define GENERATION_D_UNE_IMAGE(numero_image) \
Bblock \
Test(IFNE_chaine(nom_imageR,NOM_PIPE_Local)) \
/* ATTENTION : la generation n'a lieu que si un nom a ete donne explicitement... */ \
Bblock \
DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_composante_ROUGE),NOM_UNDEF)); \
DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_composante_VERTE),NOM_UNDEF)); \
DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_composante_BLEUE),NOM_UNDEF)); \
/* Nom des trois composantes... */ \
\
CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(Image_ROUGE \
,TRAINEES_ROUGE \
,trainee_du_ROUGE_avant \
,trainee_du_ROUGE_apres \
,numero_image \
); \
CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(Image_VERTE \
,TRAINEES_VERTE \
,trainee_du_VERTE_avant \
,trainee_du_VERTE_apres \
,numero_image \
); \
CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(Image_BLEUE \
,TRAINEES_BLEUE \
,trainee_du_BLEUE_avant \
,trainee_du_BLEUE_apres \
,numero_image \
); \
/* Calcul eventuel des trainees. ATTENTION : apres chaque calcul de l'effet de trainees, */ \
/* la composante courante subit, si necessaire, 'CONVOLUTION_D_UNE_COMPOSANTE(...)'... */ \
\
MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(TRAINEES_ROUGE,Image_ROUGE); \
MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(TRAINEES_VERTE,Image_VERTE); \
MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(TRAINEES_BLEUE,Image_BLEUE); \
/* Mise a jour des cumuls pour le calcul des trainees suivantes ; cette mise a jour est */ \
/* faite avant l'eventuel renormalisation des composantes, afin de ne pas prendre en compte */ \
/* des images renormalisees lors du calcul des trainees... */ \
\
RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(Image_ROUGE,trainee_du_ROUGE_avant,trainee_du_ROUGE_apres); \
RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(Image_VERTE,trainee_du_VERTE_avant,trainee_du_VERTE_apres); \
RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(Image_BLEUE,trainee_du_BLEUE_avant,trainee_du_BLEUE_apres); \
/* Puis, avant de memoriser les composantes, mais apres avoir mis a jour le systeme de */ \
/* calcul des trainees, les composantes sont eventuellement renormalisees... */ \
\
EGAL(nom_temporaire_de_la_composante_ROUGE \
,chain_Aconcaten3_sauf_nom_pipe(nom_imageR \
,NUMERO_IMAGE(numero_image) \
,c_ROUGE \
) \
); \
EGAL(nom_temporaire_de_la_composante_VERTE \
,chain_Aconcaten3_sauf_nom_pipe(nom_imageR \
,NUMERO_IMAGE(numero_image) \
,c_VERTE \
) \
); \
EGAL(nom_temporaire_de_la_composante_BLEUE \
,chain_Aconcaten3_sauf_nom_pipe(nom_imageR \
,NUMERO_IMAGE(numero_image) \
,c_BLEUE \
) \
); \
/* Generation du nom des trois composantes... */ \
\
GENERATION_D_UNE_COMPOSANTE(nom_temporaire_de_la_composante_ROUGE \
,Image_ROUGE \
,generer_la_composante_ROUGE \
); \
GENERATION_D_UNE_COMPOSANTE(nom_temporaire_de_la_composante_VERTE \
,Image_VERTE \
,generer_la_composante_VERTE \
); \
GENERATION_D_UNE_COMPOSANTE(nom_temporaire_de_la_composante_BLEUE \
,Image_BLEUE \
,generer_la_composante_BLEUE \
); \
/* Creation des trois composantes... */ \
\
CALZ_FreCC(nom_temporaire_de_la_composante_ROUGE); \
CALZ_FreCC(nom_temporaire_de_la_composante_VERTE); \
CALZ_FreCC(nom_temporaire_de_la_composante_BLEUE); \
/* Liberation du nom des trois composantes... */ \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("la generation d'une sequence d'images via le 'pipe' est impossible"); \
/* Message introduit le 20051217155159, car, en effet, il est utile... */ \
Eblock \
ETes \
Eblock \
/* Generation d'une image de numero donne... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N E L I S T E Q U E L C O N Q U E : */
/* */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_X),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_Y),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_Z),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_aRAYON),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_vRAYON),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_ROUGE),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_VERTE),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_BLEUE),NOM_PIPE_Local)));
/* Nom des listes a generer... */
#define GENERATION_D_UNE_LISTE(nom_de_la_liste,numero_image,liste) \
Bblock \
Test(IFNE_chaine(nom_de_la_liste,NOM_PIPE_Local)) \
Bblock \
DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_liste_a_generer) \
,chain_Aconcaten2_sauf_nom_pipe(nom_de_la_liste \
,NUMERO_IMAGE(numero_image) \
) \
) \
); \
/* Nom de la liste a generer... */ \
\
Tant(IL_Y_A_ERREUR(Fstore_fichier_formatte_Float(nom_temporaire_de_la_liste_a_generer \
,liste \
,NBRE(PREMIER_POINT_DES_LISTES \
,index_de_rangement_dans_la_liste \
) \
,ZERO \
,VRAI \
) \
) \
) \
Bblock \
DODO(TEMPORISATION_D_ATTENTE_D_ESPACE_DISQUE); \
/* S'il y a erreur, on considere que c'est parce qu'il n'y a pas assez de place, et dans */ \
/* dans ces conditions, on attend un peu avant de renouveler le test... */ \
Eblock \
ETan \
\
CALZ_FreCC(nom_temporaire_de_la_liste_a_generer); \
/* Liberation du nom de la liste a generer... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Generation d'une liste quelconque de nom donne... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D E S L I S T E S P A R T I C U L I E R E S : */
/* */
/*************************************************************************************************************************************/
#define GENERATION_D_UNE_OU_PLUSIEURS_LISTES(numero_image) \
Bblock \
GENERATION_D_UNE_LISTE(nom_liste_des_X,numero_image,liste_des_X); \
GENERATION_D_UNE_LISTE(nom_liste_des_Y,numero_image,liste_des_Y); \
GENERATION_D_UNE_LISTE(nom_liste_des_Z,numero_image,liste_des_Z); \
GENERATION_D_UNE_LISTE(nom_liste_des_aRAYON,numero_image,liste_des_aRAYON); \
GENERATION_D_UNE_LISTE(nom_liste_des_vRAYON,numero_image,liste_des_vRAYON); \
GENERATION_D_UNE_LISTE(nom_liste_des_ROUGE,numero_image,liste_des_ROUGE); \
GENERATION_D_UNE_LISTE(nom_liste_des_VERTE,numero_image,liste_des_VERTE); \
GENERATION_D_UNE_LISTE(nom_liste_des_BLEUE,numero_image,liste_des_BLEUE); \
Eblock \
/* Generation d'une ou plusieurs listes... */