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