/*************************************************************************************************************************************/
/* */
/* T R A C E D U S I G L E D U " C M A P " ( E N C O U L E U R S ) : */
/* */
/* */
/* Definition des couleurs utilisees : */
/* */
/* */
/* + */
/* + . . + */
/* L11 . . L14 */
/* + . . + */
/* + L13 L13 + */
/* | + . . + | */
/* | + + | */
/* | . L12 L12 . | */
/* L11 . + . L14 */
/* | . | . | */
/* | . | . | */
/* |. | .| */
/* + L12 */
/* + | */
/* L11 | */
/* + | */
/* + */
/* */
/* */
/* (ou 'L1X' signifie 'L_SUBSTITUTION_1X'). */
/* */
/* */
/* Author of '$xrd/CMAP.02$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1991??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define SUBSTITUTION_C \
L_SUBSTITUTION_11 \
/* Definition de la liste de substitution du 'C', */
#define SUBSTITUTION_M \
L_SUBSTITUTION_12 \
/* Definition de la liste de substitution du 'M', */
#define SUBSTITUTION_A \
L_SUBSTITUTION_13 \
/* Definition de la liste de substitution du 'A', */
#define SUBSTITUTION_P \
L_SUBSTITUTION_14 \
/* Definition de la liste de substitution du 'P', */
#define COTE \
DEUX \
/* Definition du nombre d'unites sur un cote. */
#define G1 \
Bblock \
DO(COTE \
,BLOC(g1;) \
); \
Eblock
#define G2 \
Bblock \
DO(COTE \
,BLOC(g2;) \
); \
Eblock
#define G3 \
Bblock \
DO(COTE \
,BLOC(g3;) \
); \
Eblock
#define G4 \
Bblock \
DO(COTE \
,BLOC(g4;) \
); \
Eblock
#define G5 \
Bblock \
DO(COTE \
,BLOC(g5;) \
); \
Eblock
#define G6 \
Bblock \
DO(COTE \
,BLOC(g6;) \
); \
Eblock
#define GENERE_SIGLE(taux_de_depth_cueing) \
Bblock \
DEFV(Float,INIT(Z_minimum,FLOT__UNDEF)); \
DEFV(Float,INIT(Z_maximum,FLOT__UNDEF)); \
/* Pour le "depth-cueing". */ \
CALS(Iinit_Z_Buffer()); \
SET_ANTI_ALIASING(VRAI); \
SET_COULEURS(NOIR,BLANC); \
INITIALISATION_SYSTEMATIQUE_TRANSFORMATION; \
\
SKH(8); \
/* Definition de l'echelle globale. */ \
SXH(8); \
/* Definition de l'echelle sur l'axe des 'X'. */ \
SYH(8); \
/* Definition de l'echelle sur l'axe des 'Y'. */ \
SZH(8); \
/* Definition de l'echelle sur l'axe des 'Z'. */ \
PUSH_ANTI_ALIASING; \
/* Juste pour valider le couple (PUSH,PULL). */ \
\
SET_CURSOR(_____cNORMALISE_OX(INTE(DIVI(FXcentre_____,super_echelle_OX))) \
,_____cNORMALISE_OY(INTE(DIVI(FYcentre_____,super_echelle_OY))) \
,_____cNORMALISE_OZ(Zcentre) \
); \
/* On se place au centre de l'ecran. */ \
TRX(FRA4(PI)); \
TRY(FRA4(PI)); \
/* Positionnement du cube dans l'espace. */ \
PULL_ANTI_ALIASING; \
/* Juste pour valider le couple (PUSH,PULL). */ \
SKH(echelle_globale); \
/* Changement de l'echelle globale. */ \
DO(COTE \
,BLOC(g4;) \
); \
/* Afin de placer le centre du cube au centre de l'ecran. ATTENTION, pendant longtemps, */ \
/* j'ai utilise 'MOIT(COTE)' a la place de 'COTE' ci-dessus... */ \
\
CALS(FgMIC()); \
EGAL(Z_maximum,ASD1(vecteurs_____cursor_3D,z)); \
G6; \
EGAL(Z_minimum,ASD1(vecteurs_____cursor_3D,z)); \
SET_DEPTH_CUEING(taux_de_depth_cueing,Z_minimum,Z_maximum); \
/* Pour le "depth-cueing". */ \
CALS(FgMOC()); \
gA;G1;gA; \
SUBSTITUTION(SUBSTITUTION_P); \
gA;G2;gB; \
SUBSTITUTION(SUBSTITUTION_M); \
gA;G3;gB; \
SUBSTITUTION(SUBSTITUTION_M); \
gA;G4;gB; \
/* Premiere face du cube. */ \
SUBSTITUTION(SUBSTITUTION_C); \
gA;G6;gB; \
/* Premiere arete. */ \
gA;G1;gA; \
gA;G2;gA; \
SUBSTITUTION(SUBSTITUTION_C); \
gA;G3;gB; \
SUBSTITUTION(SUBSTITUTION_C); \
gA;G4;gB; \
/* Deuxieme face du cube. */ \
G1;gA;CALS(FgMIC());G5;gA;CALS(FgMOC()); \
/* Deuxieme arete. */ \
SUBSTITUTION(SUBSTITUTION_P); \
G2;gA;CALS(FgMIC());G5;gB;CALS(FgMOC()); \
/* Troisieme arete. */ \
SUBSTITUTION(SUBSTITUTION_M); \
G3;gA;CALS(FgMIC());G5;gB;CALS(FgMOC()); \
/* Quatrieme arete. */ \
SUBSTITUTION(SUBSTITUTION_A); \
G4;gA;CALS(FgMIC());G1;G2;gB;G4;G5;gB;CALS(FgMOC()); \
/* Et enfin trace des deux pseudo-diagonales. */ \
G5;gA; \
\
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define ECHELLE_GLOBALE \
FLOT(DOUZE) \
/* Echelle globale... */
#define MEMORISER_LE_Z_BUFFER \
FAUX \
/* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie */ \
/* apres le calcul ('FAUX'). */
#define TAUX_DE_DEPTH_CUEING \
DEPTH_CUEING_MOYEN \
/* Definition du taux de depth-cueing... */
#define DECALAGE_ANGULAIRE_POUR_LA_STEREOSCOPIE \
DECALAGE_ANGULAIRE_POUR_UNE_VISION_CYCLOPIQUE \
/* Valeur implicite du facteur de rotation de l'observateur permettant ainsi de creer */ \
/* des paires stereoscopiques... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T R A C E D U S I G L E D U " C M A P " : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageZ),NOM_PIPE));
DEFV(Logical,INIT(memoriser_le_Z_Buffer,MEMORISER_LE_Z_BUFFER));
/* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie */
/* apres le calcul ('FAUX'). */
DEFV(Float,INIT(echelle_globale,ECHELLE_GLOBALE));
/* Echelle globale... */
DEFV(Float,INIT(taux_de_depth_cueing,DEPTH_CUEING_MOYEN));
/* Definition du taux de depth-cueing. Une valeur de '0.80' donne de bons resultats. */
DEFV(Float,INIT(decalage_angulaire_pour_la_stereoscopie,DECALAGE_ANGULAIRE_POUR_LA_STEREOSCOPIE));
/* Facteur de rotation de l'observateur pour la creation de paires stereoscopiques. On se */
/* souviendra que : */
/* */
/* decalage > 0 : oeil droit, */
/* decalage < 0 : oeil gauche, */
/* */
/* la valeur '+/-0.04' donnant de bons resultats... */
/*..............................................................................................................................*/
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
,SX_SY_SZ_____compatibilite_20070416
);
/* Parametre introduit le 20070416161354... */
GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420="
,Ipoint_anti_aliase_segment_____compatibilite_20110420
);
/* Parametre introduit le 20110420145348... */
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ);
GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer);
GET_ARGUMENT_F("echelle=",echelle_globale);
GET_ARGUMENT_F("taux=""depth-cueing=",taux_de_depth_cueing);
GET_ARGUMENT_F("stereo=",decalage_angulaire_pour_la_stereoscopie);
GET_ARGUMENT_F("eloignement=",Projection_OX_OY_____facteur_d_eloignement_en_Z_de_l_observateur);
)
);
SUPER_ECHELLE_PETIT_CARRE;
/* Choix du format des figures obtenues : */
/* */
/* SUPER_ECHELLE_RECTANGULAIRE; */
/* SUPER_ECHELLE_PETIT_CARRE; */
/* SUPER_ECHELLE_GRAND_CARRE; */
/* */
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
CALS(FgERASE());
/* Clear... */
SET_DECALAGE_ANGULAIRE_DE_L_OBSERVATEUR(decalage_angulaire_pour_la_stereoscopie);
/* Initialisation du facteur de rotation de l'observateur permettant ainsi de creer */
/* des paires stereoscopiques... */
SET_FILTRAGE(ACTIF);
GENERE_SIGLE(taux_de_depth_cueing);
SET_FILTRAGE(INACTIF);
/* Generation du sigle... */
CALS(Imove(ImageR,ImageG));
CALi(Iupdate_image(nom_imageR,ImageR));
Test(IL_FAUT(memoriser_le_Z_Buffer))
Bblock
CALS(Ifloat_std_du_Z_Buffer(ImageA));
/* Conversion du 'Z-Buffer' en une image "standard"... */
CALi(Iupdate_image(nom_imageZ,ImageA));
Eblock
ATes
Bblock
Eblock
ETes
RETU_Commande;
Eblock
ECommande