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