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