/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A C E   D ' U N E   E T O I L E   D E G R A D E E  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une image                                                                                */
/*                  dont le nom est l'argument d'appel,                                                                              */
/*                  et qui contient une etoile degradee                                                                              */
/*                  de centre (X_CENTRE,Y_CENTRE).                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    On notera le cas particulier :                                                                                 */
/*                                                                                                                                   */
/*                                      $xci/etoile$X       couleur=$BLANC pas=+1 ...                                                */
/*                                                                                                                                   */
/*                  qui donne une moire car, en effet, apres                                                                         */
/*                  chaque incrementation du niveau par                                                                              */
/*                  'INCR(niveau,pas_des_couleurs)' le test                                                                          */
/*                  d'inversion du pas 'pas_des_couleurs' est                                                                        */
/*                  toujours vrai, et on oscille donc entre                                                                          */
/*                  '$BLANC' et '$BLANC+1' (c'est-a-dire '$NOIR').                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/etoile.01$K' :                                                                                             */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1987??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   X_CENTRE                                                                                                                      \
                    Xcentre
#define   Y_CENTRE                                                                                                                      \
                    Ycentre
#define   Z_CENTRE                                                                                                                      \
                    Zorigine
                                        /* Definition du centre de l'etoile...                                                       */

#define   NUMERO_DE_COULEURS                                                                                                            \
                    NOIR                                                                                                                \
                                        /* Premiere couleur a utiliser...                                                            */
#define   PAS_DES_COULEURS                                                                                                              \
                    PAS_COULEURS                                                                                                        \
                                        /* Pas implicite de passage d'une couleur a l'autre.                                         */

#define   ANTI_ALIASER                                                                                                                  \
                    FAUX                                                                                                                \
                                        /* Faut-il ('VRAI') ou pas ('FAUX') anti-aliaser les vecteurs ?                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CHANGEMENT_DES_COULEURS(niveau)                                                                                               \
                    Bblock                                                                                                              \
                    Test(IZEQ(pas_des_couleurs))                                                                                        \
                         Bblock                                                                                                         \
                         INCR(niveau,PAS_COULEURS);                                                                                     \
                                        /* Avec un pas nul, on incremente betement...                                                */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         INCR(niveau,pas_des_couleurs);                                                                                 \
                                        /* Avec un pas non nul, on incremente et on decremente alternativement.                      */ \
                         Test(IFOU(IFLE(niveau,NOIR),IFGE(niveau,BLANC)))                                                               \
                                        /* ATTENTION, il y avait autrefois :                                                         */ \
                                        /*                                                                                           */ \
                                        /*                  Test(IFOU(IFEQ(niveau,NOIR),IFEQ(niveau,BLANC)))                         */ \
                                        /*                                                                                           */ \
                              Bblock                                                                                                    \
                              EGAL(pas_des_couleurs,NEGA(pas_des_couleurs));                                                            \
                                        /* On change le sens de parcours a chaque extremum du niveau.                                */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   E T O I L E   D E G R A D E E  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(Int,INIT(index,UNDEF));
                                        /* Index de generation.                                                                      */
     DEFV(Float,INIT(numero_de_couleurs,NUMERO_DE_COULEURS));
                                        /* Numero de la couleur courante...                                                          */
     DEFV(Int,INIT(pas_des_couleurs,PAS_DES_COULEURS));
                                        /* Pas des couleurs...                                                                       */
     DEFV(Logical,INIT(anti_aliaser,ANTI_ALIASER));
                                        /* Faut-il ('VRAI') ou pas ('FAUX') anti-aliaser les vecteurs ?                              */
     /*..............................................................................................................................*/
     GET_ARGUMENTSg(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
                                       ,SX_SY_SZ_____compatibilite_20070416
                                        );
                                        /* Parametre introduit le 20070416160519...                                                  */
                         GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420="
                                       ,Ipoint_anti_aliase_segment_____compatibilite_20110420
                                        );
                                        /* Parametre introduit le 20110420144751...                                                  */

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_F("couleur=",numero_de_couleurs);
                         GET_ARGUMENT_I("pas=",pas_des_couleurs);
                         GET_ARGUMENT_L("anti_aliaser=",anti_aliaser);
                         )
                    );

     CALi(FgERASE());

     SET_ANTI_ALIASING(anti_aliaser);

     SK(INTER_POINT);
     SX(pasX);
     SY(pasY);
     SZ(INTER_POINT);
     SET_CURSOR(_____cNORMALISE_OX(X_CENTRE),_____cNORMALISE_OY(Y_CENTRE),_____cNORMALISE_OZ(Z_CENTRE));

     gA;
                                        /* On place le centre de l'etoile au centre.                                                 */
     CALS(FgPO());
                                        /* Puis, on revient a l'origine.                                                             */

     DoIn(index,Xmin,Xmax,pasX)
          Bblock
          SET_COULEURS(NOIR,NIVA(REST(INTE(numero_de_couleurs),COULEURS)));
          CHANGEMENT_DES_COULEURS(numero_de_couleurs);
          CALS(FgPS());
                                        /* On joint au centre,                                                                       */
          g1;
                                        /* Et on se deplace au bord de l'image.                                                      */
          Eblock
     EDoI

     DoIn(index,Ymin,Ymax,pasY)
          Bblock
          SET_COULEURS(NOIR,NIVA(REST(INTE(numero_de_couleurs),COULEURS)));
          CHANGEMENT_DES_COULEURS(numero_de_couleurs);
          CALS(FgPS());
                                        /* On joint au centre,                                                                       */
          g2;
                                        /* Et on se deplace au bord de l'image.                                                      */
          Eblock
     EDoI

     DoIn(index,Xmin,Xmax,pasX)
          Bblock
          SET_COULEURS(NOIR,NIVA(REST(INTE(numero_de_couleurs),COULEURS)));
          CHANGEMENT_DES_COULEURS(numero_de_couleurs);
          CALS(FgPS());
                                        /* On joint au centre,                                                                       */
          g3;
                                        /* Et on se deplace au bord de l'image.                                                      */
          Eblock
     EDoI

     DoIn(index,Ymin,Ymax,pasY)
          Bblock
          SET_COULEURS(NOIR,NIVA(REST(INTE(numero_de_couleurs),COULEURS)));
          CHANGEMENT_DES_COULEURS(numero_de_couleurs);
          CALS(FgPS());
                                        /* On joint au centre,                                                                       */
          g4;
                                        /* Et on se deplace au bord de l'image.                                                      */
          Eblock
     EDoI

     CALi(Iupdate_image(nom_imageR,ImageG));

     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.