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