1 %% This work may be distributed and/or modified under the
2 %% conditions of the LaTeX Project Public License, either version 1.3
3 %% of this license or (at your option) any later version.
4 %% The latest version of this license is in
5 %% http://www.latex-project.org/lppl.txt
6 %% and version 1.3 or later is part of all distributions of LaTeX
7 %% version 2003/12/01 or later.
9 \csname PSTANAMORPHOSISAddLoaded
\endcsname
10 \let\PSTANAMORPHOSISAddLoaded\endinput
11 % Requires some packages
12 \ifx\PSTANAMORPHOSISLoaded\endinput\else \input pst-anamorphosis
\fi
13 \ifx\PSTnodesLoaded\endinput\else\input pst-node
\fi
14 \ifx\MultidoLoaded\endinput\else \input multido.tex
\fi
15 \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey
\fi
17 \def\filedate{2011/
10/
13}
18 \message{`PSTANAMORPHOSISAdd' v
\fileversion,
\filedate}
21 \edef\PstAtCode{\the\catcode`\@
} \catcode`\@=
11\relax
25 \pst@def
{optionsanamorphosisAdd
}<
%
26 \psk@Anamorphose@translate
32 \def\pslineA{\pst@object
{pslineA
}}
35 \tx@optionsanamorphosis
36 \tx@optionsanamorphosisAdd
40 \pst@getcoors
[\pslineA@ii
%
44 \ifx\pslinestyle\psls@@symbol
\addto@pscode
{ \psls@symbol SymbolLine
}%
48 /n1 lespoints length
2 div cvi def
% nbre de points
58 % Tableau general des points
61 TableauPoints i get aload pop
63 TableauPoints i
1 add get aload pop
68 K X2 mul
1 K sub X1 mul add
69 K Y2 mul
1 K sub Y1 mul add
70 tx@anamorphosisPathDict begin Anamorphose end
78 TAB compteur get aload pop
80 % \ifPst@noCurrentPoint\else\pst@cp\fi % current point?
81 \pslineA@iii
% arc and lineto type
82 \tx@Line
% .pro function
89 /r
\pst@number
\pslinearc def
90 /Lineto
{ \tx@Arcto
} def
92 /Lineto /lineto load def
94 \ifshowpoints true
\else false
\fi
98 \def\pscircleA{\def\pst@par
{}\pst@object
{pscircleA
}}
99 \def\pscircleA@i
{\@ifnextchar(
{\pscircleA@do
}{\pscircleA@do(
0,
0)
}}
100 \def\pscircleA@do(
#1)
#2{%
103 \pssetlength\pst@dimc
{#2}%
104 \def\pst@linetype
{4}%
106 \pst@coor /yC exch def /xC exch def
107 \ifPst@SpecialLength
\pst@SpecialLength
\else \pst@number
\pst@dimc
\fi
108 \psk@dimen CLW mul sub /rayon exch def
110 tx@anamorphosisPathDict begin Anamorphose end
112 0 1 360 {/iA exch def
113 iA cos rayon mul xC add
114 iA sin rayon mul yC add
115 tx@anamorphosisPathDict begin Anamorphose end
118 \ifPst@variableLW
\pst@flattenpath
\fi
125 \def\psbezierA{\pst@object
{psbezierA
}}
128 \tx@optionsanamorphosis
129 \tx@optionsanamorphosisAdd
133 \pst@getcoors
[\psbezierA@ii
%
139 [0 2 lespoints length
2 sub
{/iP ED
141 lespoints iP
1 add get
142 tx@anamorphosisPathDict begin Anamorphose end
144 \ifPst@noCurrentPoint
\else\pst@cp
\fi
145 \ifshowpoints true
\else false
\fi
146 \ifx\pslinestyle\psls@@symbol
\psls@symbol OpenSymbolBezier
149 \ifshowpoints \tx@BezierShowPoints
\fi
152 \def\pst@linetype
{1}%
153 \ifx\pslinestyle\psls@@symbol
\def\pslinestyle{none
}\fi%
156 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
157 \def\pscurveA{\pst@object
{pscurveA
}}
160 \tx@optionsanamorphosis
161 \tx@optionsanamorphosisAdd
165 \pst@getcoors
[\pscurveA@ii
% \pst@coors on stack
171 [0 2 lespoints length
2 sub
{/iP ED
173 lespoints iP
1 add get
174 tx@anamorphosisPathDict begin Anamorphose end
176 \ifPst@noCurrentPoint
\else\pst@cp
\fi % current point
177 \psk@curvature
\space /c ED /b ED /a ED
178 \ifshowpoints true
\else false
\fi
179 \ifx\pslinestyle\psls@@symbol
\psls@symbol OpenSymbolCurve
\else \tx@OpenCurve
\fi
180 \ifPst@variableLW
\pst@flattenpath
\fi
182 \ifx\pslinestyle\psls@@symbol
\def\pslinestyle{none
}\fi%
186 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
187 \def\psccurveA{\pst@object
{psccurveA
}}
190 \tx@optionsanamorphosis
191 \tx@optionsanamorphosisAdd
195 \pst@getcoors
[\psccurveA@ii
% \pst@coors on stack
201 [0 2 lespoints length
2 sub
{/iP ED
203 lespoints iP
1 add get
204 tx@anamorphosisPathDict begin Anamorphose end
206 \ifPst@noCurrentPoint
\else\pst@cp
\fi % current point
207 \psk@curvature
\space /c ED /b ED /a ED
208 \ifshowpoints true
\else false
\fi
209 \ifx\pslinestyle\psls@@symbol
\psls@symbol ClosedSymbolCurve
\else \tx@ClosedCurve
\fi
210 \ifPst@variableLW
\pst@flattenpath
\fi
212 \ifx\pslinestyle\psls@@symbol
\def\pslinestyle{none
}\fi%
216 \def\pnodeA{\def\pst@par
{}\pst@object
{pnodeA
}}
217 \def\pnodeA@i(
#1)
#2{{%
220 \tx@optionsanamorphosis
221 \tx@optionsanamorphosisAdd
223 tx@anamorphosisPathDict begin Anamorphose end
224 \pst@number
\psyunit div exch
225 \pst@number
\psxunit div exch
230 \def\movetoA{\def\pst@par
{}\pst@object
{movetoA
}}
231 \def\movetoA@i(
#1)
{{%
234 \tx@optionsanamorphosis
235 \tx@optionsanamorphosisAdd
237 tx@anamorphosisPathDict begin Anamorphose end
240 % choix de la police et de la taille des caracteres en cm !!
241 \define@key
[psset
]{pst-anamorphosis
}{PSfont
}{\def\pst@Anamorphose@PSfont
{/
#1 }}
242 \define@key
[psset
]{pst-anamorphosis
}{fontsize
}{\def\pst@Anamorphose@fontsize
{#1 }}
243 %\define@key[psset]{pst-anamorphosis}{RotationAngleText}{\edef\psk@Anamorphose@RotationAngleText{#1 }}%
244 \psset[pst-anamorphosis
]{PSfont=Times-Roman,fontsize=
35}%,RotationAngleText=0}
246 \def\pstextA{\def\pst@par
{}\pst@object
{pstextA
}}
247 \def\pstextA@i
{\@ifnextchar(
{\pstextA@do
}{\pstextA@do(
0,
0)
}}
248 \def\pstextA@do(
#1)
#2{% #2 = texte à transformer
253 \pst@coor /t@@y ED /t@@x ED
% Translate
254 \tx@optionsanamorphosis
255 /fontsize
{\pst@Anamorphose@fontsize
} bind def
256 /PSfont
{\pst@Anamorphose@PSfont
} def
257 %/RotationAngleText \psk@Anamorphose@RotationAngleText def
258 %% D'après un fichier original de
259 %%(c) P. Kleiweg 1997
262 %% Arnaud Schmittbuhl
263 %% Jean-Paul Vignault
264 %% les commentaires sont de Jean-Paul Vignault
266 %% Caractères accentués
267 /ReEncode
{ exch findfont
268 dup length dict begin
{ 1 index /FID eq
{pop pop
} {def
} ifelse
269 }forall /Encoding ISOLatin1Encoding def currentdict end definefont
271 /Font PSfont /ISOfont ReEncode /ISOfont def
272 %% decalage en picas du texte en
273 %% dessous de la ligne y=0
274 %% la procedure de base pour la transformation des points du chemin
277 tx@anamorphosisPathDict begin Anamorphose end
280 %% pour remplacer 'move'
282 %% on teste le booleen place 2 tokens plus en avant sur la pile
283 %% si c'est 'true', alors on en est au 1er appel => on initialise
288 %% puis on applique warp a notre point
290 %% on enleve le 'true' pour mettre un 'false' a la place
293 %% pour remplacer 'lineto
297 %% pour remplacer 'curveto'
304 %% 'warpit' declenche la transformation du chemin courant
307 { warpmove
} { warpline
} { warpcurve
} { closepath
} pathforall
310 %% definition des differentes constantes
311 % taille de des caracteres
312 Font findfont fontsize scalefont setfont
313 /warptxt (
#2) def
% texte a deformer
314 /warpwidth warptxt stringwidth pop def
% largeur horizontale du texte
315 /warphalf warpwidth
2 div def
% demi-largeur horizontale
316 %% le chemin constitue avec la chaine de caracteres
317 warptxt warphalf neg
0 moveto
%% on se deplace (init chemin)
318 true charpath
%% on cree le chemin
319 %% maintenant on y va
320 warpit
%% on applique le pathforall
322 \pst@usecolor
\psfillcolor
326 \ifPst@Anamorphose@image
327 % le texte dans le cercle
330 warptxt warphalf neg
0 moveto
%% on se deplace (init chemin)
333 \pst@usecolor
\psfillcolor
345 %% =============================================================================
346 %% AFP : Anamorphose à partir d'un Fichier PST.
347 %% Le code de pscustom est évalué après reroutage de la macro. Il est exécuté
348 %% dans le contexte tx@anamorphosisPathDict
349 %% =============================================================================
351 \def\pst@begin@AFP
{\xdef\pst@code
{\pst@code
352 tx@anamorphosisPathDict begin
353 \tx@optionsanamorphosis
354 \tx@optionsanamorphosisAdd
\space}}
355 \def\pst@end@AFP
{\xdef\pst@code
{\pst@code end
\space}}
356 %% pscustom adapté à la tâche
357 \def\pscustomAFP{\def\pst@par
{}\pst@object
{pscustomAFP
}}
358 \long\def\pscustomAFP@i
#1{%
361 \the\pst@customAFPdefs
362 \setbox\pst@hbox=
\hbox{#1}%
367 %% pscustomdefs associé
368 \newtoks\pst@customAFPdefs
370 \def\moveto(
#1)
{\pst@@getcoor
{#1}\addto@pscode
{\pst@coor moveto
}}%
371 \def\psline(
#1)
{\pst@@getcoor
{#1}\addto@pscode
{\pst@coor lineto
}}%
372 \def\closepath{\addto@pscode
{closepath
}}%
373 \def\newpath{\addto@pscode
{newpath
}}%
374 \def\stroke{\def\pst@par
{}\pst@object
{stroke
}}%
375 \def\fill{\def\pst@par
{}\pst@object
{fill
}}%
379 \def\curvetoinv{\pst@getcoors
{\space}\fcurvetoinv}
380 \def\fcurvetoinv{\addto@pscode
{curvetoinv
}}
381 \let\SAUVEpscustom\pscustom
382 \let\SAUVEpsbezier\psbezier
383 \let\pscustom\pscustomAFP
384 \let\psbezier\curvetoinv
386 \let\psbezier\SAUVEpsbezier
387 \let\pscustom\SAUVEpscustom
390 %%%% Fin de AFP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%