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