/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S U P P R E S S I O N   D E   S E G M E N T S   " P E N D A N T S "  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/SupPendants.11$K' :                                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20150803092009).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   RECHERCHER_LES_SEGMENTS_PENDANTS                                                                                              \
                    VRAI                                                                                                                \
                                        /* Doit-on rechercher les segments pendants ('VRAI') ou pas ('FAUX') ce qui permet alors un  */
                                        /* comportement neutre.                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   S_Xorg_IMPLICITE                                                                                                              \
                    FZERO
#define   S_Yorg_IMPLICITE                                                                                                              \
                    FZERO
#define   S_Zorg_IMPLICITE                                                                                                              \
                    FZERO

#define   S_Xext_IMPLICITE                                                                                                              \
                    FZERO
#define   S_Yext_IMPLICITE                                                                                                              \
                    FZERO
#define   S_Zext_IMPLICITE                                                                                                              \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_S_Xorg,liste_initiale_des_S_Xorg);
gGENERATION_D_UN_FICHIER(fichier_LISTE_S_Yorg,liste_initiale_des_S_Yorg);
gGENERATION_D_UN_FICHIER(fichier_LISTE_S_Zorg,liste_initiale_des_S_Zorg);

gGENERATION_D_UN_FICHIER(fichier_LISTE_S_Xext,liste_initiale_des_S_Xext);
gGENERATION_D_UN_FICHIER(fichier_LISTE_S_Yext,liste_initiale_des_S_Yext);
gGENERATION_D_UN_FICHIER(fichier_LISTE_S_Zext,liste_initiale_des_S_Zext);
                                        /* Definition en memoire des fichiers de coordonnees cartesiennes du segment '1'.            */

#define   ELEMENT_DU_FICHIER_LISTE_S_Xorg(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_S_Xorg,index)
#define   ELEMENT_DU_FICHIER_LISTE_S_Yorg(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_S_Yorg,index)
#define   ELEMENT_DU_FICHIER_LISTE_S_Zorg(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_S_Zorg,index)

#define   ELEMENT_DU_FICHIER_LISTE_S_Xext(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_S_Xext,index)
#define   ELEMENT_DU_FICHIER_LISTE_S_Yext(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_S_Yext,index)
#define   ELEMENT_DU_FICHIER_LISTE_S_Zext(index)                                                                                        \
                    gELEMENT_DU_FICHIER(liste_initiale_des_S_Zext,index)
                                        /* Acces a un element courant des fichiers de coordonnees cartesiennes du segment '1'.       */

#define   CONSERVER                                                                                                                     \
                    FLOT(VRAI)
#define   SUPPRIMER                                                                                                                     \
                    NOTL(CONSERVER)
#define   CONSERVER_IMPLICITE                                                                                                           \
                    CONSERVER

gGENERATION_D_UN_FICHIER(fichier_segments_a_conserver,liste_initiale_des_segments_a_conserver);

#define   ELEMENT_DU_FICHIER_SEGMENTS_A_CONSERVER(index)                                                                                \
                    gELEMENT_DU_FICHIER(liste_initiale_des_segments_a_conserver,index)
                                        /* Acces a un element courant du fichier donnant les segments a conserver.                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S U P P R E S S I O N   D E   S E G M E N T S   " P E N D A N T S "  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(rechercher_les_segments_pendants,RECHERCHER_LES_SEGMENTS_PENDANTS));
                                        /* Doit-on rechercher les segments pendants ('VRAI') ou pas ('FAUX') ce qui permet alors un  */
                                        /* comportement neutre.                                                                      */

#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"

     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_S_Xorg="
                                                 ,fichier_LISTE_S_Xorg
                                                 ,liste_initiale_des_S_Xorg
                                                 ,S_Xorg_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_S_Yorg="
                                                 ,fichier_LISTE_S_Yorg
                                                 ,liste_initiale_des_S_Yorg
                                                 ,S_Yorg_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_S_Zorg="
                                                 ,fichier_LISTE_S_Zorg
                                                 ,liste_initiale_des_S_Zorg
                                                 ,S_Zorg_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("LISTE_S_Xext="
                                                 ,fichier_LISTE_S_Xext
                                                 ,liste_initiale_des_S_Xext
                                                 ,S_Xext_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_S_Yext="
                                                 ,fichier_LISTE_S_Yext
                                                 ,liste_initiale_des_S_Yext
                                                 ,S_Yext_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_S_Zext="
                                                 ,fichier_LISTE_S_Zext
                                                 ,liste_initiale_des_S_Zext
                                                 ,S_Zext_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_L("segments_pendants=""inter=",rechercher_les_segments_pendants);
                         GET_ARGUMENT_N("neutre=",rechercher_les_segments_pendants);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;

                         GET_ARGUMENT_I("exemplaires=",nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes);
                         )
                    );

     iGENERATION_D_UN_FICHIER(liste_initiale_des_segments_a_conserver,CONSERVER_IMPLICITE);

     begin_nouveau_block
          Bblock
          DEFV(Logical,INIT(iterer_recursivement_les_suppressions,IL_FAUT(rechercher_les_segments_pendants)));
          DEFV(Int,INIT(compteur_de_suppressions,UNDEF));
                                        /* Controle des iterations...                                                                */
          DEFV(Int,INIT(indexS1,UNDEF));
                                        /* Index des segments 'S1'.                                                                  */

          Tant(IL_FAUT(iterer_recursivement_les_suppressions))
               Bblock
               EGAL(compteur_de_suppressions,ZERO);

               DoIn(indexS1,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
                    Bblock
                    DEFV(Int,INIT(indexS2,UNDEF));
                                        /* Index des segments 'S2'.                                                                  */
                    DEFV(Positive,INIT(compteur_d_occurence_de_l_origine___d_un_segmentS1,ZERO));
                    DEFV(Positive,INIT(compteur_d_occurence_de_l_extremite_d_un_segmentS1,ZERO));
                                        /* Compteur d'occurence de l'une des extremites du segment 'S1'.                             */

                    Test(EST_VRAI(ELEMENT_DU_FICHIER_SEGMENTS_A_CONSERVER(indexS1)))
                         Bblock
                         DoIn(indexS2,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
                                        /* On notera le 20150804103218, que l'on ne peut pas optimiser le 'DoIn(...)' ci-dessus en   */
                                        /* remplacant 'PREMIER_ELEMENT_D_UN_FICHIER' par 'SUCC(indexS1)' a cause du test relatif a   */
                                        /* 'ELEMENT_DU_FICHIER_SEGMENTS_A_CONSERVER(indexS2)' ci-dessous...                          */
                              Bblock
                              Test(IFNE(indexS2,indexS1))
                                   Bblock
                                   Test(EST_VRAI(ELEMENT_DU_FICHIER_SEGMENTS_A_CONSERVER(indexS2)))
                                        Bblock
                                        Test(IFOU(IFEQ_Rpoints3D(ELEMENT_DU_FICHIER_LISTE_S_Xorg(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yorg(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zorg(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Xorg(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yorg(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zorg(indexS2)
                                                                 )
                                                 ,IFEQ_Rpoints3D(ELEMENT_DU_FICHIER_LISTE_S_Xorg(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yorg(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zorg(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Xext(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yext(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zext(indexS2)
                                                                 )
                                                  )
                                             )
                                             Bblock
                                             INCR(compteur_d_occurence_de_l_origine___d_un_segmentS1,I);
                                        /* L'origine du segment 'S1' est utilisee ailleurs par un segment 'S2' (different            */
                                        /* de 'S1' evidemment...).                                                                   */
                                             Eblock
                                        ATes
                                             Bblock
                                             Eblock
                                        ETes

                                        Test(IFOU(IFEQ_Rpoints3D(ELEMENT_DU_FICHIER_LISTE_S_Xext(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yext(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zext(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Xorg(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yorg(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zorg(indexS2)
                                                                 )
                                                 ,IFEQ_Rpoints3D(ELEMENT_DU_FICHIER_LISTE_S_Xext(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yext(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zext(indexS1)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Xext(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Yext(indexS2)
                                                                ,ELEMENT_DU_FICHIER_LISTE_S_Zext(indexS2)
                                                                 )
                                                  )
                                             )
                                             Bblock
                                             INCR(compteur_d_occurence_de_l_extremite_d_un_segmentS1,I);
                                        /* L'extremite du segment 'S1' est utilisee ailleurs par un segment 'S2' (different          */
                                        /* de 'S1' evidemment...).                                                                   */
                                             Eblock
                                        ATes
                                             Bblock
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         EDoI

                         Test(IFOU(IZEQ(compteur_d_occurence_de_l_origine___d_un_segmentS1)
                                  ,IZEQ(compteur_d_occurence_de_l_extremite_d_un_segmentS1)
                                   )
                              )
                              Bblock
                              EGAL(ELEMENT_DU_FICHIER_SEGMENTS_A_CONSERVER(indexS1),SUPPRIMER);
                              INCR(compteur_de_suppressions,I);
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               EDoI

               Test(IZEQ(compteur_de_suppressions))
                    Bblock
                    EGAL(iterer_recursivement_les_suppressions,FAUX);
                                        /* Lorsqu'aucun segment n'a ete supprime, on arrete le processus...                          */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ETan

          DoIn(indexS1,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
               Bblock
               Test(IFEQ(ELEMENT_DU_FICHIER_SEGMENTS_A_CONSERVER(indexS1),CONSERVER))
                    Bblock
                    CAL2(Prin0(" X1="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_S_Xorg(indexS1));
                    CAL2(Prin0(" Y1="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_S_Yorg(indexS1));
                    CAL2(Prin0(" Z1="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_S_Zorg(indexS1));
                    CAL2(Prin0(" X2="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_S_Xext(indexS1));
                    CAL2(Prin0(" Y2="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_S_Yext(indexS1));
                    CAL2(Prin0(" Z2="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_S_Zext(indexS1));

                    CAL2(Prin0("\n"));
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          EDoI
          Eblock
     end_nouveau_block

     lGENERATION_D_UN_FICHIER(liste_initiale_des_segments_a_conserver,CONSERVER_IMPLICITE);

     lGENERATION_D_UN_FICHIER(liste_initiale_des_S_Zext,S_Zext_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_S_Yext,S_Yext_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_S_Xext,S_Xext_IMPLICITE);

     lGENERATION_D_UN_FICHIER(liste_initiale_des_S_Zorg,S_Zorg_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_S_Yorg,S_Yorg_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_S_Xorg,S_Xorg_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.