/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N A L B U M A P A R T I R D E T R O I S */
/* L I S T E S D E C O O R D O N N E E S C A R T E S I E N N E S : */
/* */
/* */
/* Nota : */
/* */
/* Il est possible de "simuler" le chainage */
/* des points {X,Y,Z} arguments en utilisant au */
/* prealable 'v $xci/interpole.01$K' qui interpole */
/* lineairement entre deux points consecutifs. */
/* */
/* */
/* Author of '$xrv/store_album$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20111112081220). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
/* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque */
/* c'est en effet 'Zmax' qui joue ce role... */
#define INVERSER_L_AXE_OZ \
FAUX \
/* Introduit le 20120806144954 afin de permettre d'inverser l'axe 'OZ' (initialement pour */ \
/* 'v $xiirf/FRB3.E4.2'...). */
#define FACTEUR_DES_COORDONNEES_X \
FU
#define TRANSLATION_DES_COORDONNEES_X \
FZERO
#define FACTEUR_DES_COORDONNEES_Y \
FU
#define TRANSLATION_DES_COORDONNEES_Y \
FZERO
#define FACTEUR_DES_COORDONNEES_Z \
FU
#define TRANSLATION_DES_COORDONNEES_Z \
FZERO
#define FACTEUR_DES_NIVEAUX______ \
FU
#define TRANSLATION_DES_NIVEAUX______ \
FZERO
/* Introduit le 20231104111032... */
#define DISPERSER_LES_NIVEAUX_AUX_HUIT_COINS_DES_CUBES_ELEMENTAIRES \
FAUX
#define ECRASER_LES_NIVEAUX_ANTERIEURS \
FAUX
/* Introduit le 20140101101115 afin de permettre la dispersion "interpole" de chaque niveau */ \
/* aux huit coins des cubes elementaires... */
#define CUMULER_LES_NIVEAUX \
FAUX
#define PONDERATION_CUMULER_LES_NIVEAUX_ADD2 \
FU
#define PONDERATION_CUMULER_LES_NIVEAUX_MAX2 \
FZERO
/* Introduit le 20190118112521 afin de permettre de choisir entre ranger les niveaux avec */
/* "ecrasement" ('FAUX') ou bien les cumuler ('VRAI') ? Les ponderations de choix de la */
/* methode de cumul ont des valeurs par defaut qui garantissent la compatibilite anterieure. */
#define FAIRE_UN_EPAISSISSEMENT_SPHERIQUE \
FAUX \
/* Introduit le 20120517082349 afin de permettre de choisir entre un epaississement cubique */ \
/* ('FAUX') et un epaississement spherique ('VRAI'). */
#define DEMI_PAVE_X \
ZERO
#define DEMI_PAVE_Y \
ZERO
#define DEMI_PAVE_Z \
ZERO
/* Introduit le 20120429165655 afin de pouvoir epaissir les points... */
#define DEMI_PAVE_XG \
ZERO
#define DEMI_PAVE_YG \
ZERO
#define DEMI_PAVE_ZG \
ZERO
#define DEMI_PAVE_XD \
ZERO
#define DEMI_PAVE_YD \
ZERO
#define DEMI_PAVE_ZD \
ZERO
/* Introduit le 20120430184502 afin de generaliser le processus d'epaississement symetrique */
/* precedent, sans perdre la compatibilite avec lui... */
#define FAIRE_DES_PAVES_HOMOTHETIQUES \
FAUX \
/* Introduit le 20170322095146 pour permettre de faire des paves "homothetiques", */ \
/* c'est-a-dire des paves dont la taille est fonction de '$formatI'... */
#define TESTER_LES_HORS_BORNES_NATURELLES \
FAUX \
/* Introduit le 20111113112752 pour ne pas tester les "hors bornes naturelles"... */ \
/* */ \
/* La valeur par defaut est passee de 'VRAI' a 'FAUX' le 20120417134325, depuis que */ \
/* 'SUPER_cDENORMALISE_O(...)' ont ete introduits car, en effet, ces procedures peuvent */ \
/* generer des valeurs hors bornes naturelles... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F I C H I E R S : */
/* */
/*************************************************************************************************************************************/
#include xrv/ARITHMET.1d.I"
#include xrv/ARITHMET.21.I"
#include xrv/champs_5.41.I"
#define X_IMPLICITE \
FZERO
#define Y_IMPLICITE \
FZERO
#define Z_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z);
/* Definition en memoire des fichiers de coordonnees cartesiennes. */
#define ELEMENT_DU_FICHIER_LISTE_X(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_X,index)
#define ELEMENT_DU_FICHIER_LISTE_Y(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_Y,index)
#define ELEMENT_DU_FICHIER_LISTE_Z(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_Z,index)
/* Acces a un element courant des fichiers de coordonnees cartesiennes. */
#define NIVEAU_IMPLICITE \
FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_NIVEAU,liste_initiale_des_NIVEAU);
/* Definition en memoire du fichier des niveaux... */
#define ELEMENT_DU_FICHIER_LISTE_NIVEAU(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_NIVEAU,index)
/* Acces a un element courant du fichier des niveaux... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' E P A I S S I S S E M E N T : */
/* */
/*************************************************************************************************************************************/
#define DEMI_PAVE_X_IMPLICITE \
FLOT(DEMI_PAVE_X)
#define DEMI_PAVE_Y_IMPLICITE \
FLOT(DEMI_PAVE_Y)
#define DEMI_PAVE_Z_IMPLICITE \
FLOT(DEMI_PAVE_Z)
gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_X,liste_initiale_des_DEMI_PAVE_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_Y,liste_initiale_des_DEMI_PAVE_Y);
gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_Z,liste_initiale_des_DEMI_PAVE_Z);
/* Definition en memoire des fichiers des "demi-paves" (introduits le 20160428093113). */
#define ELEMENT_DU_FICHIER_DEMI_PAVE_X(index) \
INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_X,index))
#define ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index) \
INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_Y,index))
#define ELEMENT_DU_FICHIER_DEMI_PAVE_Z(index) \
INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_Z,index))
/* Acces a un element courant des fichiers des "demi-paves" (introduits le 20160428093113). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P R O C E D U R E G E N E R A L E D E */
/* G E N E R A T I O N D ' U N A L B U M A P A R T I R D E T R O I S */
/* L I S T E S D E C O O R D O N N E E S C A R T E S I E N N E S : */
/* */
/*************************************************************************************************************************************/
#define GENERATION_D_UN_ALBUM(type_album,sequence_initialisation,sequence_de_rangement,fonction_de_rangement) \
Bblock \
BDEFV(type_album,album_d_imagesR); \
/* Definition de l'album Resultat... */ \
\
BLOC(sequence_initialisation); \
/* Initialisation de l'album Resultat. */ \
\
DoIn(index \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
,I \
) \
Bblock \
DEFV(Float,INIT(coordonnee_X_normalisee \
,AXPB(facteur_des_coordonnees_X \
,ELEMENT_DU_FICHIER_LISTE_X(index) \
,translation_des_coordonnees_X \
) \
) \
); \
DEFV(Float,INIT(coordonnee_Y_normalisee \
,AXPB(facteur_des_coordonnees_Y \
,ELEMENT_DU_FICHIER_LISTE_Y(index) \
,translation_des_coordonnees_Y \
) \
) \
); \
DEFV(Float,INIT(coordonnee_Z_normalisee \
,AXPB(facteur_des_coordonnees_Z \
,ELEMENT_DU_FICHIER_LISTE_Z(index) \
,translation_des_coordonnees_Z \
) \
) \
); \
DEFV(Float,INIT(coordonnee_X_denormalisee_precise,FLOT__UNDEF)); \
DEFV(Float,INIT(coordonnee_Y_denormalisee_precise,FLOT__UNDEF)); \
DEFV(Float,INIT(coordonnee_Z_denormalisee_precise,FLOT__UNDEF)); \
DEFV(Int,INIT(coordonnee_X_denormalisee,UNDEF)); \
DEFV(Int,INIT(coordonnee_Y_denormalisee,UNDEF)); \
DEFV(Int,INIT(coordonnee_Z_denormalisee,UNDEF)); \
/* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers. */ \
DEFV(Float,INIT(niveau_courant_normalise \
,AXPB(facteur_des_niveaux______ \
,ELEMENT_DU_FICHIER_LISTE_NIVEAU(index) \
,translation_des_niveaux______ \
) \
) \
); \
DEFV(genere_p,INIT(niveau_courant_denormalise,NIVEAU_UNDEF)); \
/* Recuperation du niveau du point courant {X,Y,Z} dans le fichier. */ \
\
DEFV(Int,INIT(demi_pave_XG_effectif \
,GRANDEURS_HOMOTHETIQUES_OX(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_X(index),demi_pave_XG) \
,faire_des_paves_homothetiques \
,INTE \
) \
) \
); \
DEFV(Int,INIT(demi_pave_YG_effectif \
,GRANDEURS_HOMOTHETIQUES_OY(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index),demi_pave_YG) \
,faire_des_paves_homothetiques \
,INTE \
) \
) \
); \
DEFV(Int,INIT(demi_pave_ZG_effectif \
,GRANDEURS_HOMOTHETIQUES_OZ(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Z(index),demi_pave_ZG) \
,faire_des_paves_homothetiques \
,INTE \
) \
) \
); \
DEFV(Int,INIT(demi_pave_XD_effectif \
,GRANDEURS_HOMOTHETIQUES_OX(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_X(index),demi_pave_XD) \
,faire_des_paves_homothetiques \
,INTE \
) \
) \
); \
DEFV(Int,INIT(demi_pave_YD_effectif \
,GRANDEURS_HOMOTHETIQUES_OY(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index),demi_pave_YD) \
,faire_des_paves_homothetiques \
,INTE \
) \
) \
); \
DEFV(Int,INIT(demi_pave_ZD_effectif \
,GRANDEURS_HOMOTHETIQUES_OZ(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Z(index),demi_pave_ZD) \
,faire_des_paves_homothetiques \
,INTE \
) \
) \
); \
\
DEFV(Float,INIT(demi_diametre_du_pave,FLOT__UNDEF)); \
EGAL(demi_diametre_du_pave \
,MIN3(FLOT(MIN2(demi_pave_XG_effectif,demi_pave_XD_effectif)) \
,FLOT(MIN2(demi_pave_YG_effectif,demi_pave_YD_effectif)) \
,FLOT(MIN2(demi_pave_ZG_effectif,demi_pave_ZD_effectif)) \
) \
); \
/* Demi-diametre du pave calcule a priori... */ \
\
EGAL(coordonnee_X_denormalisee_precise,F__cDENORMALISE_OX(SUPER_ECHELLE_OX(coordonnee_X_normalisee))); \
EGAL(coordonnee_Y_denormalisee_precise,F__cDENORMALISE_OY(SUPER_ECHELLE_OY(coordonnee_Y_normalisee))); \
EGAL(coordonnee_Z_denormalisee_precise,F__cDENORMALISE_OZ(SUPER_ECHELLE_OZ(coordonnee_Z_normalisee))); \
/* Coordonnees denormalisees precises introduites pour 'Astore_point_continu_lineaire(...)' */ \
/* et 'AstoreF_point_continu_lineaire(...)' le 20140101120415... */ \
\
EGAL(coordonnee_X_denormalisee,SUPER_cDENORMALISE_OX(coordonnee_X_normalisee)); \
EGAL(coordonnee_Y_denormalisee,SUPER_cDENORMALISE_OY(coordonnee_Y_normalisee)); \
EGAL(coordonnee_Z_denormalisee,SUPER_cDENORMALISE_OZ(coordonnee_Z_normalisee)); \
EGAL(niveau_courant_denormalise,__DENORMALISE_NIVEAU(niveau_courant_normalise)); \
/* Denormalisation des 4 informations {X,Y,Z,NIVEAU}... */ \
/* */ \
/* Le 20120417134518, '_cDENORMALISE_O?(...)' a ete remplace par 'SUPER_cDENORMALISE_O(...)' */ \
/* afin de permettre de conserver, si besoin est, les proportions... */ \
\
Test(IL_FAUT(inverser_l_axe_OZ)) \
/* Test introduit le 20120806144954... */ \
Bblock \
EGAL(coordonnee_Z_denormalisee,RENZ(coordonnee_Z_denormalisee)); \
/* Inversion eventuelle de l'axe 'OZ'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFOU(IL_NE_FAUT_PAS(tester_les_hors_bornes_naturelles) \
,IFET(IL_FAUT(tester_les_hors_bornes_naturelles) \
,IFET(TEST_DANS_L_ALBUM(coordonnee_X_denormalisee \
,coordonnee_Y_denormalisee \
,coordonnee_Z_denormalisee \
) \
,IFINff(niveau_courant_normalise \
,______________NOIR_NORMALISE \
,______________BLANC_NORMALISE \
) \
) \
) \
) \
) \
Bblock \
begin_albumQ(DoIn \
,COZA(SOUS(COZR(coordonnee_Z_denormalisee),demi_pave_ZG_effectif)) \
,COZA(ADD2(COZR(coordonnee_Z_denormalisee),demi_pave_ZD_effectif)) \
,PasZ \
,DoIn \
,COYA(SOUS(COYR(coordonnee_Y_denormalisee),demi_pave_YG_effectif)) \
,COYA(ADD2(COYR(coordonnee_Y_denormalisee),demi_pave_YD_effectif)) \
,PasY \
,DoIn \
,COXA(SOUS(COXR(coordonnee_X_denormalisee),demi_pave_XG_effectif)) \
,COXA(ADD2(COXR(coordonnee_X_denormalisee),demi_pave_XD_effectif)) \
,PasX \
) \
/* Introduit le 20120429165655 afin de pouvoir epaissir les points et generalise de facon */ \
/* potentiellement dissymetrique le 20120430184502... */ \
Bblock \
DEFV(Logical,INIT(ranger_le_niveau,VRAI)); \
/* A priori, le niveau sera range systematiquement (indicateur introduit le 20120517083301). */ \
\
Test(IL_FAUT(faire_un_epaississement_spherique)) \
/* Test introduit le 20120517083301... */ \
Bblock \
DEFV(Float,INIT(distance_au_centre_du_pave \
,RdisF3D(FLOT(coordonnee_X_denormalisee) \
,FLOT(coordonnee_Y_denormalisee) \
,FLOT(coordonnee_Z_denormalisee) \
,FLOT(X) \
,FLOT(Y) \
,FLOT(Z) \
) \
) \
); \
/* Distance au centre du pave... */ \
Test(IFLE(distance_au_centre_du_pave,demi_diametre_du_pave)) \
Bblock \
EGAL(ranger_le_niveau,VRAI); \
Eblock \
ATes \
Bblock \
EGAL(ranger_le_niveau,FAUX); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(ranger_le_niveau)) \
/* Test introduit le 20120517083301... */ \
Bblock \
BLOC(sequence_de_rangement); \
/* Rangement du point courant {X,Y,Z}... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
end_albumQ(EDoI,EDoI,EDoI) \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("l'une au moins des trois valeurs associees a un point est hors de ses bornes naturelles"); \
CAL1(Prer5("(il s'agit du point d'index %d : X=%+.^^^ Y=%+.^^^ Z=%+.^^^ niveau=%+.^^^" \
,index \
,coordonnee_X_normalisee \
,coordonnee_Y_normalisee \
,coordonnee_Z_normalisee \
,niveau_courant_normalise \
) \
); \
CAL1(Prer0(" -ces trois valeurs sont normalisees-)\n")); \
Eblock \
ETes \
Eblock \
EDoI \
\
CALi(fonction_de_rangement(nom_imageR \
,nom_postfixe \
,premiere_image \
,pas_des_images \
,album_d_imagesR \
,nombre_de_chiffres \
,FAUX \
) \
); \
\
EDEFV(type_album,album_d_imagesR); \
/* Definition de l'album Resultat... */ \
Eblock \
/* Procedure generale introduite le 20121110121036... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N A L B U M A P A R T I R D E T R O I S */
/* L I S T E S D E C O O R D O N N E E S C A R T E S I E N N E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrv/ARITHMET.22.I"
#include xci/valeurs.03.I"
DEFV(CHAR,INIT(POINTERc(nom_imageR),NOM_PIPE_Local));
/* Nom de la sequence a generer... */
DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
/* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
/* Numero de la premiere image, */
DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
/* Pas de passage d'un numero d'image a une autre. */
DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
/* Nombre de chiffres codant le numero des images de la serie... */
DEFV(Logical,INIT(inverser_l_axe_OZ,INVERSER_L_AXE_OZ));
/* Introduit le 20120806144954 afin de permettre d'inverser l'axe 'OZ' (initialement pour */
/* 'v $xiirf/FRB3.E4.2'...). */
DEFV(Float,INIT(facteur_des_coordonnees_X,FACTEUR_DES_COORDONNEES_X));
DEFV(Float,INIT(translation_des_coordonnees_X,TRANSLATION_DES_COORDONNEES_X));
DEFV(Float,INIT(facteur_des_coordonnees_Y,FACTEUR_DES_COORDONNEES_Y));
DEFV(Float,INIT(translation_des_coordonnees_Y,TRANSLATION_DES_COORDONNEES_Y));
DEFV(Float,INIT(facteur_des_coordonnees_Z,FACTEUR_DES_COORDONNEES_Z));
DEFV(Float,INIT(translation_des_coordonnees_Z,TRANSLATION_DES_COORDONNEES_Z));
DEFV(Float,INIT(facteur_des_niveaux______,FACTEUR_DES_NIVEAUX______));
DEFV(Float,INIT(translation_des_niveaux______,TRANSLATION_DES_NIVEAUX______));
/* Introduit le 20231104111032... */
DEFV(Logical,INIT(disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires
,DISPERSER_LES_NIVEAUX_AUX_HUIT_COINS_DES_CUBES_ELEMENTAIRES
)
);
DEFV(Logical,INIT(ecraser_les_niveaux_anterieurs,ECRASER_LES_NIVEAUX_ANTERIEURS));
/* Introduit le 20140101101115 afin de permettre la dispersion "interpole" de chaque niveau */
/* aux huit coins des cubes elementaires... */
DEFV(Logical,INIT(cumuler_les_niveaux,CUMULER_LES_NIVEAUX));
DEFV(Float,INIT(ponderation_cumuler_les_niveaux_ADD2,PONDERATION_CUMULER_LES_NIVEAUX_ADD2));
DEFV(Float,INIT(ponderation_cumuler_les_niveaux_MAX2,PONDERATION_CUMULER_LES_NIVEAUX_MAX2));
/* Introduit le 20190118112521 afin de permettre de choisir entre ranger les niveaux avec */
/* "ecrasement" ('FAUX') ou bien les cumuler ('VRAI') ? Les ponderations de choix de la */
/* methode de cumul ont des valeurs par defaut qui garantissent la compatibilite anterieure. */
DEFV(Logical,INIT(faire_un_epaississement_spherique,FAIRE_UN_EPAISSISSEMENT_SPHERIQUE));
/* Introduit le 20120517082349 afin de permettre de choisir entre un epaississement cubique */
/* ('FAUX') et un epaississement spherique ('VRAI'). */
DEFV(Int,INIT(demi_pave_XG,DEMI_PAVE_XG));
DEFV(Int,INIT(demi_pave_YG,DEMI_PAVE_YG));
DEFV(Int,INIT(demi_pave_ZG,DEMI_PAVE_ZG));
DEFV(Int,INIT(demi_pave_XD,DEMI_PAVE_XD));
DEFV(Int,INIT(demi_pave_YD,DEMI_PAVE_YD));
DEFV(Int,INIT(demi_pave_ZD,DEMI_PAVE_ZD));
/* Introduit le 20120430184502 afin de generaliser le processus d'epaississement symetrique */
/* precedent, sans perdre la compatibilite avec lui... */
DEFV(Logical,INIT(faire_des_paves_homothetiques,FAIRE_DES_PAVES_HOMOTHETIQUES));
/* Introduit le 20170322095146 pour permettre de faire des paves "homothetiques", */
/* c'est-a-dire des paves dont la taille est fonction de '$formatI'... */
DEFV(Logical,INIT(tester_les_hors_bornes_naturelles,TESTER_LES_HORS_BORNES_NATURELLES));
/* Introduit le 20111113112752 pour ne pas tester les "hors bornes naturelles"... */
/* */
/* La valeur par defaut est passee de 'VRAI' a 'FAUX' le 20120417134325, depuis que */
/* 'SUPER_cDENORMALISE_O(...)' ont ete introduits car, en effet, ces procedures peuvent */
/* generer des valeurs hors bornes naturelles... */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
,BLOC(VIDE;)
,BLOC(Bblock
PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
Eblock
)
);
PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;
PROKESF_ARGUMENT_FICHIER("LISTE_X="
,fichier_LISTE_X
,liste_initiale_des_X
,X_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("LISTE_Y="
,fichier_LISTE_Y
,liste_initiale_des_Y
,Y_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("LISTE_Z="
,fichier_LISTE_Z
,liste_initiale_des_Z
,Z_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("LISTE_NIVEAU="
,fichier_LISTE_NIVEAU
,liste_initiale_des_NIVEAU
,NIVEAU_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_X=""demi_pave_X=""dpX="
,fichier_LISTE_DEMI_PAVE_X
,liste_initiale_des_DEMI_PAVE_X
,DEMI_PAVE_X_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_Y=""demi_pave_Y=""dpY="
,fichier_LISTE_DEMI_PAVE_Y
,liste_initiale_des_DEMI_PAVE_Y
,DEMI_PAVE_Y_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_Z=""demi_pave_Z=""dpZ="
,fichier_LISTE_DEMI_PAVE_Z
,liste_initiale_des_DEMI_PAVE_Z
,DEMI_PAVE_Z_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("postfixe=",nom_postfixe);
GET_ARGUMENT_I("premiere=",premiere_image);
GET_ARGUMENT_I("pas=",pas_des_images);
GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
GET_ARGUMENT_L("standard=",les_images_sont_standards);
/* Argument introduit le 20121110121036... */
GET_ARGUMENT_L("inverser_Z=""inv_Z=",inverser_l_axe_OZ);
/* Arguments introduits le 20120806144954... */
GET_ARGUMENT_F("facteur_X=""fX=",facteur_des_coordonnees_X);
GET_ARGUMENT_F("translation_X=""tX=",translation_des_coordonnees_X);
GET_ARGUMENT_F("facteur_Y=""fY=",facteur_des_coordonnees_Y);
GET_ARGUMENT_F("translation_Y=""tY=",translation_des_coordonnees_Y);
GET_ARGUMENT_F("facteur_Z=""fZ=",facteur_des_coordonnees_Z);
GET_ARGUMENT_F("translation_Z=""tZ=",translation_des_coordonnees_Z);
GET_ARGUMENT_F("facteur_niveaux=""fn=",facteur_des_niveaux______);
GET_ARGUMENT_F("translation_niveaux=""tn=",translation_des_niveaux______);
/* Arguments introduits le 20231104111032... */
GET_ARGUMENT_L("disperser=",disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires);
GET_ARGUMENT_N("concentrer=",disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires);
GET_ARGUMENT_L("ecraser_niveaux=""ecraser=",ecraser_les_niveaux_anterieurs);
/* Arguments introduits le 20140101101115... */
/* */
/* Le 20190118114344, les arguments : */
/* */
/* GET_ARGUMENT_N("cumuler_niveaux=""cumuler=",ecraser_les_niveaux_anterieurs); */
/* */
/* ont ete supprimes a cause de ce qui suit... */
GET_ARGUMENT_L("cumuler_niveaux=""cumuler=""cumul=",cumuler_les_niveaux);
GET_ARGUMENT_F("cumuler_ADD2=""ADD2=",ponderation_cumuler_les_niveaux_ADD2);
GET_ARGUMENT_F("cumuler_MAX2=""MAX2=",ponderation_cumuler_les_niveaux_MAX2);
/* Argument introduit le 20190118112521 et complete le 20190116141516 par les ponderations. */
GET_ARGUMENT_L("epaississement_spherique=""espherique=""spherique=",faire_un_epaississement_spherique);
GET_ARGUMENT_N("epaississement_cubique=""ecubique=",faire_un_epaississement_spherique);
/* Arguments introduits le 20120517082349. On notera l'absence de "cubique=" par */
/* symetrie avec 'v $xrv/store_image$K ecarre='... */
GET_ARGUMENT_I("demi_pave_XG=""dpXG=",demi_pave_XG);
GET_ARGUMENT_I("demi_pave_YG=""dpYG=",demi_pave_YG);
GET_ARGUMENT_I("demi_pave_ZG=""dpZG=",demi_pave_ZG);
GET_ARGUMENT_I("demi_pave_XD=""dpXD=",demi_pave_XD);
GET_ARGUMENT_I("demi_pave_YD=""dpYD=",demi_pave_YD);
GET_ARGUMENT_I("demi_pave_ZD=""dpZD=",demi_pave_ZD);
/* Arguments introduits le 20120430184502... */
GET_ARGUMENT_L("paves_homothetiques=""ph=",faire_des_paves_homothetiques);
/* Arguments introduits le 20170322095146... */
GET_ARGUMENT_L("tester_hors_bornes_naturelles=""hors_bornes_naturelles=""hbn="
,tester_les_hors_bornes_naturelles
);
/* Argument introduit le 20111113112752... */
)
);
Test(IFET(IL_FAUT(disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires)
,IL_FAUT(cumuler_les_niveaux)
)
)
Bblock
PRINT_ATTENTION("les options de dispersion et de cumul sont incompatibles et c'est cette derniere qui l'emporte");
EGAL(disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires,FAUX);
/* Et la dispersion est inhibee... */
Eblock
ATes
Bblock
Eblock
ETes
begin_nouveau_block
Bblock
Test(EST_VRAI(les_images_sont_standards))
/* Test introduit le 20121110121036... */
Bblock
GENERATION_D_UN_ALBUM(album
,BLOC(Bblock
CALS(dAnoir(album_d_imagesR));
/* Initialisation de l'album Resultat. */
Eblock
)
,BLOC(Bblock
Test(IL_FAUT(disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires))
Bblock
Astore_point_continu_lineaire(niveau_courant_denormalise
,album_d_imagesR
,ADD2(coordonnee_X_denormalisee_precise
,FLOT(SOUS(X,Xmin_begin_ligneQ))
)
,ADD2(coordonnee_Y_denormalisee_precise
,FLOT(SOUS(Y,Ymin_begin_colonneQ))
)
,ADD2(coordonnee_Z_denormalisee_precise
,FLOT(SOUS(Z,Zmin_begin_fuiteQ))
)
,ecraser_les_niveaux_anterieurs
);
/* Possibilite introduite le 20140101101115... */
Eblock
ATes
Bblock
DEFV(genere_p,INIT(niveau_courant_denormalise_effectif,niveau_courant_denormalise));
Test(IL_FAUT(cumuler_les_niveaux))
/* Test introduit le 20190118112521... */
Bblock
DEFV(genere_p,INIT(niveau_anterieur_denormalise
,Aload_point_valide(album_d_imagesR,X,Y,Z)
)
);
EGAL(niveau_courant_denormalise_effectif
,GENP(NIVA(LIZ2(ponderation_cumuler_les_niveaux_ADD2
,FLOT(ADD2(NIVR(niveau_anterieur_denormalise)
,NIVR(niveau_courant_denormalise_effectif)
)
)
,ponderation_cumuler_les_niveaux_MAX2
,FLOT(MAX2(NIVR(niveau_anterieur_denormalise)
,NIVR(niveau_courant_denormalise_effectif)
)
)
)
)
)
);
/* On notera au passage qu'il peut y avoir ici un debordement, mais que faire d'autre que */
/* de l'accepter... */
Eblock
ATes
Bblock
Eblock
ETes
Astore_point_valide(niveau_courant_denormalise_effectif
,album_d_imagesR
,X
,Y
,Z
);
Eblock
ETes
/* Rangement du point courant {X,Y,Z}... */
Eblock
)
,dAupdate_album
);
Eblock
ATes
Bblock
GENERATION_D_UN_ALBUM(albumF
,BLOC(Bblock
CALS(dAFinitialisation(album_d_imagesR,FZERO));
/* Initialisation de l'album Resultat. */
Eblock
)
,BLOC(Bblock
Test(IL_FAUT(disperser_les_niveaux_aux_huit_coins_des_cubes_elementaires))
Bblock
AstoreF_point_continu_lineaire(niveau_courant_normalise
,album_d_imagesR
,ADD2(coordonnee_X_denormalisee_precise
,FLOT(SOUS(X,Xmin_begin_ligneQ))
)
,ADD2(coordonnee_Y_denormalisee_precise
,FLOT(SOUS(Y,Ymin_begin_colonneQ))
)
,ADD2(coordonnee_Z_denormalisee_precise
,FLOT(SOUS(Z,Zmin_begin_fuiteQ))
)
,ecraser_les_niveaux_anterieurs
);
/* Possibilite introduite le 20140101101115... */
Eblock
ATes
Bblock
DEFV(genere_Float,INIT(niveau_courant_normalise_effectif,niveau_courant_normalise));
Test(IL_FAUT(cumuler_les_niveaux))
/* Test introduit le 20190118112521... */
Bblock
DEFV(genere_Float,INIT(niveau_anterieur_normalise
,AloadF_point_valide(album_d_imagesR,X,Y,Z)
)
);
EGAL(niveau_courant_normalise_effectif
,LIZ2(ponderation_cumuler_les_niveaux_ADD2
,ADD2(niveau_anterieur_normalise,niveau_courant_normalise_effectif)
,ponderation_cumuler_les_niveaux_MAX2
,MAX2(niveau_anterieur_normalise,niveau_courant_normalise_effectif)
)
);
Eblock
ATes
Bblock
Eblock
ETes
AstoreF_point_valide(niveau_courant_normalise_effectif
,album_d_imagesR
,X
,Y
,Z
);
Eblock
ETes
/* Rangement du point courant {X,Y,Z}... */
Eblock
)
,dAupdateF_album
);
Eblock
ETes
Eblock
end_nouveau_block
lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_Z,DEMI_PAVE_Z_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_Y,DEMI_PAVE_Y_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_X,DEMI_PAVE_X_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_NIVEAU,NIVEAU_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE);
RETU_Commande;
Eblock
ECommande