#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         Q U E L Q U E S   D E F I N I T I O N S   G R A P H I Q U E S   D E   T Y P E   ' G2/G3 '  :                                #
#                                                                                                                                     #
#                                                                                                                                     #
#         Liste des primitives disponibles :                                                                                          #
#                                                                                                                                     #
#                   G_Init                                : initialisation,                                                           #
#                                                                                                                                     #
#                   G_K       <nombre>                    : facteurs d'echelle,                                                       #
#                   G_KX      <nombre>                    : facteurs d'echelle,                                                       #
#                   G_KY      <nombre>                    : facteurs d'echelle,                                                       #
#                   G_KZ      <nombre>                    : facteurs d'echelle,                                                       #
#                                                                                                                                     #
#                   G_1                                   : deplacements,                                                             #
#                   G_3                                   : deplacements,                                                             #
#                   G_2                                   : deplacements,                                                             #
#                   G_4                                   : deplacements,                                                             #
#                   G_5                                   : deplacements,                                                             #
#                   G_6                                   : deplacements,                                                             #
#                                                                                                                                     #
#                   G_Cursor1 <X Y Z>                     : positionnement du curseur au point {X,Y,Z},                               #
#                   G_Cursor2 <R V B>                     : choix de la couleur {R,V,B} pour le curseur,                              #
#                   G_Cursor3 <rayon>                     : choix du rayon du curseur,                                                #
#                                                                                                                                     #
#                   G_Zoom    <rapport>                   : choix du rapport de zoom,                                                 #
#                                                                                                                                     #
#                   G_A                                   : points,                                                                   #
#                   G_S                                   : points,                                                                   #
#                   G_B                                   : points,                                                                   #
#                                                                                                                                     #
#                   G_Quelc   <sequence>                  : pas de centrage d'une sequence,                                           #
#                   G_CentreX <sequence>                  : centrage horizontal d'une sequence,                                       #
#                                                                                                                                     #
#                   G_MIC     <nom_point>                 : gestion de la pile,                                                       #
#                   G_MOC     <nom_point>                 : gestion de la pile,                                                       #
#                                                                                                                                     #
#                   G_L       <nom_caractere> [<Bibl>]    : recuperation de la definition d'un caractere de nom "<nom>"               #
#                                                           'v $xiii/alphabet.?$FON',                                                 #
#                   G_Message <message>                   : convertit un message alpha-numerique en une suite de 'G_L',               #
#                                                                                                                                     #
#                   G_Genere  <nom_image> [...]           : generation de l'image.                                                    #
#                                                                                                                                     #
#                                                                                                                                     #
#                   G_Dessin  <message> <bibliotheque> <nom_image> [...]                                                              #
#                                                         : generation directe d'une image a partir d'un message alpha-numerique.     #
#                                                                                                                                     #
#                                                                                                                                     #
#         Nota :                                                                                                                      #
#                                                                                                                                     #
#                     On notera le 20240420074837 que le message                                                                      #
#                   suivant si il apparait :                                                                                          #
#                                                                                                                                     #
#                                       /bin: No match.                                                                               #
#                                                                                                                                     #
#                   est cause par la reference a un caractere qui                                                                     #
#                   n'est pas defini dans la bibliotheque courante                                                                    #
#                   ou bien qui est defini conditionnellement tel                                                                     #
#                   'v $xiii/alphabet.0$FON FgL1_00' par exemple...                                                                   #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xrd/graph.01$vv$Y' :                                                                                            #
#                                                                                                                                     #
#                     Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

if        (    (! -e $xcg/ADD2.01$X)                                                                                                    \
          ||   (! -e $xcg/DIVZ.01$X)                                                                                                    \
          ||   (! -e $xcg/MUL2.01$X)                                                                                                    \
          ||   (! -e $xcg/SOUS.01$X)                                                                                                    \
          ||   (! -e $xrv/particule.10$X)                                                                                               \
           )   then
          EROR      "['"'$xrd/graph.01$vv$Y'"'] Il manque certains outils de '"'$xcg'"' et de '"'$xrv'"'."
else
endif

alias     G_Init    'source    $xrd/graph.01$vv$Y'
                                        # Reinitialisation totale...                                                                  #

set       Echelle_K=0.25
set       Echelle_KX=1.0
set       Echelle_KY=1.0
set       Echelle_KZ=1.0
                                        # Valeurs par defaut definissant les echelles.                                                #

set       Origine_COORD_X=0.5
set       Origine_COORD_Y=0.5
set       Origine_COORD_Z=0.5

set       Cursor_COORD_X=$Origine_COORD_X
set       Cursor_COORD_Y=$Origine_COORD_Y
set       Cursor_COORD_Z=$Origine_COORD_Z

set       Cursor_ROUGE=$BLANC
set       Cursor_VERTE=$BLANC
set       Cursor_BLEUE=$BLANC

set       Cursor_RAYON=0.01
                                        # Valeurs par defaut definissant le curseur. Le choix de {0.5,0.5,0.5} est destine au         #
                                        # programme 'v $xrv/particule.10$K'.                                                          #

set       Transformation_ZOOM=`GetParam $xrv/particule.10$X ZOOM`
                                        # Valeurs par defaut definissant les transformations. Le parametre '$Transformation_ZOOM' a   #
                                        # ete introduit le 20130226085643...                                                          #

alias     G_K       'set       Echelle_K=\!:1'
alias     G_KX      'set       Echelle_KX=\!:1'
alias     G_KY      'set       Echelle_KY=\!:1'
alias     G_KZ      'set       Echelle_KZ=\!:1'
                                        # Changement des echelles globales {K} et locales {X,Y,Z}.                                    #

alias     G_1       'set       DePlAcEmEnT=`$xcg/MUL2.01$X a=$Echelle_K b=$Echelle_KX`                                            ;    \\
                     set       Cursor_COORD_X=`$xcg/ADD2.01$X a=$Cursor_COORD_X b=$DePlAcEmEnT`                                   ;    \\
                     unset     DePlAcEmEnT'
                                        # Deplacement '1'.                                                                            #
alias     G_3       'set       DePlAcEmEnT=`$xcg/MUL2.01$X a=$Echelle_K b=$Echelle_KX`                                            ;    \\
                     set       Cursor_COORD_X=`$xcg/SOUS.01$X a=$Cursor_COORD_X b=$DePlAcEmEnT`                                   ;    \\
                     unset     DePlAcEmEnT'
                                        # Deplacement '3'.                                                                            #

alias     G_2       'set       DePlAcEmEnT=`$xcg/MUL2.01$X a=$Echelle_K b=$Echelle_KY`                                            ;    \\
                     set       Cursor_COORD_Y=`$xcg/ADD2.01$X a=$Cursor_COORD_Y b=$DePlAcEmEnT`                                   ;    \\
                     unset     DePlAcEmEnT'
                                        # Deplacement '2'.                                                                            #
alias     G_4       'set       DePlAcEmEnT=`$xcg/MUL2.01$X a=$Echelle_K b=$Echelle_KY`                                            ;    \\
                     set       Cursor_COORD_Y=`$xcg/SOUS.01$X a=$Cursor_COORD_Y b=$DePlAcEmEnT`                                   ;    \\
                     unset     DePlAcEmEnT'
                                        # Deplacement '4'.                                                                            #

alias     G_5       'set       DePlAcEmEnT=`$xcg/MUL2.01$X a=$Echelle_K b=$Echelle_KZ`                                            ;    \\
                     set       Cursor_COORD_Z=`$xcg/ADD2.01$X a=$Cursor_COORD_Z b=$DePlAcEmEnT`                                   ;    \\
                     unset     DePlAcEmEnT'
                                        # Deplacement '5'.                                                                            #
alias     G_6       'set       DePlAcEmEnT=`$xcg/MUL2.01$X a=$Echelle_K b=$Echelle_KZ`                                            ;    \\
                     set       Cursor_COORD_Z=`$xcg/SOUS.01$X a=$Cursor_COORD_Z b=$DePlAcEmEnT`                                   ;    \\
                     unset     DePlAcEmEnT'
                                        # Deplacement '6'.                                                                            #

alias     G_Cursor1 'set       Cursor_COORD_X=\!:1 ; set Cursor_COORD_Y=\!:2 ; set Cursor_COORD_Z=\!:3'
alias     G_Cursor2 'set       Cursor_ROUGE=\!:1   ; set Cursor_VERTE=\!:2   ; set Cursor_BLEUE=\!:3'
alias     G_Cursor3 'set       Cursor_RAYON=\!:1'
                                        # Forcage du curseur.                                                                         #

alias     G_Zoom    'set       Transformation_ZOOM=\!:1'
                                        # Forcage du rapport de zoom (introduit le 20130226091449).                                   #

alias     G_A       'set       A_COORD_X=$Cursor_COORD_X ; set A_COORD_Y=$Cursor_COORD_Y ; set A_COORD_Z=$Cursor_COORD_Z          ;    \\
                     set       A_ROUGE=$Cursor_ROUGE     ; set A_VERTE=$Cursor_VERTE     ; set A_BLEUE=$Cursor_BLEUE              ;    \\
                     set       A_RAYON=$Cursor_RAYON'
                                        # Definition du point 'A'.                                                                    #
alias     G_S       'set       B_COORD_X=$Cursor_COORD_X ; set B_COORD_Y=$Cursor_COORD_Y ; set B_COORD_Z=$Cursor_COORD_Z          ;    \\
                     set       B_ROUGE=$Cursor_ROUGE     ; set B_VERTE=$Cursor_VERTE     ; set B_BLEUE=$Cursor_BLEUE              ;    \\
                     set       B_RAYON=$Cursor_RAYON                                                                              ;    \\
                     G_Trace'
                                        # Definition du point 'S'.                                                                    #
alias     G_B       'G_S                                                                                                          ;    \\
                     G_A'
                                        # Definition du point 'B'.                                                                    #

alias     G_MIC     'set       NoMpOiNt=\!:1                                                                                      ;    \\
                     eval      "set $NoMpOiNt=(X=$Cursor_COORD_X Y=$Cursor_COORD_Y Z=$Cursor_COORD_Z)"                            ;    \\
                     eval      "set $NoMpOiNt=($K_DOLLAR$NoMpOiNt ROUGE=$Cursor_ROUGE VERTE=$Cursor_VERTE BLEUE=$Cursor_BLEUE)"   ;    \\
                     eval      "set $NoMpOiNt=($K_DOLLAR$NoMpOiNt RAYON=$Cursor_RAYON)"                                           ;    \\
                     unset     NoMpOiNt'
                                        # Sauvegarde du curseur courant avec un nom Argument.                                         #
alias     G_MOC_1   'set       Cursor_COORD_X=`echo $CuRsEuR | $SE -e "s/^.*X=//" -e "s/[ )].*//"`                                ;    \\
                     set       Cursor_COORD_Y=`echo $CuRsEuR | $SE -e "s/^.*Y=//" -e "s/[ )].*//"`                                ;    \\
                     set       Cursor_COORD_Z=`echo $CuRsEuR | $SE -e "s/^.*Z=//" -e "s/[ )].*//"`'
alias     G_MOC_2   'set       Cursor_ROUGE=`echo $CuRsEuR | $SE -e "s/^.*ROUGE=//" -e "s/[ )].*//"`                              ;    \\
                     set       Cursor_VERTE=`echo $CuRsEuR | $SE -e "s/^.*VERTE=//" -e "s/[ )].*//"`                              ;    \\
                     set       Cursor_BLEUE=`echo $CuRsEuR | $SE -e "s/^.*BLEUE=//" -e "s/[ )].*//"`                              ;    \\
                     set       Cursor_RAYON=`echo $CuRsEuR | $SE -e "s/^.*RAYON=//" -e "s/[ )].*//"`'
alias     G_MOC     'set       NoMpOiNt=\!:1                                                                                      ;    \\
                     eval      "set CuRsEuR=$K_PG$K_DOLLAR$NoMpOiNt$K_PD"                                                         ;    \\
                     G_MOC_1                                                                                                      ;    \\
                     G_MOC_2                                                                                                      ;    \\
                     unset     NoMpOiNt CuRsEuR'
                                        # Repositionnement du curseur a partir du point Argument.                                     #

set       G_Alphabet=0
                                        # Definition de l'alphabet par defaut.                                                        #
set       G_BlocAlphabet0=6
                                        # Les caracteres de l'alphabet 0 par defaut sont definis par des blocs 6x6...                 #

alias     Linex     ''
                                        # Pour eviter des messages d'erreur a cause de 'v $xiii/alphabet.2$FON Linex' par exemple...  #
#20061026103729____:alias     G_L       'set       LeTtRe=\!:1 ; set AlPhAbEt=\!:2* ; FileTmpB FiLe $Y                       ;    \\  #
#20061026103729____:                     if        ("$AlPhAbEt" == "$K_VIDE") set AlPhAbEt=$G_Alphabet                       ;    \\  #
#20061026103729____:                     $CA       $xcs/csh$Y                                                      >   $FiLe ;    \\  #
#2006: $CA  $xiii/alphabet.$AlPhAbEt$FON | $AW " /GENERE__FonctionI_GRAPHIQUES\(FgL""$LeTtRe""_0$AlPhAbEt/,/FiNdUfIcHiEr/ "  |    \\  #
#2006: $xcp/appariement$X ouverture="(" | $SE -e "/^ *DEFV(/d" -e "/^ *,BLOC(/d" -e "/^ *)/d" -e "s/g/G_/g"    >>! $FiLe     ;    \\  #
#20061026103729____:                set       VaLiDe=`$CA $FiLe | $GRE "[()]"` ; if ("$VaLiDe" == "$K_VIDE") source    $FiLe ;    \\  #
#20061026103729____:                     FileTmpE  FiLe                                                                      ;    \\  #
#20061026103729____:                     unset     LeTtRe AlPhAbEt VaLiDe'                                                            #

alias     G_L       'set       LeTtRe=\!:1 ; set AlPhAbEt=\!:2*                                                                   ;    \\
                     source    $xrd/graph.G_L$vv$Y                                                                                ;    \\
                     unset     LeTtRe AlPhAbEt'
                                        # Recuperation d'une lettre d'un certain alphabet et utilisation. ATTENTION, on fait ici      #
                                        # l'hypothese que les definitions des lettres ont la forme suivante :                         #
                                        #                                                                                             #
                                        #                   DEFV(...                                                                  #
                                        #                                      ,BLOC(                                                 #
                                        #                                            <definitions avec {gA,g1,g2,g3,g4,gB}>           #
                                        #                                            )                                                #
                                        #                                       )                                                     #
                                        #                        )                                                                    #
                                        #                                                                                             #
                                        # et qu'entre autres choses, elles ne font pas appel a d'autres fonctions, comme c'est        #
                                        # le cas, par exemple, du chiffre "0" ('v alphabet.0$FON FgL0_00'), d'ou ce qui suit...       #
                                        #                                                                                             #
                                        # ATTENTION, on ne peut appeler le chiffre "0" car il appelle lui-meme la lettre "O". On      #
                                        # devra donc faire le chiffre "0" directement avec la lettre "O"...                           #
                                        #                                                                                             #
                                        # La modification du 20061026103729 est destinee a eliminer le message :                      #
                                        #                                                                                             #
                                        #                   Alias loop.                                                               #
                                        #                                                                                             #
                                        # par exemple avec la commande suivante :                                                     #
                                        #                                                                                             #
                                        #                   G_CentreX `G_Message "JOYEUX ANNIVERSAIRE"`                               #
                                        #                                                                                             #

alias     G_Message 'set       MeSsAgE=(\!*)                                                                                      ;    \\
                     echo      "$MeSsAgE" | $SE -e "s/\(.\)/G_L $K_QD""\1$K_QD;/g" -e "s/  / space/g" -e '"'"'s/;$//'"'"'         ;    \\
                     unset     MeSsAgE'
                                        # Conversion d'un message alpha-numerique en une suite de 'G_L'.                              #
                                        #                                                                                             #
                                        # Je rappelle le 20130918153829 que 'G_Message' s'utilise en general de la facon suivante :   #
                                        #                                                                                             #
                                        #                   eval      `G_Message ...`                                                 #
                                        #                                                                                             #
                                        # (voir 'v $xiirv/$Fnota Debut_listG_COEL_21').                                               #
                                        #                                                                                             #
                                        # On note de plus a cette date que tous les caracteres "speciaux" ne sont pas definis         #
                                        # dans 'v $xrd/graph.G_L$vv$Y'. Si besoin est, il convient de completer la liste de ceux      #
                                        # qui sont reconnus...                                                                        #

set       File_COORD_X        = "$xT/COORDONNEES$COORD_X"
set       File_COORD_Y        = "$xT/COORDONNEES$COORD_Y"
set       File_COORD_Z        = "$xT/COORDONNEES$COORD_Z"

set       File_ROUGE          = "$xT/COULEURS$ROUGE"
set       File_VERTE          = "$xT/COULEURS$VERTE"
set       File_BLEUE          = "$xT/COULEURS$BLEUE"

set       File_RAYON          = "$xT/RAYON"
                                        # Definition des fichiers utiles.                                                             #

alias     G_Delete  '                                                                                                                  \\
                     $DELETE   $File_COORD_X                                                                                      ;    \\
                     $DELETE   $File_COORD_Y                                                                                      ;    \\
                     $DELETE   $File_COORD_Z                                                                                      ;    \\
                     $DELETE   $File_ROUGE                                                                                        ;    \\
                     $DELETE   $File_VERTE                                                                                        ;    \\
                     $DELETE   $File_BLEUE                                                                                        ;    \\
                     $DELETE   $File_RAYON                                                                                        ;    \\
                     '

G_Delete
                                        # Nettoyage (mis sous cette forme le 20240424132823...).                                      #

alias     G_On      'set       G_Status=$EXIST'
alias     G_Off     'set       G_Status=$NEXIST'
G_On
                                        # Etat du trace (autorise=$EXIST, interdit=$NEXIST).                                          #

alias     G_Quelc   'set       SeQuEnCe=(\!*)                                                                                     ;    \\
                     FileTmpB  FiLeT $Y                                                                                           ;    \\
                     ($CA       $xcs/csh$Y ; echo "$SeQuEnCe") > $FiLeT                                                           ;    \\
                     source    $FiLeT                                                                                             ;    \\
                     FileTmpE  FiLeT                                                                                              ;    \\
                     unset     SeQuEnCe'
                                        # Positionnement quelconque d'une sequence (introduit le 20130226092711).                     #

alias     G_CentreX 'set       SeQuEnCe=(\!*) ; FileTmpB FiLeT $Y                                                                 ;    \\
                     ($CA       $xcs/csh$Y ; echo "$SeQuEnCe") > $FiLeT                                                           ;    \\
                     G_Off     ; G_MIC CeNtRaGe ; source    $FiLeT                                                                ;    \\
                     set       Coordonnee_X=$Cursor_COORD_X ; G_MOC CeNtRaGe                                                      ;    \\
                     set       Cursor_COORD_X=`calcul $Origine_COORD_X-(($Coordonnee_X-($Cursor_COORD_X))/2)`                     ;    \\
                     G_On      ;                  source    $FiLeT                                                                ;    \\
                     FileTmpE  FiLeT                                                                                              ;    \\
                     unset     SeQuEnCe Coordonnee_X'
                                        # Centrage en 'X' (horizontal) d'une sequence.                                                #
                                        #                                                                                             #
                                        # Evidemment, cela peut etre etendu a d'autres types de centrage (par exemple vertical        #
                                        # avec '$Cursor_COORD_Y'), voire a d'autres applications...                                   #
                                        #                                                                                             #
                                        # On notera le 20130228113444 que 'G_CentreY' et 'G_CentrXY' ne sont pas aussi simples que    #
                                        # l'on pourrait l'imaginer car, en effet, le curseur, pour une lettre se trouve au debut      #
                                        # et a la fin sur la meme horizontale, mais pas sur la meme verticale : d'ou l'impossibilite  #
                                        # de centrer verticalement !                                                                  #

alias     G_Trace   'if        ($G_Status == $EXIST) echo      "$A_COORD_X""\n""$B_COORD_X" >>! $File_COORD_X                     ;    \\
                     if        ($G_Status == $EXIST) echo      "$A_COORD_Y""\n""$B_COORD_Y" >>! $File_COORD_Y                     ;    \\
                     if        ($G_Status == $EXIST) echo      "$A_COORD_Z""\n""$B_COORD_Z" >>! $File_COORD_Z                     ;    \\
                     if        ($G_Status == $EXIST) echo      "$A_ROUGE""\n""$B_ROUGE"     >>! $File_ROUGE                       ;    \\
                     if        ($G_Status == $EXIST) echo      "$A_VERTE""\n""$B_VERTE"     >>! $File_VERTE                       ;    \\
                     if        ($G_Status == $EXIST) echo      "$A_BLEUE""\n""$B_BLEUE"     >>! $File_BLEUE                       ;    \\
                     if        ($G_Status == $EXIST) echo      "$A_RAYON""\n""$B_RAYON"     >>! $File_RAYON'
                                        # Trace du segment {A,B}.                                                                     #

#20130226084236____:alias     G_Genere  'set  ImAgE=\!:1 ; set ArGs="\!:2*" ; set NpOiNtS=0                                  ;    \\  #
#20130226084236____:                     if   (-e $xT/COORDONNEES$COORD_X) set NpOiNtS=`$CA $xT/COORDONNEES$COORD_X | $WCl`  ;    \\  #
#20130226084236____:                     if   ($NpOiNtS > 0) $xrv/particule.10$X                                                  \\  #
#20130226084236____:                               np=1 iterations=$NpOiNtS isoles=FAUX chainer=FAUX Pajuster=VRAI Rpoints=4      \\  #
#20130226084236____:      LISTE_X=$xT/COORDONNEES$COORD_X LISTE_Y=$xT/COORDONNEES$COORD_Y LISTE_Z=$xT/COORDONNEES$COORD_Z         \\  #
#20130226084236____:                               editer_extrema_hors=FAUX                                                       \\  #
#20130226084236____:      LISTE_ROUGE=$xT/COULEURS$ROUGE LISTE_VERTE=$xT/COULEURS$VERTE LISTE_BLEUE=$xT/COULEURS$BLEUE            \\  #
#20130226084236____:                               LISTE_RAYON=$xT/RAYON Lz=100 R=$ImAgE chiffres=0 $ArGs $formatI           ;    \\  #
#20130226084236____:                     unset     ImAgE ArGs NpOiNtS'                                                                #

alias     G_Genere  'set       ImAgE=\!:1 ; set ArGs="\!:2*"                                                                      ;    \\
                     source    $xrd/graph.G_Genere$vv$Y                                                                           ;    \\
                     unset     ImAgE ArGs'
                                        # Visualisation du dessin courant s'il existe (via l'existence de '$xT/COORDONNEES$COORD_X'). #
                                        # On notera que, grace a '$ArGs", on peut par exemple definir :                               #
                                        #                                                                                             #
                                        #                   fond=VRAI F=...                                                           #
                                        #                                                                                             #
                                        # pour mettre un fond au dessin...                                                            #
                                        #                                                                                             #
                                        # L'option "editer_extrema_hors=FAUX" a ete introduite le 20090127114821...                   #

alias     G_Dessin  'set       MeSsAgE=\!:1 ; set BiBlIoThEqUe=\!:2 ; set ImAgE=\!:3 ; set ArGs=(\!:4*)                           ;    \\
                     source    $xrd/graph.G_Dessin$vv$Y                                                                           ;    \\
                     unset     MeSsAgE BiBlIoThEqUe ImAgE ArGs'
                                        # Generation directe d'une image a partir d'un message alpha-numerique (ceci fut introduit    #
                                        # le 20080909102604).                                                                         #
                                        #                                                                                             #
                                        # Le 20090127093540, je note qu'une utilisation de '$ArGs' est :                              #
                                        #                                                                                             #
                                        #                   LISTE_RAYON=...                                                           #
                                        #                                                                                             #
                                        # qui permet donc de redefinir le rayon de visualisation. D'autre part, '$BiBlIoThEqUe' peut  #
                                        # valoir :                                                                                    #
                                        #                                                                                             #
                                        #                   0 = alphabet de base,                                                     #
                                        #                   1 = alphabet malheureusement incomplet,                                   #
                                        #                   2 = alphabet dit "extension" et pratiquement vide,                        #
                                        #                   3 = alphabet des structures paradoxales.                                  #
                                        #                                                                                             #



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.