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 PSTANAMORPHOSISLoaded
\endcsname
10 \let\PSTANAMORPHOSISLoaded\endinput
11 % Requires some packages
12 \ifx\PSTricksLoaded\endinput\else \input pstricks
\fi
13 \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey
\fi
15 \def\filedate{2011/
10/
21}
16 \message{`PSTANAMORPHOSIS' v
\fileversion,
\filedate}
18 \pstheader{anamorphosis.pro
}
20 \edef\PstAtCode{\the\catcode`\@
} \catcode`\@=
11\relax
24 \pst@addfams
{pst-anamorphosis
}
26 \define@key
[psset
]{pst-anamorphosis
}{Rmirror
}{\edef\psk@Anamorphose@Rmirror
{#1 }}%
27 \psset[pst-anamorphosis
]{Rmirror=
3}
29 %% === Options spécifiques à l'anamorphose cylindrique -------------------------
30 \define@key
[psset
]{pst-anamorphosis
}{Xv
}{\edef\psk@Anamorphose@Xv
{#1 }}%
31 \define@key
[psset
]{pst-anamorphosis
}{Yv
}{\edef\psk@Anamorphose@Yv
{#1 }}%
32 \psset[pst-anamorphosis
]{Xv=
0,Yv=-
10}
34 %% === Options spécifiques à l'anamorphose conique -----------------------------
35 \define@key
[psset
]{pst-anamorphosis
}{Zs
}{\edef\psk@Anamorphose@Zs
{#1 }}%
36 \define@key
[psset
]{pst-anamorphosis
}{Zv
}{\edef\psk@Anamorphose@Zv
{#1 }}%
37 \psset[pst-anamorphosis
]{Zs=
10,Zv=
50}
39 %% === Options spécifiques à l'anamorphose spherique -----------------------------
40 \define@key
[psset
]{pst-anamorphosis
}{Zv
}{\edef\psk@Anamorphose@Zv
{#1 }}%
41 \psset[pst-anamorphosis
]{Zv=
10}
43 %% === Options spécifiques à la perspective -----------------------------
44 \define@key
[psset
]{pst-anamorphosis
}{ua
}{\edef\psk@Anamorphose@ua
{#1 }}%
45 \define@key
[psset
]{pst-anamorphosis
}{F
}{\edef\psk@Anamorphose@H
{#1 }}%
46 \define@key
[psset
]{pst-anamorphosis
}{D
}{\edef\psk@Anamorphose@D
{#1 }}%
47 \psset[pst-anamorphosis
]{ua=
2,F=
10,D=
4}
49 %% === Options scale pour placer une image EPS ---------------------
50 \define@key
[psset
]{pst-anamorphosis
}{scale
}{\edef\psk@Anamorphose@scale
{#1 }}%
51 \psset[pst-anamorphosis
]{scale=
1 1}
53 %% === Options translate pour placer une image PST---------------------
54 \define@key
[psset
]{pst-anamorphosis
}{translate
}{\edef\psk@Anamorphose@translate
{#1 }}%
55 \psset[pst-anamorphosis
]{translate=
0 0}
57 %% === Option pour ne pas dessiner l'image anamorphosée---------------------
58 \newif\ifPst@Anamorphose@draw
59 \define@key
[psset
]{pst-anamorphosis
}{drawanamorphosis
}[true
]{\@nameuse
{Pst@Anamorphose@draw
#1}}
60 \psset[pst-anamorphosis
]{drawanamorphosis=true
}
62 %% === Option pour ne pas dessiner l'image vue ---------------------
64 \newif\ifPst@Anamorphose@image
65 \define@key
[psset
]{pst-anamorphosis
}{image
}[false
]{\@nameuse
{Pst@Anamorphose@image
#1}}
66 \psset[pst-anamorphosis
]{image=true
}
67 %% Reservation des noms de macros
68 % adaptation de la macro de pst-solides3d
69 % #1=type de reservation associee a une liste qui
70 % doit forcement etre du type pst@anamorphosis@list@#1
71 \def\pst@anamorphosis@reservednames
#1{%
72 \edef\@tempa
{\csname pst@anamorphosis@list@
#1\endcsname}
73 \@for
\name:=\@tempa
\do{%
74 \expandafter\def\csname pst@anamorphosis@
#1@
\name\endcsname{}%
76 % nature de l'anamorphose
77 \def\pst@anamorphosis@list@type
{%
78 cylindrical,conical,spherical,perspective,inverseperspective,cylindricalV
}
80 %% Reservation de macros correspondants aux types
81 \pst@anamorphosis@reservednames
{type
}
82 \define@key
[psset
]{pst-anamorphosis
}{type
}{%
83 \ifcsname pst@anamorphosis@type@
#1\endcsname
84 \def\psk@anamorphosis@type
{pst-
#1}%
86 \@pstrickserr
{The anamorphosis
#1 is not defined, the anamorphosis by default is
89 % anamorphose par defaut
90 \psset[pst-anamorphosis
]{type=cylindrical
}%
92 \pst@def
{optionsanamorphosis
}<
%
93 /unit
{\pst@number
\psunit mul
} def
94 /Xv
\psk@Anamorphose@Xv unit def
95 /Yv
\psk@Anamorphose@Yv unit def
96 /Zv
\psk@Anamorphose@Zv unit def
97 /Zs
\psk@Anamorphose@Zs unit def
98 /Rmirror
\psk@Anamorphose@Rmirror unit def
99 /R Rmirror dup mul def
100 /ua
\psk@Anamorphose@ua unit def
101 /yH
\psk@Anamorphose@H unit def
102 /xD
\psk@Anamorphose@D unit def
103 /Anamorphose
{\psk@anamorphosis@type
} def
104 \psk@Anamorphose@scale
105 % pour tenir d'un changement d'échelle global
106 /s@@y exch
\pst@number
\psyunit mul
28.45274 div def
107 /s@@x exch
\pst@number
\psxunit mul
28.45274 div def
110 \def\psanamorphosis{\def\pst@par
{}\pst@object
{psanamorphosis
}}
111 \def\psanamorphosis@i
{\@ifnextchar(
{\psanamorphosis@do
}{\psanamorphosis@do(
0,
0)
}}
112 \def\psanamorphosis@do(
#1)
#2{% #2 = fichier.eps à transformer
118 \pst@coor /t@@y ED /t@@x ED
% Translate
120 \tx@optionsanamorphosis
121 \ifPst@Anamorphose@image
124 \ifPst@Anamorphose@draw
125 tx@anamorphosisPathDict begin