/*************************************************************************************************************************************/
/* */
/* G R O U P A G E D E S P O I N T S P A R P A Q U E T S */
/* R E C T A N G U L A I R E S / P A R A L L E L E P I P E D I Q U E S : */
/* */
/* */
/* Author of '$xrv/groupage.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20230219102232). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
#define MINIMUM_X \
FZERO
#define MAXIMUM_X \
FU
#define NOMBRE_DE_PAQUETS_X \
UN
/* Caracteristiques de l'axe 'OX'... */
#define MINIMUM_Y \
FZERO
#define MAXIMUM_Y \
FU
#define NOMBRE_DE_PAQUETS_Y \
UN
/* Caracteristiques de l'axe 'OY'... */
#define MINIMUM_Z \
FZERO
#define MAXIMUM_Z \
FU
#define NOMBRE_DE_PAQUETS_Z \
UN
/* Caracteristiques de l'axe 'OZ'... */
#define SEPARATEUR_DES_PAQUETS \
SEPARATEUR_DE_LISTES_DE_COORDONNEES \
/* Separateur des paquets... */
#define NORMALISER \
FAUX
#define X_MINIMUM_NOUVEAU \
COORDONNEE_BARYCENTRIQUE_MINIMALE
#define X_MAXIMUM_NOUVEAU \
COORDONNEE_BARYCENTRIQUE_MAXIMALE
#define X_IGNORER_L_UNIFORMITE_DU_FICHER \
VRAI
#define X_VALEUR_A_FORCER_DANS_LE_CAS_DE_L_UNIFORMITE_DU_FICHER \
COORDONNEE_BARYCENTRIQUE_CENTRALE
#define X_CONSERVER_UNE_VALEUR_PARTICULIERE \
FAUX
#define X_VALEUR_PARTICULIERE_A_CONSERVER \
FZERO
#define Y_MINIMUM_NOUVEAU \
COORDONNEE_BARYCENTRIQUE_MINIMALE
#define Y_MAXIMUM_NOUVEAU \
COORDONNEE_BARYCENTRIQUE_MAXIMALE
#define Y_IGNORER_L_UNIFORMITE_DU_FICHER \
VRAI
#define Y_VALEUR_A_FORCER_DANS_LE_CAS_DE_L_UNIFORMITE_DU_FICHER \
COORDONNEE_BARYCENTRIQUE_CENTRALE
#define Y_CONSERVER_UNE_VALEUR_PARTICULIERE \
FAUX
#define Y_VALEUR_PARTICULIERE_A_CONSERVER \
FZERO
#define Z_MINIMUM_NOUVEAU \
COORDONNEE_BARYCENTRIQUE_MINIMALE
#define Z_MAXIMUM_NOUVEAU \
COORDONNEE_BARYCENTRIQUE_MAXIMALE
#define Z_IGNORER_L_UNIFORMITE_DU_FICHER \
VRAI
#define Z_VALEUR_A_FORCER_DANS_LE_CAS_DE_L_UNIFORMITE_DU_FICHER \
COORDONNEE_BARYCENTRIQUE_CENTRALE
#define Z_CONSERVER_UNE_VALEUR_PARTICULIERE \
FAUX
#define Z_VALEUR_PARTICULIERE_A_CONSERVER \
FZERO
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define DIMENSION_X \
DIVZ(SOUS(maximum_X,minimum_X),nombre_de_paquets_X)
#define DIMENSION_Y \
DIVZ(SOUS(maximum_Y,minimum_Y),nombre_de_paquets_Y)
#define DIMENSION_Z \
DIVZ(SOUS(maximum_Z,minimum_Z),nombre_de_paquets_Z)
#define RECHERCHE_LOCALE_DES_EXTREMA(sequence) \
Bblock \
DoIn(index \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
,I \
) \
Bblock \
DEFV(Float,INIT(coordonnee_X,ELEMENT_DU_FICHIER_LISTE_X(index))); \
DEFV(Float,INIT(coordonnee_Y,ELEMENT_DU_FICHIER_LISTE_Y(index))); \
DEFV(Float,INIT(coordonnee_Z,ELEMENT_DU_FICHIER_LISTE_Z(index))); \
/* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers. */ \
\
Test(I3ET(IFINff(coordonnee_X,origine_X,extremite_X) \
,IFINff(coordonnee_Y,origine_Y,extremite_Y) \
,IFINff(coordonnee_Z,origine_Z,extremite_Z) \
) \
) \
Bblock \
BLOC(sequence); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
EDoI \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G R O U P A G E D E S P O I N T S P A R P A Q U E T S */
/* R E C T A N G U L A I R E S / P A R A L L E L E P I P E D I Q U E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrv/ARITHMET.22.I"
DEFV(Float,INIT(minimum_X,MINIMUM_X));
DEFV(Float,INIT(maximum_X,MAXIMUM_X));
DEFV(Int,INIT(nombre_de_paquets_X,NOMBRE_DE_PAQUETS_X));
/* Caracteristiques de l'axe 'OX'... */
DEFV(Float,INIT(minimum_Y,MINIMUM_Y));
DEFV(Float,INIT(maximum_Y,MAXIMUM_Y));
DEFV(Int,INIT(nombre_de_paquets_Y,NOMBRE_DE_PAQUETS_Y));
/* Caracteristiques de l'axe 'OY'... */
DEFV(Float,INIT(minimum_Z,MINIMUM_Z));
DEFV(Float,INIT(maximum_Z,MAXIMUM_Z));
DEFV(Int,INIT(nombre_de_paquets_Z,NOMBRE_DE_PAQUETS_Z));
/* Caracteristiques de l'axe 'OZ'... */
DEFV(Float,INIT(separateur_des_paquets,SEPARATEUR_DES_PAQUETS));
/* Separateur des paquets... */
DEFV(Logical,INIT(normaliser,NORMALISER));
DEFV(Float,INIT(X_minimum_nouveau,X_MINIMUM_NOUVEAU));
DEFV(Float,INIT(X_maximum_nouveau,X_MAXIMUM_NOUVEAU));
DEFV(Float,INIT(X_minimum_courant,F_INFINI));
DEFV(Float,INIT(X_maximum_courant,F_MOINS_L_INFINI));
DEFV(Logical,INIT(X_ignorer_l_uniformite_du_ficher,X_IGNORER_L_UNIFORMITE_DU_FICHER));
DEFV(Float,INIT(X_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher,X_VALEUR_A_FORCER_DANS_LE_CAS_DE_L_UNIFORMITE_DU_FICHER));
DEFV(Logical,INIT(X_conserver_une_valeur_particuliere,X_CONSERVER_UNE_VALEUR_PARTICULIERE));
DEFV(Float,INIT(X_valeur_particuliere_a_conserver,X_VALEUR_PARTICULIERE_A_CONSERVER));
DEFV(Float,INIT(Y_minimum_nouveau,Y_MINIMUM_NOUVEAU));
DEFV(Float,INIT(Y_maximum_nouveau,Y_MAXIMUM_NOUVEAU));
DEFV(Float,INIT(Y_minimum_courant,F_INFINI));
DEFV(Float,INIT(Y_maximum_courant,F_MOINS_L_INFINI));
DEFV(Logical,INIT(Y_ignorer_l_uniformite_du_ficher,Y_IGNORER_L_UNIFORMITE_DU_FICHER));
DEFV(Float,INIT(Y_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher,Y_VALEUR_A_FORCER_DANS_LE_CAS_DE_L_UNIFORMITE_DU_FICHER));
DEFV(Logical,INIT(Y_conserver_une_valeur_particuliere,Y_CONSERVER_UNE_VALEUR_PARTICULIERE));
DEFV(Float,INIT(Y_valeur_particuliere_a_conserver,Y_VALEUR_PARTICULIERE_A_CONSERVER));
DEFV(Float,INIT(Z_minimum_nouveau,Z_MINIMUM_NOUVEAU));
DEFV(Float,INIT(Z_maximum_nouveau,Z_MAXIMUM_NOUVEAU));
DEFV(Float,INIT(Z_minimum_courant,F_INFINI));
DEFV(Float,INIT(Z_maximum_courant,F_MOINS_L_INFINI));
DEFV(Logical,INIT(Z_ignorer_l_uniformite_du_ficher,Z_IGNORER_L_UNIFORMITE_DU_FICHER));
DEFV(Float,INIT(Z_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher,Z_VALEUR_A_FORCER_DANS_LE_CAS_DE_L_UNIFORMITE_DU_FICHER));
DEFV(Logical,INIT(Z_conserver_une_valeur_particuliere,Z_CONSERVER_UNE_VALEUR_PARTICULIERE));
DEFV(Float,INIT(Z_valeur_particuliere_a_conserver,Z_VALEUR_PARTICULIERE_A_CONSERVER));
/*..............................................................................................................................*/
GET_ARGUMENTS_(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
);
GET_ARGUMENT_F("minimumX=""mX=",minimum_X);
GET_ARGUMENT_F("maximumX=""MX=",maximum_X);
GET_ARGUMENT_I("paquetsX=""npX=",nombre_de_paquets_X);
GET_ARGUMENT_F("minimumY=""mY=",minimum_Y);
GET_ARGUMENT_F("maximumY=""MY=",maximum_Y);
GET_ARGUMENT_I("paquetsY=""npY=",nombre_de_paquets_Y);
GET_ARGUMENT_F("minimumZ=""mZ=",minimum_Z);
GET_ARGUMENT_F("maximumZ=""MZ=",maximum_Z);
GET_ARGUMENT_I("paquetsZ=""npZ=",nombre_de_paquets_Z);
GET_ARGUMENT_F("separateur=""sep=",separateur_des_paquets);
GET_ARGUMENT_L("normaliser=",normaliser);
GET_ARGUMENT_F("Xminimum=""Xm=""XmR=""Xorigine=",X_minimum_nouveau);
GET_ARGUMENT_F("Xmaximum=""XM=""XMR=""Xextremite=",X_maximum_nouveau);
GET_ARGUMENT_L("Xignorer_uniformite=""Xiu=",X_ignorer_l_uniformite_du_ficher);
GET_ARGUMENT_F("Xvaleur_uniforme=""Xvu=",X_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher);
GET_ARGUMENT_L("Xconserver_valeur=""Xcv=",X_conserver_une_valeur_particuliere);
GET_ARGUMENT_F("Xvaleur_a_conserver=""Xvac=",X_valeur_particuliere_a_conserver);
GET_ARGUMENT_F("Yminimum=""Ym=""YmR=""Yorigine=",Y_minimum_nouveau);
GET_ARGUMENT_F("Ymaximum=""YM=""YMR=""Yextremite=",Y_maximum_nouveau);
GET_ARGUMENT_L("Yignorer_uniformite=""Yiu=",Y_ignorer_l_uniformite_du_ficher);
GET_ARGUMENT_F("Yvaleur_uniforme=""Yvu=",Y_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher);
GET_ARGUMENT_L("Yconserver_valeur=""Ycv=",Y_conserver_une_valeur_particuliere);
GET_ARGUMENT_F("Yvaleur_a_conserver=""Yvac=",Y_valeur_particuliere_a_conserver);
GET_ARGUMENT_F("Zminimum=""Zm=""ZmR=""Zorigine=",Z_minimum_nouveau);
GET_ARGUMENT_F("Zmaximum=""ZM=""ZMR=""Zextremite=",Z_maximum_nouveau);
GET_ARGUMENT_L("Zignorer_uniformite=""Ziu=",Z_ignorer_l_uniformite_du_ficher);
GET_ARGUMENT_F("Zvaleur_uniforme=""Zvu=",Z_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher);
GET_ARGUMENT_L("Zconserver_valeur=""Zcv=",Z_conserver_une_valeur_particuliere);
GET_ARGUMENT_F("Zvaleur_a_conserver=""Zvac=",Z_valeur_particuliere_a_conserver);
)
);
#include xrv/normalise.01.I"
/* Ceci fut introduit le 20230220112811... */
begin_nouveau_block
Bblock
Repe(nombre_de_paquets_X)
Bblock
DEFV(Float,INIT(origine_X
,ADD2(minimum_X
,MUL2(SOUS(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)
,DIMENSION_X
)
)
)
);
DEFV(Float,INIT(extremite_X,FLOT__UNDEF));
/* Definition en 'X' du rectangle/parallelepipede courant... */
EGAL(extremite_X,ADD2(origine_X,DIMENSION_X));
Repe(nombre_de_paquets_Y)
Bblock
DEFV(Float,INIT(origine_Y
,ADD2(minimum_Y
,MUL2(SOUS(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)
,DIMENSION_Y
)
)
)
);
DEFV(Float,INIT(extremite_Y,FLOT__UNDEF));
/* Definition en 'Y' du rectangle/parallelepipede courant... */
EGAL(extremite_Y,ADD2(origine_Y,DIMENSION_Y));
Repe(nombre_de_paquets_Z)
Bblock
DEFV(Int,INIT(compteur_de_points_dans_le_paquet_courant,ZERO));
DEFV(Float,INIT(origine_Z
,ADD2(minimum_Z
,MUL2(SOUS(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)
,DIMENSION_Z
)
)
)
);
DEFV(Float,INIT(extremite_Z,FLOT__UNDEF));
/* Definition en 'Z' du rectangle/parallelepipede courant... */
EGAL(extremite_Z,ADD2(origine_Z,DIMENSION_Z));
Test(IL_FAUT(normaliser))
Bblock
EGAL(X_minimum_courant,F_INFINI);
EGAL(X_maximum_courant,F_MOINS_L_INFINI);
EGAL(Y_minimum_courant,F_INFINI);
EGAL(Y_maximum_courant,F_MOINS_L_INFINI);
EGAL(Z_minimum_courant,F_INFINI);
EGAL(Z_maximum_courant,F_MOINS_L_INFINI);
RECHERCHE_LOCALE_DES_EXTREMA(BLOC(Bblock
RECHERCHE_COURANTE_DES_EXTREMA(coordonnee_X
,FAUX
,X_minimum_courant
,X_maximum_courant
,X_conserver_une_valeur_particuliere
,X_valeur_particuliere_a_conserver
);
RECHERCHE_COURANTE_DES_EXTREMA(coordonnee_Y
,FAUX
,Y_minimum_courant
,Y_maximum_courant
,Y_conserver_une_valeur_particuliere
,Y_valeur_particuliere_a_conserver
);
RECHERCHE_COURANTE_DES_EXTREMA(coordonnee_Z
,FAUX
,Z_minimum_courant
,Z_maximum_courant
,Z_conserver_une_valeur_particuliere
,Z_valeur_particuliere_a_conserver
);
Eblock
)
);
Eblock
ATes
Bblock
Eblock
ETes
#define X_valeur_a_forcer \
X_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher
#define Y_valeur_a_forcer \
Y_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher
#define Z_valeur_a_forcer \
Z_valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher
/* Afin de raccourcir les lignes qui suivent... */
RECHERCHE_LOCALE_DES_EXTREMA(BLOC(Bblock
CAL2(Prin3("X=%+.^^^ Y=%+.^^^ Z=%+.^^^\n"
,NORMALISATION_D_UNE_VALEUR(coordonnee_X
,normaliser
,X_ignorer_l_uniformite_du_ficher
,X_valeur_a_forcer
,X_conserver_une_valeur_particuliere
,X_valeur_particuliere_a_conserver
,X_minimum_courant,X_maximum_courant
,X_minimum_nouveau,X_maximum_nouveau
,FAUX
)
,NORMALISATION_D_UNE_VALEUR(coordonnee_Y
,normaliser
,Y_ignorer_l_uniformite_du_ficher
,Y_valeur_a_forcer
,Y_conserver_une_valeur_particuliere
,Y_valeur_particuliere_a_conserver
,Y_minimum_courant,Y_maximum_courant
,Y_minimum_nouveau,Y_maximum_nouveau
,FAUX
)
,NORMALISATION_D_UNE_VALEUR(coordonnee_Z
,normaliser
,Z_ignorer_l_uniformite_du_ficher
,Z_valeur_a_forcer
,Z_conserver_une_valeur_particuliere
,Z_valeur_particuliere_a_conserver
,Z_minimum_courant,Z_maximum_courant
,Z_minimum_nouveau,Z_maximum_nouveau
,FAUX
)
)
);
INCR(compteur_de_points_dans_le_paquet_courant,I);
Eblock
)
);
#undef Z_valeur_a_forcer
#undef Y_valeur_a_forcer
#undef X_valeur_a_forcer
Test(IZGT(compteur_de_points_dans_le_paquet_courant))
Bblock
CAL2(Prin3("X=%+.^^^ Y=%+.^^^ Z=%+.^^^\n"
,separateur_des_paquets
,separateur_des_paquets
,separateur_des_paquets
)
);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ERep
Eblock
ERep
Eblock
ERep
Eblock
end_nouveau_block
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