\section{Text}

The object \Lkeyword{texte} of the macro \Lcs{psProjection} allows us
to \Index{project} character strings onto planes.

\subsection{The parameters and the options}

There are three parameters:\Lkeyword{text} which defines the
string, \Lkeyword{fontsize}, which gives the dimension of the font
in points (remember: 28.45~pts correspond to 1~cm), and finally
\Lkeyword{pos}, which defines the position of the \Index{text}. By
default, the text is centred at the origin of the plane.

This last parameter needs some explanation. See the string
 \texttt{petit texte} represented below.
\begin{center}
\begin{pspicture}(-5,-2)(5,2)
\rput(0,0){\psframebox[linestyle=none,fillstyle=solid,
   fillcolor=yellow!50,framesep=0pt]{\phantom{\timesnormal petit texte}}}
\rput(0,0){\rnode[lb]{A}{\rnode[rb]{B}{\rnode[rt]{C}{%
    \rnode[lt]{D}{\rnode[l]{E}{\rnode[r]{F}{%
    \rnode[t]{G}{\rnode[b]{H}{\timesnormal petit texte}}}}}}}}}
%\psset{nodesep=5pt}
\ncline{A}{B}\ncline{B}{C}\ncline{C}{D}\ncline{D}{A}
\pnode({A}){A'}
\pnode({B}){B'}
\pnode({C}){C'}
\pnode({D}){D'}
\pnode({E}){E'}
\pnode({F}){F'}
\pnode({G}){G'}
\pnode({H}){H'}
\rput(A){\pnode(0,\baselineskip){B1}}
\rput(B){\pnode(0,\baselineskip){B2}}
\psdots(A')(B')(C')(D')(E')(F')(G')(H')(B1)(B2)(0,0)
\psline(B1)(B2)
\pnode(! \GetCenter{A} A.x 0.5 sub A.y 0.5 sub){A1}
\ncline{->}{A}{A1}
\uput[dl](A1){\texttt{dl}}
\pnode(! \GetCenter{B1} B1.x 0.5 sub B1.y){B1l}
\ncline{->}{B1}{B1l}
\uput[l](B1l){\texttt{bl}}
\pnode(! \GetCenter{E} E.x 0.5 sub E.y){El}
\ncline{->}{E}{El}
\uput[l](El){\texttt{cl}}
\pnode(! \GetCenter{D} D.x 0.5 sub D.y 0.5 add){Dl}
\ncline{->}{D}{Dl}
\uput[ul](Dl){\texttt{ul}}
\pnode(! \GetCenter{G} G.x G.y 0.5 add){Gu}
\ncline{->}{G}{Gu}
\uput[u](Gu){\texttt{uc}}
\pnode(! \GetCenter{H} H.x H.y 0.5 sub){Hd}
\ncline{->}{H}{Hd}
\uput[d](Hd){\texttt{dc}}
\pnode(! \GetCenter{C} C.x 0.5 add C.y 0.5 add){Cr}
\ncline{->}{C}{Cr}
\uput[ur](Cr){\texttt{ur}}
\pnode(! \GetCenter{B} B.x 0.5 add B.y 0.5 sub){Br}
\ncline{->}{B}{Br}
\uput[dr](Br){\texttt{dr}}
\pnode(! \GetCenter{B2} B2.x 0.5 add B2.y){B2r}
\ncline{->}{B2}{B2r}
\uput[r](B2r){\texttt{br}}
\pnode(! \GetCenter{F} F.x 0.5 add F.y){Fr}
\ncline{->}{F}{Fr}
\uput[r](Fr){\texttt{cr}}
\end{pspicture}
\end{center}

We have $4$~horizontal reference lines: the bottom line
\verb+(d)own+, the base line \verb+(b)aseline+, the median line,
or centre line \verb+(c)enter+, and the upper line \verb+(u)p+.

There are as well $4$~vertical reference lines: the left line
\verb+(l)eft+, the base line \verb+(b)aseline+, the centre line
\verb+(c)enter+ and the right line \verb+(r)ight+. In the case of
strings, the two vertical lines \verb+l+ and \verb+b+ might be
indistinguishable and easily confounded.

The intersection of the $4$ horizontal lines with the $4$ vertical
lines gives us $16$~positioning point possibilities \verb+dl+,
\verb+bl+, \verb+cl+, \verb+ul+, \verb+db+, \verb+bb+, \verb+cb+,
\verb+ub+, \verb+dc+, \verb+bc+, \verb+cc+, \verb+uc+, \verb+dr+,
\verb+br+, \verb+cr+, \verb+ur+.

Of these, $4$~are considered as \textit{inner points}: \verb+bb+,
\verb+bc+, \verb+cb+ and \verb+cc+.

When the parameter \Lkeyword{pos} of \Lcs{psProjection} is assigned
one of these four inner points, it means that the latter will be
situated at the origin of the plane of projection.

When the parameter \Lkeyword{pos} of \Lcs{psProjection} is assigned
one of the twelve remaining points, it indicates the direction in
which the text will be positioned relative to the origin of the
plane of projection.

For example, \verb+\psProjection[...,pos=uc](0,0)+ indicates that
the text will be centred relative to the point $(0,0)$ and
situated above it.

%% Le plan doit \^{e}tre d\'{e}fini par son origine
%% \Cadre{$\mathtt{(x_0ny_0,z_0)}$} et la normale %$
%% \Cadre{\texttt{[normal=1 0 0 90]}}. Pour les particularit\'{e}s
%% de la d\'{e}finition de la normale, car il y a trois fa\c{c}ons de le faire !
%% Tous les d\'{e}tails sont dans la partie \Cadre{\texttt{``Choisir un plan
%%     par son origine et une normale''}} de la documentation de
%% \texttt{doc-psProjection}.

%% La taille de la fonte doit \^{e}tre fix\'{e}e en points avec l'option
%% . .


\subsection{Examples of projecting onto a plane}

\subsubsection{Example 1: \Index{projection} onto $Oxy$, with the option \texttt{pos=bc}}

\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,
   viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-4 4 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   pos=bc,plan=monplan,
   text=j'aimerais tant voir Syracuse,
](0,0)%
\axesIIID(0,0,0)(4,2,1)
\composeSolid
\end{pspicture}
\end{LTXexample}

\subsubsection{Example 2: \Index{projection} onto $Oxy$, centred text}

\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,
   viewpoint=50 -90 89.99 rtp2xyz,,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-4 4 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text= L'\^{\i}le de P\^{a}ques et Kairouan,
   plan=monplan]%
\axesIIID(0,0,0)(4,2,1)
\end{pspicture}
\end{LTXexample}


\subsubsection{Example 3: \Index{projection} onto $Oxy$,  with different options
\texttt{pos=dl, etc.}}

\begin{center}
\psset{unit=.8}
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-10 10 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text=Et les grands oiseaux qui s'amusent,
   pos=dl,
   plan=monplan]%
\axesIIID(0,0,0)(8,1,1)
\rput(0,-1.5){\Cadre{\texttt{[pos=dl]}}}
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=.8}
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-10 10 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text= A glisser l'aile sous le vent.,
   pos=dr,
   plan=monplan]%
\axesIIID(0,0,0)(8,1,1)
\rput(0,-1.5){\Cadre{\texttt{[pos=dr]}}}
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=.8}
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-10 10 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text=Avant que ma jeunesse s'use,
   pos=ur,
   plan=monplan]%
\axesIIID(0,0,0)(8,1,1)
\rput(0,-1.5){\Cadre{\texttt{[pos=ur]}}}
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=.8}
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-10 10 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text=Et que mes printemps soient partis,
   pos=ul,
   plan=monplan]%
\axesIIID(0,0,0)(8,1,1)
\rput(0,-1.5){\Cadre{\texttt{[pos=ul]}}}
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=.8}
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-10 10 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text=J'aimerais tant voir Syracuse,
   pos=uc,
   plan=monplan]%
\axesIIID(0,0,0)(8,1,1)
\rput(0,-1.5){\Cadre{\texttt{[pos=uc]}}}
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=.8}
\begin{pspicture}(-4,-1.5)(4,1.5)
\psset{solidmemory}
\psset{lightsrc=10 0 10,viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-10 10 -1 1,args={0 0 0 [0 0 1]},name=monplan,]
\psProjection[object=texte,
   fontsize=20,linecolor=red,
   text=Pour m'en souvenir \`{a} Paris.,
   pos=dc,
   plan=monplan]%
\axesIIID(0,0,0)(8,1,1)
\rput(0,-1.5){\Cadre{\texttt{[pos=dc]}}}
\end{pspicture}
\end{center}

\subsubsection{Example 4: \Index{projection} onto $Oxy$ with text rotation}

\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psset{solidmemory}
\psset{lightsrc=10 0 10,
   viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-4 4 -3 3,args={0 0 0 [0 0 1]},name=monplan,]
\psset{plan=monplan}
\psProjection[object=texte,
   fontsize=28.45,linecolor=gray!50,
   text=Tournez man\`{e}ges]%
\psProjection[object=texte,
   fontsize=28.45,linecolor=red,
   text=Tournez man\`{e}ges,
   phi=60]%
\axesIIID(0,0,0)(4,3,1)
\end{pspicture}
\end{LTXexample}
The text rotation is introduced by the parameter \texttt{phi=60}.

\subsubsection{Example 5: positioning text at a point}

\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psset{solidmemory}
\psset{viewpoint=50 -90 89.99 rtp2xyz,Decran=50}
\psSolid[object=plan,definition=normalpoint,plangrid,
   base=-4 4 -3 3,args={0 0 0 [0 0 1]},name=monplan,]
\psset{fontsize=28.45,plan=monplan}
\psProjection[object=texte,
   linecolor=green,
   text=ici](-2,-2)
\psProjection[object=texte,
   linecolor=red,
   text=ou]%
\psProjection[object=texte,
   linecolor=blue,
   text=l\`{a}](2,2)
\psPoint(0,0,0){O}
\psPoint(-2,-2,0){O1}
\psPoint(2,2,0){O2}
\psdots[dotsize=0.2](O)(O1)(O2)
\axesIIID(0,0,0)(4,4,1)
\end{pspicture}
\end{LTXexample}

\subsection{Examples for \Index{projecting} onto a face of a solid}

\subsubsection{Method}

The solid must be memorised with the general option
\texttt{$\backslash$psset$\{$solidmemory$\}$}. The first thing to %$
do is to find the numbers of the faces of the solid with the
option \texttt{\Lkeyword{numfaces}=\Lkeyval{all}}.
\begin{LTXexample}[width=8cm]
\psset{viewpoint=50 20 30 rtp2xyz,Decran=100}
\begin{pspicture}(-4,-4)(4,4)
\psSolid[object=cube,a=2,action=draw,
   linecolor=red,numfaces=all]%
\axesIIID(1,1,1)(2,2,2)
\end{pspicture}
\end{LTXexample}

Then we define the projection plane as the chosen face, where in
this case we put \texttt{A} on the face with the index number 0:


Then we define the projection plane by a chosen face, there we put \texttt{A} on the face with the index number 0:
\begin{verbatim}
\psSolid[object=plan,definition=solidface,args=A 0,name=P0]
\psProjection[object=texte,linecolor=red,text=A,plan=P0]%
\end{verbatim}


\begin{LTXexample}[width=8cm]
\psset{viewpoint=50 20 30 rtp2xyz,Decran=50}
\begin{pspicture}(-4,-4)(4,5)
\psset{unit=0.5}
\psset{solidmemory}
\psSolid[object=cube,a=8,action=draw,name=A,linecolor=red]%
\psset{fontsize=100}
\psSolid[object=plan,action=none,
   definition=solidface,args=A 0,name=P0]
\psProjection[object=texte,linecolor=red,text=A,plan=P0]%
\psSolid[object=plan,action=none,
   definition=solidface,args=A 1,name=P1]
\psProjection[object=texte,linecolor=red,text=B,plan=P1]%
\psSolid[object=plan,action=none,
   definition=solidface,args=A 4,name=P4]
\psProjection[object=texte,linecolor=red,text=E,plan=P4]%
\axesIIID(4,4,4)(6,6,6)
\end{pspicture}
\end{LTXexample}

\subsubsection{Text rotation with the option \texttt{phi}}

\begin{LTXexample}[width=8cm]
\psset{viewpoint=50 20 30 rtp2xyz,Decran=50}
\psset{unit=0.4}
\begin{pspicture}(-8,-7)(4,9)
\psset{solidmemory}
\psSolid[object=cube,a=8,action=draw,linecolor=red,name=A]%
\psset{fontsize=200}
\psSolid[object=plan,action=none,
   definition=solidface,args=A 0,name=P0]
\psProjection[object=texte,linecolor=gray,text=A,plan=P0]%
\psset{phi=90}
\psProjection[object=texte,linecolor=red,text=A,plan=P0]%
\axesIIID(4,4,4)(6,6,6)
\end{pspicture}
\end{LTXexample}


\subsection{Examples of \Index{projecting} onto different faces of a solid}

\definecolor{rose}{rgb}{1,0.75,0.74}

\def\JuangJie{%
\begin{pspicture}(-3.5,-2)(3.5,4)
\psframe[fillcolor=cyan!50,fillstyle=solid](-3.5,-2)(3.5,4)%
\psSolid[object=cylindre,r=8,h=0.2,ngrid=1 36,action=draw**,hue=0.5 0.6]%
\psSolid[object=cube,a=8,h=0.2,ngrid=1 36,action=draw**,color1=magenta!50,
  color2=red!20,color3=yellow!50,color4=green!50,
  fcol=0 (color1) 1 (color2) 2 (color3) 3 (color4) 4(White)](0,0,4.2)%
\psset{solidmemory}%
\psSolid[object=cube,a=8,
   name=A,
   action=none](0,0,4.2)%
%% la face 0
\psSolid[object=plan,action=none,definition=solidface,
   base=-4 4 -4 4,args=A 0,name=P0]%
%\psSolid[object=plan,definition=plan,action=none,args=P0,planmarks,action=none,]%
\psset{fontsize=30,plan=P0}%
\psProjection[object=texte,text=po\`{e}me](0,3)%
\psProjection[object=texte,text=de](0,2)%
\psset{fontsize=55}
\psProjection[object=texte,linecolor=red,text=Juang Jie]
%% la face 4
\psSolid[object=plan,action=none,definition=solidface,base=-4 4 -4 4,args=A 4,phi=-90,name=P4]%
%\psSolid[object=plan,definition=plan,action=none,args=P4,fontsize=10,planmarks,action=none]%
\psset{fontsize=28.45,pos=bc,plan=P4}
\psProjection[object=texte,text={Dans ma jeunesse,}](0,3)%
\psset{fontsize=20}
\psProjection[object=texte,text=j'\'{e}coutais le son de la pluie](0,2)%
\psProjection[object=texte,text=dans les maisons de plaisir](0,1)%
\psProjection[object=texte,text=les tentures frissonnaient]%
\psProjection[object=texte,text=sous la lumi\`{e}re rouge](0,-1)%
\psProjection[object=texte,text=des cand\'{e}labres](0,-2)%
%% la face 1
\psSolid[object=plan,action=none,definition=solidface,base=-4 4 -4 4,args=A 1,phi=180,name=P1]%
%\psSolid[object=plan,definition=plan,action=none,args=P1,fontsize=10,planmarks,action=none]%
\psset{plan=P1}
\psProjection[object=texte,fontsize=25,text=Dans mon \^{a}ge m\^{u}r](0,3)%
\psProjection[object=texte,text=j'ai \'{e}cout\'{e} le son de la pluie](0,2)%
\psProjection[object=texte,fontsize=18,text={en voyage, \`{a} bord d'un bateau}](0,1)%
\psProjection[object=texte,text=les nuages pesaient bas]%
\psProjection[object=texte,text=sur l'immensit\'{e} du fleuve](0,-1)%
\psProjection[object=texte,text=une oie sauvage ](0,-2)%
\psProjection[object=texte,text=s\'{e}par\'{e}e de ses soeurs](0,-3)%
%% la face 2
\psSolid[object=plan,action=none,definition=solidface,base=-4 4 -4 4,args=A 2,phi=180,name=P2]%
%\psSolid[object=plan,definition=plan,action=none,args=P2,fontsize=10,planmarks,action=none]%
\psset{plan=P2}
\psProjection[object=texte,text=appelait dans le vent d'ouest](0,3)%
\psProjection[object=texte,text={Aujourd'hui,}](0,2)%
\psProjection[object=texte,text=j'\'{e}coute le son de la pluie](0,1)%
\psProjection[object=texte,text=sous le charme]%
\psProjection[object=texte,text=d'un ermitage monastique](0,-1)%
\psProjection[object=texte,text=Ma t\^{e}te est chenue](0,-2)%
\psProjection[object=texte,text=chagrins et bonheurs](0,-3)%
%% la face 3
\psSolid[object=plan,action=none,definition=solidface,args=A 3,phi=180,name=P3]%
%\psSolid[object=plan,definition=plan,action=none,args=P3,fontsize=10,planmarks,action=none]%
\psset{plan=P3}
\psProjection[object=texte,text=s\'{e}parations et retrouvailles](0,3)%
\psProjection[object=texte,text=tout est vanit\'{e}](0,2)%
\psProjection[object=texte,text={Dehors, sur les marches}](0,1)%
\psProjection[object=texte,text=les gouttes tambourinent]%
\psProjection[object=texte,text= jusqu'\`{a} l'aube](0,-1)%
\psProjection[object=texte,text=Juang Jie ](0,-3)%
\composeSolid
\end{pspicture}}

\def\MollyBloom{%
%\psset{lightsrc=-15 -9 5}
%\psset{viewpoint=20 -150 30 rtp2xyz,Decran=11}
\psset{solidmemory,visibility}
%% le plan de base
\psSolid[object=plan,
   definition=equation,
   ngrid=1. 1.,
   args={[0 0 1 0]},linecolor=red,
   base=-8 10 -8 8,
   linecolor=red,
   name=G]%
\psset{fontsize=25,,pos=bc,plan=G}
\psProjection[object=texte,
   phi=-90,
   text=le monologue de Molly,
   pos=bc,
   ](-5,0)
\psProjection[object=texte,text=dans Ulysse de James Joyce](1,-5,0)
\psset{h=1,fillcolor=yellow!50,incolor=rose,hollow}
\psset{fontsize=20,pos=cc}
%
\psSolid[object=ruban,name=ruban1,base=9 8 9 -8]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=O cet effrayant torrent tout au fond O et la mer \'{e}carlate]
%
\psSolid[object=ruban,name=ruban1,base=9 -8 -8 -8]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=quelquefois comme du feu et les glorieux couchers de soleil et]
%
\psSolid[object=ruban,name=ruban1,base=-8 7 7 7]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,fontsize=18,
   text=les ruelles bizarres les maisons roses et bleues et jaunes,]
%
\psSolid[object=ruban,name=ruban1,base=7 7 7 -6]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=et les roseraies et les jasmins et les g\'{e}raniums,]
%
\psSolid[object=ruban,name=ruban1,base=7 -6 -6 -6]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=et les cactus de Gibraltar quand j'\'{e}tais jeune fille,]
%
\psSolid[object=ruban,name=ruban1,base=-6 5 5 5]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,fontsize=18,
   text=quand j'ai mis la rose dans mes cheveux,]
%
\psSolid[object=ruban,name=ruban1,base=5 5 5 -4]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=comme les filles Andalouses,]
%
\psSolid[object=ruban,name=ruban1,base=5 -4 -3 -4]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=ou en mettrai-je une rouge oui,]
%
\psSolid[object=ruban,name=ruban1,base=-3 4 3 4]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,fontsize=18,
   text=sous le mur mauresque,]
%
\psSolid[object=ruban,name=ruban1,base=3 4 3 -2]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=je me suis dit apr\`{e}s,]
%
\psSolid[object=ruban,name=ruban1,base=3 -2 -1.5 -2]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=tout aussi bien,]
%
\psSolid[object=ruban,name=ruban1,base=-1.5 3 2 3]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=et alors je,]
\psSolid[object=ruban,name=ruban1,base=-8 -8 -8 7]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=les figuiers dans les jardins de l'Alameda et toutes,]
%
\psSolid[object=ruban,name=ruban1,base=-6 -6 -6 5]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=et une Fleur de la montagne oui,]
%
\psSolid[object=ruban,name=ruban1,base=-3 -4 -3 4]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=et comme il m'a embrass\'{e}e,]
%
\psSolid[object=ruban,name=ruban1,base=-1.5 -2 -1.5 3]
\psSolid[object=plan,action=none,definition=solidface,args=ruban1 0,name=R0,phi=-90]
\psProjection[object=texte,plan=R0,
   text=lui qu'un autre,]
%
\composeSolid
}

We project a poem, verse by verse, onto 4 faces of a cube. It is
necessary to use the option \texttt{solidmemory} at the beginning
\begin{verbatim}
\psset{solidmemory}
\psSolid[object=cube,a=8,name=A1](0,0,4.2)%
\end{verbatim}
of the code. We then define the cube, which is memorised with the
help of the command \texttt{name=A}:

\begin{verbatim}
\psset{solidmemory}
\psProjection[object=texte,text=po\`{e}me,fontsize=30,plan=P0](0,3)%
\psSolid[object=cube,a=8,name=A](0,0,4.2)%
\end{verbatim}

The number of each face needs to be known---from a previous run
of the code with the option \texttt{\Lkeyword{numfaces}=\Lkeyval{all}}. The following
commands:


\begin{verbatim}
\psSolid[object=plan,action=none,definition=solidface,args=A 0,name=P0]%
\psProjection[object=texte,text=po\`{e}me,fontsize=30,plan=P0](0,3)%
\end{verbatim}
define the plane $P0$ as the oriented plane of the face with index
number 0 of the solid $A$, before the word \texttt{po\`{e}me} is
projected onto $P0$, with a font size of 30~pts, to the point with
coordinates $(0,3)$ (within the coordinate system of that plane).
We could have changed the orientation of the text to
\texttt{phi=-90} for example, in the one or other of the commands.

By default, if the face is not visible, its text stays hidden. By
putting \Lkeyword{visibility} in the options, the text is shown when
it would otherwise not be, as in the following example.

You must not forget to write \texttt{$\backslash$composeSolid} at
the end of the text-writing commands for all these lines to be
taken into account. Any other  PStricks command will have
the usual effect and \verb+\composeSolid+ will be unnecessary.




\begin{center}
\psset{viewpoint=40 20 30 rtp2xyz,Decran=16}
\JuangJie \hfil
\psset{viewpoint=40 110 30 rtp2xyz,Decran=16}
\JuangJie
\end{center}
\begin{center}
\psset{viewpoint=40 200 30 rtp2xyz,Decran=16}
\JuangJie\hfil
\psset{viewpoint=40 290 30 rtp2xyz,Decran=16}
\JuangJie
\end{center}


\begin{center}
\begin{pspicture}(-8,-6)(8,3)
\psset{lightsrc=-15 -9 5}
\psframe(-8,-6)(8,3)
\psset{viewpoint=20 -150 30 rtp2xyz,Decran=11}\MollyBloom
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-8,-6)(8,7)
\psset{lightsrc=0 0 3}
\psframe(-8,-6)(8,7)
\psset{viewpoint=6 -150 89.9 rtp2xyz,Decran=2.8}\MollyBloom
\end{pspicture}
\end{center}

\endinput
