Fichier u_test_texte3d_YZ_04.jps — Modifié le 1 Juillet 2006 à 10 h 34

u_test_texte3d_YZ_04.pdf
Source
%% Pour passer en pur postscript, decommenter la ligne suivante
%% 294 420 translate

%% puis commenter les 3 suivantes
-15 15 setxrange
-12 12 setyrange
20 setxunit

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Variations autour        %%
%% d'un fichier original de %%
%%(c) P. Kleiweg 1997       %%
%% juin 2006 :              %%
%% Manuel Luque             %%
%% Arnaud Schmittbuhl       %%
%% Jean-Paul Vignault       %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/cm {28.45 mul} def
%% définir le point de vue
%% par ses coordonnées sphériques
/THETA 30 def
/PHI 30 def
/Dobs 50 def % distance observateur
/Decran 20 def % distance de l'écran
%% calcul des coefficients de la matrice
%% de transformation
/Sin1 {THETA sin} bind def
/Sin2 {PHI sin} bind def
/Cos1 {THETA cos} bind def
/Cos2 {PHI cos} bind def
/Cos1Sin2 {Cos1 Sin2 mul} bind def
/Sin1Sin2 {Sin1 Sin2 mul} bind def
/Cos1Cos2 {Cos1 Cos2 mul} bind def
/Sin1Cos2 {Sin1 Cos2 mul} bind def
%%
%% pour la 3D conventionnelle
%% Dony : graphisme scientifique : page 187
%% Editeur : Masson
/formulesTroisD{%
  /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
  /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
  /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
  /Xi Decran xObservateur mul zObservateur div def
  /Yi Decran yObservateur mul zObservateur div def
  }
def
/XpointVue {Dobs Cos1Cos2 mul} bind def
/YpointVue {Dobs Sin1Cos2 mul} bind def
/ZpointVue {Dobs Sin2 mul} bind def

/3dto2d {
6 dict begin
   /Zcote exch def
   /Yordonnee exch def
   /Xabscisse exch def

   /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
   /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
   /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
   %% maintenant on depose les resultats sur la pile
   Decran xObservateur mul zObservateur div cm %% c'est Xi cm
   Decran yObservateur mul zObservateur div cm %% c'est Yi cm
end
} def

%% dessin de l'icosaedre tronqué
1 setlinejoin

%% le quadrillage
-20 1 20 {
   /x exch def
   newpath
      x -10 0 3dto2d moveto
      x 10 0 3dto2d lineto
   stroke
} for
-10 1 10 {
   /y exch def
   newpath
      -20 y 0 3dto2d moveto
      20 y 0 3dto2d lineto
   stroke
} for


%% les axes
gsave
   %% axe Ox
   0 0 moveto
   20 0 0 3dto2d lineto
   2 setlinewidth
   1 0 0 setrgbcolor
   stroke

   %% axe Oy
   0 0 moveto
   0 10 0 3dto2d lineto
   2 setlinewidth
   0 1 0 setrgbcolor
   stroke

   %% axe Oz
   0 0 moveto
   0 0 15 3dto2d lineto
   2 setlinewidth
   0 0 1 setrgbcolor
   stroke
grestore


/decalage_vertical 0 def        %% decalage en picas du texte en
                                %% dessous de la ligne y=0
/Font /Times-Roman def
%% Font findfont 3 scalefont setfont
Font findfont 3.5 cm scalefont setfont 

%% le texte a deformer (les x sont dans [-warphalf ; warphalf])
/warptxt (Brazil-France) def

/warpwidth warptxt stringwidth pop def %% largeur horizontale du texte
/warphalf warpwidth 2 div def          %% demi-largeur horizontale

%% Jean-Paul Vignault
%% la procedure de base pour la transformation des points du chemin
%% (x, y) --> (X, Y)
%% cette fonction peut utiliser les variables warpwidth et warphalf

%% point origine de la phrase :
/x0 -20 def
%/y0 -10 def
/y0 warphalf neg 28.45 div def % centre le texte
/z0 6 def

/warp {
3 dict begin
%% /z exch z0 add def
%% /y exch y0 add def
   /z exch 28.45 div z0 add def
   /y exch 28.45 div y0 add def
   x0 y z 3dto2d
end
} bind def


%% pour remplacer 'move'
/warpmove{
   %% on teste le booleen place 2 tokens plus en avant sur la pile
   %% si c'est 'true', alors on en est au 1er appel => on initialise
   %% le chemin
   2 index {
     newpath
   } if
   %% puis on applique warp a notre point
   warp  moveto
   %% on enleve le 'true' pour mettre un 'false' a la place
   pop false
} bind def

%% pour remplacer 'lineto
/warpline {
   warp lineto
} bind def

%% pour remplacer 'curveto'
/warpcurve {
   6 2 roll warp
   6 2  roll warp
   6 2 roll warp
   curveto
}  bind def

%% 'warpit' declenche la transformation du chemin courant
/warpit {
true
{ warpmove } {  warpline } { warpcurve } { closepath } pathforall
pop
}  bind def

newpath
%% on se deplace (init chemin) de facon a
%% centrer la ligne de base du texte en (0 , - decalage_vertical)
%%warphalf neg decalage_vertical neg moveto

   x0 -10 0 3dto2d moveto
   x0 -10 10 3dto2d lineto
   x0 10 10 3dto2d lineto
   x0 10 0 3dto2d lineto
closepath
0 0 1 setrgbcolor
stroke

0 0 0 3dto2d moveto

warptxt true charpath   %% on cree le chemin

%% maintenant on y va
warpit                  %% on applique le pathforall
gsave
    1 setgray
    fill
grestore
0 setgray
stroke                  %% puis on encre