/*************************************************************************************************************************************/
/* */
/* T R A C E D U S P E C T R E : */
/* */
/* */
/* Definition du polygone "Spectre" (en notant une */
/* symetrie d'axe OY par rapport a 'v $xrd/spectre.11$K') : */
/* */
/* C */
/* .---------# */
/* | 08 \ */
/* | \ */
/* | 07 09 \ */
/* | \ */
/* . . */
/* / \ */
/* / \ */
/* / 06 10 \ */
/* / \ */
/* . . */
/* \ / */
/* \ 05 11 / */
/* \ / */
/* \ / */
/* . . */
/* / \ */
/* / 04 \ */
/* / 12 \ */
/* . \ D */
/* \ 03 /\ # */
/* \ 02 / \ | */
/* \ / \ 01 13 | */
/* #/ \ | */
/* B \ | */
/* \ 00 | */
/* #--------- */
/* A */
/* */
/* .---------. */
/* | 28 \ */
/* | \ */
/* | 27 29 \ */
/* | \ */
/* . . */
/* / \ */
/* / \ */
/* / 26 30 \ */
/* / \ */
/* . . */
/* \ / */
/* \ 25 31 / */
/* \ / */
/* \ / */
/* . . */
/* / \ */
/* / 24 \ */
/* / 32 \ */
/* . \ */
/* \ 23 /\ . */
/* \ 22 / \ | */
/* \ / \ 21 33 | */
/* \/ \ | */
/* \ | */
/* \ 20 | */
/* --------- */
/* */
/* */
/* Les numeros correspondent aux numeros des Contextes Graphiques */
/* contenant l'ORIGINE de chaque segment definissant a un cote */
/* et les lettres {A,B,C,D,A} au "squelette" du "Spectre"... */
/* */
/* */
/* Definition des neuf hexagones et de leurs appariements */
/* destinee a une generation plus algorithmique (inutilisee */
/* a la date du 20230903120530...) : */
/* */
/* */
/* G : {0=m1,1=m4,2=p4,3=m7,4=m8,5=p1} */
/* */
/* D : {0=m6,1=p7,2=p1,3=m2,4=p4,5=m7} */
/* */
/* J : {0=m1,1=p7,2=p1,3=p5,4=p1,5=n3} */
/* */
/* L : {0=m1,1=p7,2=p1,3=m2,4=p4,5=m5} */
/* */
/* X : {0=m1,1=m4,2=p2,3=p5,4=p1,5=n3} */
/* */
/* P : {0=m1,1=m4,2=p2,3=m2,4=p4,5=m5} */
/* */
/* S : {0=p8,1=p6,2=p1,3=m2,4=p4,5=m7} */
/* */
/* F : {0=m1,1=p7,2=p1,3=m2,4=p2,5=n3} */
/* */
/* Y : {0=m1,1=m4,2=p2,3=m2,4=p2,5=n3} */
/* */
/* */
/* ou {0,1,2,3,4,5} sont les numeros des six cotes */
/* de chaque hexagone et '[pmn][12345678]' les "clefs" */
/* d'appariements suivant : */
/* */
/* p1 <--> m1 */
/* */
/* p2 <--> m2 */
/* */
/* n3 <--> n3 */
/* */
/* p4 <--> m4 */
/* */
/* p5 <--> m5 */
/* */
/* p6 <--> m6 */
/* */
/* p7 <--> m7 */
/* */
/* p8 <--> m8 */
/* */
/* */
/* Author of '$xrd/spectre.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20230710132711). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
#define NO_DEFINE_____premiers_entiers_naturels
/* Et ce a cause des collisions avec 'nom_des_CONTEXTES_0' ci-apres... */
#include INCLUDES_BASE
#include image_image_CONTOURS_EXT
#include image_image_ALPHABET_0_EXT
#include image_image_ALPHABET_1_EXT
#include image_image_ALPHABET_2_EXT
#include image_image_ALPHABET_3_EXT
#include image_image_ALPHABET_4_EXT
#include image_image_ALPHABET_5_EXT
#include image_image_ALPHABETS_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S C O N T E X T E S G R A P H I Q U E S D E F I N I S S A N T */
/* L ' O R I G I N E D E C H A Q U E S E G M E N T / C O T E D E S " S P E C T R E S " ; */
/* */
/*************************************************************************************************************************************/
#define SOMMET_DE_REFERENCE \
00
Denumer18(INIS(_00,INDEX0)
,_01
,_02
,_03
,_04
,_05
,_06
,_07
,_08
,_09
,_10
,_11
,_12
,_13
,_14
,_15
,_16
,_17
,nom_des_CONTEXTES_0
);
/* Nota : un nombre entier decimal ne peut commencer par un "0" sous peine d'etre traite */
/* comme un nombre octal avec donc un probleme pour "08" et "09". Dans ce cas, les */
/* contextes {01,02,...,12,13} sont donc definis sur un chiffre pour {01,02,...,08,09} */
/* et sur deux chiffres pour {10,11,12,13} et ce via 'Denumer14(....)'... */
Denumer18(INIS(_20,20)
,_21
,_22
,_23
,_24
,_25
,_26
,_27
,_28
,_29
,_30
,_31
,_32
,_33
,_34
,_35
,_36
,_37
,nom_des_CONTEXTES_2
);
/* Pour les contextes {20,21,...,32,33} il n'y a pas de differences entre l'acces direct */
/* et l'acces indexe en ce qui concerne les numeros qui sont sur deux chiffres et qui de */
/* de plus ne peuvent pas commencer par un "0"... */
#define ACCES_CONTEXTE_D(numero) \
vecteurs_____Gcon`numero
#define ACCES_CONTEXTE_I(numero) \
ITb0(INDIRECT(liste_des_____vecteurs_____Gcon),numero) \
/* Cas de l'acces indexe aux differents contextes graphiques... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S A N G L E S : */
/* */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Float,INIT(pi_sur_2,PI_SUR_2)));
DEFV(Local,DEFV(Float,INIT(pi_sur_3,PI_SUR_3)));
DEFV(Local,DEFV(Float,INIT(pi_sur_6,PI_SUR_6)));
/* Introduit le 20230822142040 pour voir... */
#define _Rzero \
T_ROTATION_Z(FZERO)
#define PRpis2 \
T_ROTATION_Z(NEUT(pi_sur_2))
#define MRpis2 \
T_ROTATION_Z(NEGA(pi_sur_2))
#define PRpis3 \
T_ROTATION_Z(NEUT(pi_sur_3))
#define MRpis3 \
T_ROTATION_Z(NEGA(pi_sur_3))
#define P0pis6 \
NEUT(GRO0(UN))
#define M0pis6 \
NEGA(GRO0(UN))
#define P1pis6 \
NEUT(GRO1(UN))
#define M1pis6 \
NEGA(GRO1(UN))
#define P2pis6 \
NEUT(GRO2(UN))
#define M2pis6 \
NEGA(GRO2(UN))
#define P3pis6 \
NEUT(GRO3(UN))
#define M3pis6 \
NEGA(GRO3(UN))
#define P4pis6 \
NEUT(GRO4(UN))
#define M4pis6 \
NEGA(GRO4(UN))
#define P5pis6 \
NEUT(GRO5(UN))
#define M5pis6 \
NEGA(GRO5(UN))
#define P6pis6 \
NEUT(GRO6(UN))
#define M6pis6 \
NEGA(GRO6(UN))
#define MINIMUM_pis6 \
M6pis6
#define MAXIMUM_pis6 \
P6pis6
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P O U R F A C I L I T E R L A D E T E R M I N A T I O N D E S A N G L E S E T D E S C O N T E X T E S : */
/* */
/*************************************************************************************************************************************/
#define NUMEROTER_LES_COTES \
VRAI
#define NE_PAS_NUMEROTER_LES_COTES \
NOTL(NUMEROTER_LES_COTES)
DEFV(Local,DEFV(Logical,INIT(numeroter_les_cotes,NE_PAS_NUMEROTER_LES_COTES)));
DEFV(Local,DEFV(Int,INIT(nombre_de_chiffres_des_numeros_des_cotes,DEUX)));
DEFV(Local,DEFV(Int,INIT(taille_des_caracteres_des_numeros_des_cotes,UN)));
/* Pour numeroter les cotes des spectres utiles... */
#define ANGLE_DE_ROTATION(rotation) \
MUL2(FLOT(rotation),pi_sur_6)
#define ANGLE_D_INCLINAISON \
ANGLE_DE_ROTATION(angle_d_inclinaison)
DEFV(Local,DEFV(Int,INIT(angle_d_inclinaison,P0pis6)));
/* Pour trouver experimentalement l'inclinaison d'un spectre. Il s'agit de l'argument */
/* 'rotation' de la procedure 'NOUVEAU_SPECTRE_2(...)' en multiple de pi/6... */
DEFV(Local,DEFV(Int,INIT(contexte_0,_00)));
DEFV(Local,DEFV(Int,INIT(contexte_2,_20)));
/* Pour trouver experimentalement les contextes de reference (0) et nouveau (2)... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S T R A C E S G R A P H I Q U E S : */
/* */
/*************************************************************************************************************************************/
#define Zcentre_normalise \
_____cNORMALISE_OZ(Zcentre)
#define COTE \
QUATRE \
/* Definition du nombre d'unites sur un cote. */
#define G3 \
Bblock \
DO(COTE \
,BLOC(g3;) \
); \
Eblock
#define ECHELLES \
UN
#define NUMEROTER_SEGMENT(numeroter,numero,numero_minimal,numero_maximal,niveau_numeros_cotes,inverser_les_numeros) \
Bblock \
Test(IL_FAUT(numeroter)) \
Bblock \
DEFV(Int,INIT(numero_1,PRED(numero))); \
DEFV(Int,INIT(numero_2,MODU(numero,numero_minimal,numero_maximal))); \
DEFV(Int,INIT(numero_effectif \
,COND(IL_FAUT(inverser_les_numeros) \
,COND(IFGE(numero,_20) \
,SOUS(numero,_20) \
,ADD2(numero,_20) \
) \
,numero \
) \
) \
); \
\
CALS(FgMIC()); \
\
SET_CURSOR(NEUT(MOYE(ASD2(ACCES_CONTEXTE_I(numero_1),vecteurs_____cursor_3D,x) \
,ASD2(ACCES_CONTEXTE_I(numero_2),vecteurs_____cursor_3D,x) \
) \
) \
,NEUT(MOYE(ASD2(ACCES_CONTEXTE_I(numero_1),vecteurs_____cursor_3D,y) \
,ASD2(ACCES_CONTEXTE_I(numero_2),vecteurs_____cursor_3D,y) \
) \
) \
,ADD2(MOYE(ASD2(ACCES_CONTEXTE_I(numero_1),vecteurs_____cursor_3D,z) \
,ASD2(ACCES_CONTEXTE_I(numero_2),vecteurs_____cursor_3D,z) \
) \
,tgEPSILON \
) \
); \
/* Le decalage de la coordonnee 'Z' est destine a garantir que les numeros apparaitront */ \
/* bien au premier plan. On notera au passage que les "Spectres" sont traces deux fois */ \
/* (voir 'fGENERE_SPECTRE_2(...)' appele deux fois dans 'NOUVEAU_SPECTRE_2(...)'). */ \
/* */ \
/* On notera de plus que ce decalage rapprochant les chiffres de l'observateur a pour effet */ \
/* un tres leger zoom sur ces derniers... */ \
\
EGAL(Imessage_____facteur_scale_globale,GRO2(FRA4(FU))); \
CALS(Imessage(chain_numero(PRED(numero_effectif),nombre_de_chiffres_des_numeros_des_cotes) \
,Inoir_____NOIR \
,niveau_numeros_cotes \
,taille_des_caracteres_des_numeros_des_cotes \
,FAUX \
) \
); \
\
CALS(FgMOC()); \
\
gA; \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#define MEMORISER_LE_CONTEXTE \
VRAI
#define NE_PAS_MEMORISER_LE_CONTEXTE \
NOTL(MEMORISER_LE_CONTEXTE)
#define MARQUER_LE_CENTRE_DE_GRAVITE \
VRAI
#define NE_PAS_MARQUER_LE_CENTRE_DE_GRAVITE \
NOTL(MARQUER_LE_CENTRE_DE_GRAVITE)
DEFV(Local,DEFV(Logical,INIT(marquer_le_centre_de_gravite,NE_PAS_MARQUER_LE_CENTRE_DE_GRAVITE)));
DEFV(Local,DEFV(Int,INIT(nombre_de_segments,ZERO)));
DEFV(Local,DEFV(pointF_3D,centre_de_gravite));
#define GENERE_SEGMENT(memoriser,numero,numero_minimal,numero_maximal,rotation,numeroter,niveau_numeros_cotes,inverser_les_numeros) \
/* L'argument 'memoriser' introduit le 20230712111906 permet de tracer le "Spectre" avec */ \
/* ou sans memorisation (via 'WCG(...)') de la definition... */ \
Bblock \
rotation; \
\
Test(IL_FAUT(memoriser)) \
Bblock \
WCG(ACCES_CONTEXTE_I(numero)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
G3;gB; \
\
Test(IL_FAUT(marquer_le_centre_de_gravite)) \
Bblock \
INCR(ASD1(centre_de_gravite,x),ASD2(ACCES_CONTEXTE_I(numero),vecteurs_____cursor_3D,x)); \
INCR(ASD1(centre_de_gravite,y),ASD2(ACCES_CONTEXTE_I(numero),vecteurs_____cursor_3D,y)); \
INCR(ASD1(centre_de_gravite,z),ASD2(ACCES_CONTEXTE_I(numero),vecteurs_____cursor_3D,z)); \
INCR(nombre_de_segments,I); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
NUMEROTER_SEGMENT(numeroter,numero,numero_minimal,numero_maximal,niveau_numeros_cotes,inverser_les_numeros); \
Eblock
#define MARQUER_LES_SQUELETTES \
VRAI
#define NE_PAS_MARQUER_LES_SQUELETTES \
NOTL(MARQUER_LES_SQUELETTES)
DEFV(Local,DEFV(Logical,INIT(marquer_les_squelettes,NE_PAS_MARQUER_LES_SQUELETTES)));
#define NIVEAU_DE_TRACE_DES_SQUELETTES \
GRIS_2
DEFV(Local,DEFV(genere_p,INIT(niveau_de_trace_des_squelettes,NIVEAU_DE_TRACE_DES_SQUELETTES)));
/* Possibilite introduite le 20230905111750... */
#define GENERE_SPECTRE_n(memoriser \
,co_00,co_01,co_02,co_03,co_04,co_05,co_06,co_07,co_08,co_09,co_10,co_11,co_12,co_13,co_14,co_15,co_16,co_17 \
,numeroter \
,niv,inverser_les_numeros \
) \
Bblock \
gA; \
/* Debut de la definition du "Spectre" general. */ \
\
Test(I3ET(EST_AUTORISE(vecteurs_____etat_trace) \
,EST_FAUX(niveau_de_trace_incremental) \
,EST_VRAI(niveau_de_trace_visualisant_la_rotation) \
) \
) \
Bblock \
DEFV(Int,INIT(niveau_visualisant_la_rotation \
,MODU(COND(EST_FAUX(niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation) \
,AXPB(facteur_____du_niveau_de_trace_visualisant_la_rotation \
,NEUT(rotation_definissant_eventuellement_le_niveau) \
,translation_du_niveau_de_trace_visualisant_la_rotation \
) \
,AXPB(facteur_____du_niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation \
,ABSO(rotation_definissant_eventuellement_le_niveau) \
,translation_du_niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation \
) \
) \
,NOIR_PLANCHER \
,BLANC \
) \
) \
); \
EGAL(niveau_de_trace,GENP(niveau_visualisant_la_rotation)); \
/* La possibilite de visualiser la rotation a ete introduite le 20230823095847... */ \
\
SET_COULEURS(NOIR,niveau_de_trace); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(marquer_le_centre_de_gravite)) \
Bblock \
CLIR(nombre_de_segments); \
INITIALISATION_POINT_3D(centre_de_gravite,FZERO,FZERO,FZERO); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
GENERE_SEGMENT(memoriser \
,co_00,co_00,co_13 \
,_Rzero \
,NE_PAS_NUMEROTER_LES_COTES,niveau_numeros_cotes,inverser_les_numeros \
); \
/* Le premier numero ('co_00') ne peut apparaitre que lors de la definition du second */ \
/* segment... */ \
WCG(ACCES_CONTEXTE_I(co_14)); \
GENERE_SEGMENT(memoriser,co_01,co_00,co_13,MRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_02,co_00,co_13,PRpis2,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
WCG(ACCES_CONTEXTE_I(co_15)); \
GENERE_SEGMENT(memoriser,co_03,co_00,co_13,MRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_04,co_00,co_13,MRpis2,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_05,co_00,co_13,PRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_06,co_00,co_13,MRpis2,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_07,co_00,co_13,PRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_08,co_00,co_13,MRpis2,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
WCG(ACCES_CONTEXTE_I(co_16)); \
GENERE_SEGMENT(memoriser,co_09,co_00,co_13,MRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_10,co_00,co_13,_Rzero,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_11,co_00,co_13,MRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
GENERE_SEGMENT(memoriser,co_12,co_00,co_13,PRpis2,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
WCG(ACCES_CONTEXTE_I(co_17)); \
GENERE_SEGMENT(memoriser,co_13,co_00,co_13,MRpis3,numeroter,niveau_numeros_cotes,inverser_les_numeros); \
/* Fin de la definition du "Spectre" general. */ \
\
NUMEROTER_SEGMENT(numeroter,SUCC(co_13),co_00,co_13,niveau_numeros_cotes,inverser_les_numeros); \
/* L'eventuel dernier numerotage est particulier puisque le sommet 'SUCC(co_13)' n'existe */ \
/* pas (c'est en fait 'co_00'...). */ \
\
Test(EST_AUTORISE(vecteurs_____etat_trace)) \
Bblock \
Test(IL_FAUT(marquer_les_squelettes)) \
/* Possibilite introduite le 20230905111750... */ \
Bblock \
CALS(FgMIC()); \
CALS(FgMIN()); \
\
RCG(ACCES_CONTEXTE_I(co_14)); \
gA; \
RCG(ACCES_CONTEXTE_I(co_15)); \
SET_COULEURS(NOIR,niveau_de_trace_des_squelettes); \
gB; \
RCG(ACCES_CONTEXTE_I(co_16)); \
SET_COULEURS(NOIR,niveau_de_trace_des_squelettes); \
gB; \
RCG(ACCES_CONTEXTE_I(co_17)); \
SET_COULEURS(NOIR,niveau_de_trace_des_squelettes); \
gB; \
RCG(ACCES_CONTEXTE_I(co_14)); \
SET_COULEURS(NOIR,niveau_de_trace_des_squelettes); \
gB; \
\
CALS(FgMON()); \
CALS(FgMOC()); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(marquer_le_centre_de_gravite)) \
Bblock \
EGAL(ASD1(centre_de_gravite,x),DIVI(ASD1(centre_de_gravite,x),FLOT(nombre_de_segments))); \
EGAL(ASD1(centre_de_gravite,y),DIVI(ASD1(centre_de_gravite,y),FLOT(nombre_de_segments))); \
EGAL(ASD1(centre_de_gravite,z),DIVI(ASD1(centre_de_gravite,z),FLOT(nombre_de_segments))); \
\
CALS(FgMIC()); \
\
SET_CURSOR(ASD1(centre_de_gravite,x) \
,ASD1(centre_de_gravite,y) \
,ASD1(centre_de_gravite,z) \
); \
\
gA; \
gB; \
/* Marquage du centre de gravite (introduit le 20230826124358)... */ \
\
CALS(FgMOC()); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(I3ET(EST_AUTORISE(vecteurs_____etat_trace) \
,EST_VRAI(niveau_de_trace_incremental) \
,EST_FAUX(niveau_de_trace_visualisant_la_rotation) \
) \
) \
Bblock \
DEFV(Int,INIT(niveau_incremente,MODU(ADD2(INTE(niveau_de_trace),PAS_COULEURS),NOIR_PLANCHER,BLANC))); \
EGAL(niveau_de_trace,GENP(niveau_incremente)); \
/* La possibilite d'incrementer 'niveau_de_trace' a chaque trace a ete introduite le */ \
/* 20230821080500... */ \
\
SET_COULEURS(NOIR,niveau_de_trace); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#define ROTATION_INITIALE \
Bblock \
INITIALISATION_SYSTEMATIQUE_TRANSFORMATION; \
\
Test(IL_FAUT(faire_une_rotation_initiale)) \
Bblock \
TRZ(GRO3(PI_SUR_4)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#define GENERE_SPECTRE_0(memoriser,niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros) \
Bblock \
SET_COULEURS(NOIR,niveau); \
GENERE_SPECTRE_n(memoriser \
,_00,_01,_02,_03,_04,_05,_06,_07,_08,_09,_10,_11,_12,_13,_14,_15,_16,_17 \
,numeroter,niveau_numeros_cotes,inverser_les_numeros \
); \
/* Definition du "Spectre" 0. */ \
\
INCR(nombre_de_spectres_traces,I); \
/* On notera que 'GENERE_SPECTRE_0(...)' est toujours execute (ce qui fait qu'on trace */ \
/* toujours au moins un "Spectre", le "Spectre" 0...), contrairement aux suivants via */ \
/* 'NOUVEAU_SPECTRE_2(...)' qui permet de n'en tracer que 1,2,3,... */ \
Eblock
#define GENERE_SPECTRE_2(memoriser,numeroter,niveau_numeros_cotes,inverser_les_numeros) \
Bblock \
GENERE_SPECTRE_n(memoriser \
,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37 \
,numeroter,niveau_numeros_cotes,inverser_les_numeros \
); \
/* Definition du "Spectre" 2. */ \
Eblock
#define TRANSLATION_CURSOR(contexteD,contexteA) \
Bblock \
SET_CURSOR(ADD2(ASD1(vecteurs_____cursor_3D,x) \
,SOUS(ASD2(ACCES_CONTEXTE_I(contexteA),vecteurs_____cursor_3D,x) \
,ASD2(ACCES_CONTEXTE_I(contexteD),vecteurs_____cursor_3D,x) \
) \
) \
,ADD2(ASD1(vecteurs_____cursor_3D,y) \
,SOUS(ASD2(ACCES_CONTEXTE_I(contexteA),vecteurs_____cursor_3D,y) \
,ASD2(ACCES_CONTEXTE_I(contexteD),vecteurs_____cursor_3D,y) \
) \
) \
,Zcentre_normalise \
); \
Eblock
#define NOUVEAU_SPECTRE_2_1(rotation,numeroter,niveau_numeros_cotes,inverser_les_numeros) \
Bblock \
RCG(ACCES_CONTEXTE_D(SOMMET_DE_REFERENCE)); \
ROTATION_INITIALE; \
TRZ(ANGLE_DE_ROTATION(rotation)); \
\
SET_TRACE(INTERDIT); \
CALS(fGENERE_SPECTRE_2(MEMORISER_LE_CONTEXTE,numeroter,niveau_numeros_cotes,inverser_les_numeros)); \
/* Pourquoi ne peut-on pas supprimer ce 'GENERE_SPECTRE_2(VRAI)' identique strictement */ \
/* a celui qui suit un peu plus bas ? Le 20230731093733, je note que la difference entre */ \
/* les deux est la presence de 'TRANSLATION_CURSOR(...)' entre eux... */ \
\
RCG(ACCES_CONTEXTE_D(SOMMET_DE_REFERENCE)); \
ROTATION_INITIALE; \
TRZ(ANGLE_DE_ROTATION(rotation)); \
Eblock
#define NOUVEAU_SPECTRE_2_2(niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros) \
Bblock \
SET_TRACE(AUTORISE); \
SET_COULEURS(NOIR,niveau); \
CALS(fGENERE_SPECTRE_2(MEMORISER_LE_CONTEXTE,numeroter,niveau_numeros_cotes,inverser_les_numeros)); \
Eblock
DEFV(Local,DEFV(Int,INIT(rotation_definissant_eventuellement_le_niveau,P0pis6)));
/* Initialisation a priori sur le premier spectre 'GENERE_SPECTRE_0(...)'. */
#define DEPLACER__0_2 \
VRAI
#define NE_PAS_DEPLACER__0_2 \
NOTL(DEPLACER__0_2)
#define NOUVEAU_SPECTRE_2(deplacer__0_2,niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros,rotation,contexteA,contexteD) \
Bblock \
Test(IFLT(nombre_de_spectres_traces,nombre_maximal_de_spectres)) \
/* Contrairement a 'GENERE_SPECTRE_0(...)' qui est inconditionnel, 'NOUVEAU_SPECTRE_2(...)' */ \
/* est conditionnel ce qui permet de ne tracer que 1,2,3,... "Spectre"s... */ \
Bblock \
EGAL(rotation_definissant_eventuellement_le_niveau,rotation); \
/* Au cas ou... */ \
\
Test(IL_FAUT(deplacer__0_2)) \
Bblock \
CALS(fMOVE_SPECTRE_0_2()); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
CALS(fNOUVEAU_SPECTRE_2_1(rotation,NE_PAS_NUMEROTER_LES_COTES,niveau_numeros_cotes,inverser_les_numeros)); \
\
TRANSLATION_CURSOR(contexteD,contexteA); \
\
CALS(fNOUVEAU_SPECTRE_2_2(niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros)); \
\
INCR(nombre_de_spectres_traces,I); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#define MOVE_SPECTRE_0_2 \
Bblock \
MCG(vecteurs_____Gcon_00,vecteurs_____Gcon_20); \
MCG(vecteurs_____Gcon_01,vecteurs_____Gcon_21); \
MCG(vecteurs_____Gcon_02,vecteurs_____Gcon_22); \
MCG(vecteurs_____Gcon_03,vecteurs_____Gcon_23); \
MCG(vecteurs_____Gcon_04,vecteurs_____Gcon_24); \
MCG(vecteurs_____Gcon_05,vecteurs_____Gcon_25); \
MCG(vecteurs_____Gcon_06,vecteurs_____Gcon_26); \
MCG(vecteurs_____Gcon_07,vecteurs_____Gcon_27); \
MCG(vecteurs_____Gcon_08,vecteurs_____Gcon_28); \
MCG(vecteurs_____Gcon_09,vecteurs_____Gcon_29); \
MCG(vecteurs_____Gcon_10,vecteurs_____Gcon_30); \
MCG(vecteurs_____Gcon_11,vecteurs_____Gcon_31); \
MCG(vecteurs_____Gcon_12,vecteurs_____Gcon_32); \
MCG(vecteurs_____Gcon_13,vecteurs_____Gcon_33); \
Eblock
#define AIDES_DIVERSES_APRES_LE_TRACE \
Bblock \
Test(IL_FAUT(editer_les_mises_a_jour_a_effectuer)) \
Bblock \
CAL3(Prme4("\n\nclear%c;%csaut%c;%c$xrd/spectre.01$Z '",K_BLANC,K_BLANC,K_BLANC,K_BLANC)); \
CAL3(Prme2(",%c%1dpis6",COND(IZGE(angle_d_inclinaison),K_P,K_M),ABSO(angle_d_inclinaison))); \
CAL3(Prme2(",%c%02d",K_UNDERSCORE,contexte_0)); \
CAL3(Prme2(",%c%02d",K_UNDERSCORE,contexte_2)); \
CAL3(Prme2("' |& $EGRE ' reference | xrd$| cl '%c;%csaut\n\n",K_BLANC,K_BLANC)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(editer_le_nombre_de_spectres_traces)) \
Bblock \
CAL3(Prme1("NombreSpectres=%d\n",nombre_de_spectres_traces)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(trace_un_cadre_carre)) \
Bblock \
DEFV(Float,INIT(moyenne_des_extrema_Z \
,MOYE(DRAW_____minimum_Z__trace_AUTORISE,DRAW_____maximum_Z__trace_AUTORISE) \
) \
); \
\
Test(IFNE_a_peu_pres_absolu(moyenne_des_extrema_Z,Zcentre_normalise,tgEPSILON)) \
Bblock \
PRINT_ATTENTION("il y a un probleme avec la coordonnee 'Z'"); \
CAL1(Prer2("(la moyenne des extrema vaut %+.^^^ alors qu'elle devrait valoir %+.^^^)\n" \
,moyenne_des_extrema_Z \
,Zcentre_normalise \
) \
); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
SET_COULEURS(NOIR,niveau_du_cadre); \
\
SET_CURSOR(DRAW_____minimum_X__trace_AUTORISE \
,DRAW_____minimum_Y__trace_AUTORISE \
,moyenne_des_extrema_Z \
); \
gA; \
\
SET_CURSOR(DRAW_____maximum_X__trace_AUTORISE \
,DRAW_____minimum_Y__trace_AUTORISE \
,moyenne_des_extrema_Z \
); \
gB; \
\
SET_CURSOR(DRAW_____maximum_X__trace_AUTORISE \
,DRAW_____maximum_Y__trace_AUTORISE \
,moyenne_des_extrema_Z \
); \
gB; \
\
SET_CURSOR(DRAW_____minimum_X__trace_AUTORISE \
,DRAW_____maximum_Y__trace_AUTORISE \
,moyenne_des_extrema_Z \
); \
gB; \
\
SET_CURSOR(DRAW_____minimum_X__trace_AUTORISE \
,DRAW_____minimum_Y__trace_AUTORISE \
,moyenne_des_extrema_Z \
); \
gB; \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define COMPATIBILITE_20230731 \
FAUX \
/* Permet d'assurer la compatibilite anterieure au 20230731093729 si besoin est... */
#define X_CENTRE_DU_PAVAGE \
DIVI(FLOT(230),FLOT(dimX_BASE))
#define Y_CENTRE_DU_PAVAGE \
DIVI(FLOT(256),FLOT(dimY_BASE))
/* Centre du pavage... */
#define NOMBRE_MAXIMAL_DE_SPECTRES \
INFINI
#define EDITER_LE_NOMBRE_DE_SPECTRES_TRACES \
FAUX
/* Pour gerer le nombre de spectres... */
#define EDITER_LES_MISES_A_JOUR_A_EFFECTUER \
FAUX \
/* Faut-il editer les mises a jour a effectuer dans ce '$K' ? */
#define FAIRE_UNE_ROTATION_INITIALE \
VRAI \
/* Faut-il faire une rotation initiale de (3.pi)/4 ? */
#define ECHELLE_GLOBALE \
GRO3(FRA2(FU)) \
/* Echelle globale... */
#define NIVEAU_DE_TRACE_DE_QUASIMENT_TOUS_LES_SPECTRES \
GRIS_1
#define NIVEAU_DE_TRACE_DU_SPECTRE_N_1 \
GRIS_3
#define NIVEAU_DE_TRACE_DU_SPECTRE_N \
GRIS_6
/* Niveau general de trace... */
#define NIVEAU_DE_TRACE_INCREMENTAL \
VRAI
#define NIVEAU_DE_TRACE_FIXE \
NOTL(NIVEAU_DE_TRACE_INCREMENTAL)
/* Gestion du niveau general de trace incremental... */
#define NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION \
VRAI
#define NIVEAU_DE_TRACE_NE_VISUALISANT_PAS_LA_ROTATION \
NOTL(NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION)
#define FACTEUR_____DU_NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION \
SEIZE
#define TRANSLATION_DU_NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION \
ADD2(GRIS_0,MOIT(COULEURS))
/* On notera qu'il y 13 angles possibles {-6,-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5,+6}. La */
/* symetrie par rapport a 0 implique que la translation des niveaux soient situees au */
/* milieu de {NOIR,BLANC}. Enfin, le facteur doit etre inferieur ou egal a la translation */
/* divisee par 7 (=6+1, soit le cardinal de {0,+1,+2,+3,+4,+5,+6}) qui est egal a 18.28 ; */
/* on prend donc 16... */
#define NIVEAU_DE_TRACE_VISUALISANT_LA_VALEUR_ABSOLUE_DE_LA_ROTATION \
VRAI
#define NIVEAU_DE_TRACE_NE_VISUALISANT_PAS_LA_VALEUR_ABSOLUE_DE_LA_ROTATION \
NOTL(NIVEAU_DE_TRACE_VISUALISANT_LA_VALEUR_ABSOLUE_DE_LA_ROTATION)
#define FACTEUR_____DU_NIVEAU_DE_TRACE_VISUALISANT_LA_VALEUR_ABSOLUE_DE_LA_ROTATION \
ADD2(GRO2(FACTEUR_____DU_NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION),CINQ)
#define TRANSLATION_DU_NIVEAU_DE_TRACE_VISUALISANT_LA_VALEUR_ABSOLUE_DE_LA_ROTATION \
ADD2(GRIS_1,DEUX)
/* Gestion du niveau general de trace visualisant la rotation. En fait il y a en "gros" */
/* un facteur 2 (a cause de la valeur absolue qui nous ramene a {0,+1,+2,+3,+4,+5,+6}) */
/* avec la parametrage du cas sans valeur absolue. Les parametres par defaut placent */
/* les niveaux de remplissage dans [$GRIS_1,$GRIS_8]... */
#define NIVEAU_DU_CADRE \
GRIS_4 \
/* Niveau du cadre... */
#define ANTI_ALIASING \
FAUX \
/* Etat de l'anti-aliasing... */
#define TRACE_UN_CADRE_CARRE \
FAUX \
/* Afin de pouvoir tracer un cadre carre englobant l'ensemble des spectres... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E S T I N E E S A O P T I M I S E R L E C O D E : */
/* */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Int,INIT(nombre_de_spectres_traces,ZERO)));
DEFV(Local,DEFV(genere_p,INIT(niveau_de_trace,NIVEAU_DE_TRACE_DE_QUASIMENT_TOUS_LES_SPECTRES)));
DEFV(Local,DEFV(genere_p,INIT(niveau_de_trace_N_1,NIVEAU_DE_TRACE_DU_SPECTRE_N_1)));
DEFV(Local,DEFV(genere_p,INIT(niveau_de_trace_N,NIVEAU_DE_TRACE_DU_SPECTRE_N)));
/* Niveaux generaux de trace... */
DEFV(Local,DEFV(Logical,INIT(niveau_de_trace_incremental,NIVEAU_DE_TRACE_FIXE)));
DEFV(Local,DEFV(Logical,INIT(niveau_de_trace_visualisant_la_rotation,NIVEAU_DE_TRACE_NE_VISUALISANT_PAS_LA_ROTATION)));
DEFV(Local,DEFV(Int,INIT(facteur_____du_niveau_de_trace_visualisant_la_rotation
,FACTEUR_____DU_NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION
)
)
);
DEFV(Local,DEFV(Int,INIT(translation_du_niveau_de_trace_visualisant_la_rotation
,TRANSLATION_DU_NIVEAU_DE_TRACE_VISUALISANT_LA_ROTATION
)
)
);
DEFV(Local,DEFV(Logical,INIT(niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation
,NIVEAU_DE_TRACE_NE_VISUALISANT_PAS_LA_VALEUR_ABSOLUE_DE_LA_ROTATION
)
)
);
DEFV(Local,DEFV(Int,INIT(facteur_____du_niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation
,FACTEUR_____DU_NIVEAU_DE_TRACE_VISUALISANT_LA_VALEUR_ABSOLUE_DE_LA_ROTATION
)
)
);
DEFV(Local,DEFV(Int,INIT(translation_du_niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation
,TRANSLATION_DU_NIVEAU_DE_TRACE_VISUALISANT_LA_VALEUR_ABSOLUE_DE_LA_ROTATION
)
)
);
BFonctionV
DEFV(Local,DEFV(FonctionV,fGENERE_SPECTRE_0(memoriser,niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros)))
DEFV(Argument,DEFV(Logical,memoriser));
DEFV(Argument,DEFV(genere_p,niveau));
DEFV(Argument,DEFV(Logical,numeroter));
DEFV(Argument,DEFV(genere_p,niveau_numeros_cotes));
DEFV(Argument,DEFV(Logical,inverser_les_numeros));
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
GENERE_SPECTRE_0(memoriser,niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros);
RETU_VIDE
Eblock
EFonctionV
BFonctionV
DEFV(Local,DEFV(FonctionV,fGENERE_SPECTRE_2(memoriser,numeroter,niveau_numeros_cotes,inverser_les_numeros)))
DEFV(Argument,DEFV(Logical,memoriser));
DEFV(Argument,DEFV(Logical,numeroter));
DEFV(Argument,DEFV(genere_p,niveau_numeros_cotes));
DEFV(Argument,DEFV(Logical,inverser_les_numeros));
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
GENERE_SPECTRE_2(memoriser,numeroter,niveau_numeros_cotes,inverser_les_numeros);
RETU_VIDE
Eblock
EFonctionV
BFonctionV
DEFV(Local,DEFV(Logical,INIT(faire_une_rotation_initiale,FAIRE_UNE_ROTATION_INITIALE)));
/* Faut-il faire une rotation initiale de (3.pi)/4 ? */
DEFV(Local,DEFV(FonctionV,fNOUVEAU_SPECTRE_2_1(rotation,numeroter,niveau_numeros_cotes,inverser_les_numeros)))
DEFV(Argument,DEFV(Int,rotation));
DEFV(Argument,DEFV(Logical,numeroter));
DEFV(Argument,DEFV(genere_p,niveau_numeros_cotes));
DEFV(Argument,DEFV(Logical,inverser_les_numeros));
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
NOUVEAU_SPECTRE_2_1(rotation,numeroter,niveau_numeros_cotes,inverser_les_numeros);
RETU_VIDE
Eblock
EFonctionV
BFonctionV
DEFV(Local,DEFV(FonctionV,fNOUVEAU_SPECTRE_2_2(niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros)))
DEFV(Argument,DEFV(genere_p,niveau));
DEFV(Argument,DEFV(Logical,numeroter));
DEFV(Argument,DEFV(genere_p,niveau_numeros_cotes));
DEFV(Argument,DEFV(Logical,inverser_les_numeros));
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
NOUVEAU_SPECTRE_2_2(niveau,numeroter,niveau_numeros_cotes,inverser_les_numeros);
RETU_VIDE
Eblock
EFonctionV
BFonctionV
DEFV(Local,DEFV(FonctionV,fMOVE_SPECTRE_0_2()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
MOVE_SPECTRE_0_2;
RETU_VIDE
Eblock
EFonctionV
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T R A C E D U S P E C T R E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Logical,INIT(compatibilite_20230731,COMPATIBILITE_20230731));
/* Permet d'assurer la compatibilite anterieure au 20230731093729 si besoin est... */
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(Float,INIT(X_centre_du_pavage,X_CENTRE_DU_PAVAGE));
DEFV(Float,INIT(Y_centre_du_pavage,Y_CENTRE_DU_PAVAGE));
/* Centre du pavage... */
DEFV(Int,INIT(nombre_maximal_de_spectres,NOMBRE_MAXIMAL_DE_SPECTRES));
DEFV(Logical,INIT(editer_le_nombre_de_spectres_traces,EDITER_LE_NOMBRE_DE_SPECTRES_TRACES));
/* Pour gerer le nombre de spectres... */
DEFV(Logical,INIT(editer_les_mises_a_jour_a_effectuer,EDITER_LES_MISES_A_JOUR_A_EFFECTUER));
/* Pour editer les mises a jour a effectuer dans ce '$K' pour la prochaine iteration... */
DEFV(Float,INIT(echelle_globale,ECHELLE_GLOBALE));
/* Echelle globale... */
DEFV(Logical,INIT(anti_aliasing,ANTI_ALIASING));
/* Etat de l'anti-aliasing... */
DEFV(Logical,INIT(trace_un_cadre_carre,TRACE_UN_CADRE_CARRE));
/* Afin de pouvoir tracer un cadre carre englobant l'ensemble des spectres... */
DEFV(genere_p,INIT(niveau_du_cadre,NIVEAU_DU_CADRE));
/* Niveau general de trace... */
/*..............................................................................................................................*/
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
,SX_SY_SZ_____compatibilite_20070416
);
GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420="
,Ipoint_anti_aliase_segment_____compatibilite_20110420
);
GET_ARGUMENT_L("compatibilite_20230731=",compatibilite_20230731);
/* Argument introduit le 20230905115810 avec donc beaucoup de retard (peu-etre afin de */
/* pouvoir regenerer des images telle 'v $xiirv/SMIT.31' ?)... */
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_L("rotation_initiale=""ri=",faire_une_rotation_initiale);
GET_ARGUMENT_F("pis2=""p2=",pi_sur_2);
GET_ARGUMENT_F("pis3=""p3=",pi_sur_3);
GET_ARGUMENT_F("pis6=""p6=",pi_sur_6);
/* Arguments introduits le 20230822142040 pour voir... */
GET_ARGUMENT_F("X_centre=""Xc=",X_centre_du_pavage);
GET_ARGUMENT_F("Y_centre=""Yc=",Y_centre_du_pavage);
GET_ARGUMENT_I("nombre_maximal_spectres=""nms=",nombre_maximal_de_spectres);
/* Pour regenerer 'v $xiirv/SMIT.31', on utilisera : */
/* */
/* nombre_maximal_spectres=19 */
/* */
GET_ARGUMENT_L("editer_nombre_spectres=""ens=",editer_le_nombre_de_spectres_traces);
GET_ARGUMENT_L("mises_a_jour=""maj=",editer_les_mises_a_jour_a_effectuer);
GET_ARGUMENT_L("numeroter_cotes=""nc=",numeroter_les_cotes);
GET_ARGUMENT_I("angle_inclinaison=""ai=",angle_d_inclinaison);
GET_ARGUMENT_I("contexte_0=""c0=",contexte_0);
GET_ARGUMENT_I("contexte_2=""c2=",contexte_2);
/* Sur '$LACT1B', on definira : */
/* */
/* alias spectre 'set ArGs=(\!*) ; \ */
/* clear ; \ */
/* $xrd/spectre.01$X maj=VRAI nc=FAUX $ArGs | $xci/display$X & \ */
/* ' */
/* */
/* Puis, on essaiera heuristiquement les parametres suivants : */
/* */
/* spectre ai=... co=... c2=... */
/* */
/* Lorsque le nouveau spectre (GRIS_6=jaune) s'accolera parfaitement au precedent */
/* (GRIS_3=magenta), alors les commandes editees du type : */
/* */
/* clear ; saut ; $xrd/spectre.01$Z ',...' |& $EGRE ' reference | xrd$| cl ' ; saut */
/* */
/* seront copiees-collees sur '$LACT19', ce qui mettra a jour automatiquement le source */
/* de 'v $xrd/spectre.01$K' (sur '$LACT19') et on bouclera sur ce processus... */
GET_ARGUMENT_L("squelettes=""ms=",marquer_les_squelettes);
GET_ARGUMENT_P("niveau_squelette=""ns=",niveau_de_trace_des_squelettes);
/* Arguments introduits le 20230905111750... */
GET_ARGUMENT_L("centre_gravite=""G=",marquer_le_centre_de_gravite);
/* Argument introduit le 20230826124358... */
GET_ARGUMENT_F("echelle=",echelle_globale);
GET_ARGUMENT_P("niveau=""n=",niveau_de_trace);
GET_ARGUMENT_P("niveauN1=""nN1=",niveau_de_trace_N_1);
GET_ARGUMENT_P("niveauN=""nN=",niveau_de_trace_N);
GET_ARGUMENT_L("niveau_incremental=""ni=",niveau_de_trace_incremental);
GET_ARGUMENT_L("niveau_rotation=""nr=",niveau_de_trace_visualisant_la_rotation);
GET_ARGUMENT_I("Aniveau_rotation=""Anr=",facteur_____du_niveau_de_trace_visualisant_la_rotation);
GET_ARGUMENT_I("Bniveau_rotation=""Bnr=",translation_du_niveau_de_trace_visualisant_la_rotation);
GET_ARGUMENT_L("niveau_rotation_absolue=""nra="
,niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation
);
GET_ARGUMENT_I("Aniveau_rotation_absolue=""Anra="
,facteur_____du_niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation
);
GET_ARGUMENT_I("Bniveau_rotation_absolue=""Bnra="
,translation_du_niveau_de_trace_visualisant_la_valeur_absolue_de_la_rotation
);
/* Arguments introduits le 20230828111541... */
GET_ARGUMENT_L("anti_aliasing=""aa=",anti_aliasing);
GET_ARGUMENT_L("editer_vecteurs=""ev=",IFsegment_____editer_le_vecteur_bidimensionnel);
GET_ARGUMENT_L("trier_vecteurs=""tv=",IFsegment_____trier_puis_editer_le_vecteur_bidimensionnel);
/* L'argument de tri a ete introduit le 20231012142352... */
GET_ARGUMENT_L("cadre=""cc=",trace_un_cadre_carre);
GET_ARGUMENT_P("niveau_cadre=""nk=",niveau_du_cadre);
)
);
Test(IFNE(SOMMET_DE_REFERENCE,_00))
Bblock
PRINT_ERREUR("le numerotage des contextes graphiques est incoherent, on aborte donc");
CAL1(Prer2("(le sommet de reference est %d alors que le premier contexte est %d)\n",SOMMET_DE_REFERENCE,_00));
Exit(PROBLEMES);
Eblock
ATes
Bblock
Eblock
ETes
Test(IFLT(nombre_maximal_de_spectres,UN))
Bblock
PRINT_ATTENTION("au moins un 'Spectre' va etre trace");
EGAL(nombre_maximal_de_spectres,UN);
Eblock
ATes
Bblock
Eblock
ETes
Test(NINCff(contexte_0,_00,_13))
Bblock
PRINT_ERREUR("le numero de contexte 0 est mauvais, il est donc reinitialise");
EGAL(contexte_0,_00);
Eblock
ATes
Bblock
Eblock
ETes
Test(NINCff(angle_d_inclinaison,MINIMUM_pis6,MAXIMUM_pis6))
Bblock
PRINT_ERREUR("l'angle d'inclinaison est mauvais, il est donc reinitialise");
EGAL(angle_d_inclinaison,P0pis6);
Eblock
ATes
Bblock
Eblock
ETes
Test(NINCff(contexte_2,_20,_33))
Bblock
PRINT_ERREUR("le numero de contexte 2 est mauvais, il est donc reinitialise");
EGAL(contexte_2,_20);
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(numeroter_les_cotes))
Bblock
EGAL(FgL0_00_____remplacer_par_un_O,VRAI);
/* Pour plus de lisibilite... */
Eblock
ATes
Bblock
Eblock
ETes
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_FILTRAGE(ACTIF);
CALS(Iinit_Z_Buffer());
SET_ANTI_ALIASING(anti_aliasing);
SKH(ECHELLES);
/* Definition de l'echelle globale. */
SXH(ECHELLES);
/* Definition de l'echelle sur l'axe des 'X'. */
SYH(ECHELLES);
/* Definition de l'echelle sur l'axe des 'Y'. */
Test(IL_FAUT(compatibilite_20230731))
Bblock
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. */
Eblock
ATes
Bblock
SET_CURSOR(X_centre_du_pavage
,Y_centre_du_pavage
,Zcentre_normalise
);
Eblock
ETes
SKH(echelle_globale);
/* Changement de l'echelle globale. */
SET_TRACE(AUTORISE);
EGAL(DRAW_____initialiser_les_extrema_de_X_Y_Z,VRAI);
ROTATION_INITIALE;
CALS(fGENERE_SPECTRE_0(MEMORISER_LE_CONTEXTE,niveau_de_trace,NE_PAS_NUMEROTER_LES_COTES,GRIS_5,FAUX));
/* Definition et generation du "Spectre" central (de base)... */
/* */
/* Pour la numerotation des "Spectres"s de type "satellite", on suppose qu'une horloge */
/* est centree sur le "Spectre" central. Ces "Spectres"s seront baptisees en fonction */
/* des heures... */
#define NIVEAU_SPECTRE \
niveau_de_trace
#define NUMEROTER_COTES \
NE_PAS_NUMEROTER_LES_COTES
#define NIVEAU_NUMEROS \
GRIS_4
#include xrd/spectre.01.1.I"
#redefine NIVEAU_SPECTRE \
niveau_de_trace_N_1
#redefine NUMEROTER_COTES \
numeroter_les_cotes
#redefine NIVEAU_NUMEROS \
GRIS_4
#include xrd/spectre.01.2.I"
#redefine NIVEAU_SPECTRE \
niveau_de_trace_N
#redefine NUMEROTER_COTES \
numeroter_les_cotes
#redefine NIVEAU_NUMEROS \
GRIS_5
NOUVEAU_SPECTRE_2(DEPLACER__0_2,NIVEAU_SPECTRE,NUMEROTER_COTES,NIVEAU_NUMEROS,FAUX
,angle_d_inclinaison,contexte_0,contexte_2
);
/* Afin de permettre le parametrage du dernier 'NOUVEAU_SPECTRE_2(...)'... */
AIDES_DIVERSES_APRES_LE_TRACE;
SET_FILTRAGE(INACTIF);
CALS(Imove(ImageR,ImageG));
CALi(Iupdate_image(nom_imageR,ImageR));
RETU_Commande;
Eblock
ECommande