#!/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. #
# #