%%
%% This is file `pst-map3d.tex',
%%
%% IMPORTANT NOTICE:
%%
%% Package `pst-map3d.tex'
%%
%% Manuel Luque <Mluque5130@aol.com> (France)
%% Giuseppe Matarazzo  <joematara@hotmail.com> (Italy)
%% Herbert Voss <voss@perce.de> (Germany)
%%
%% May 09, 2004
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
%% DESCRIPTION:
%%   `pst-map3d' is a PSTricks package to create geographical objects
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fileversion{1.02}
\def\filedate{2004/05/09}

\message{`PST-map3d v\fileversion, \filedate\space (ML/GM/HV)}

\csname PSTMapThreeD\endcsname
\let\PSTMapThreeDLoaded\endinput

% Require PSTricks
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi % hv 2004-05-09
% David Carlisle interface to the `keyval' package.
\input pst-key.tex
%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax

\SpecialCoor
%
\define@key{psset}{path}{\edef\psk@WorldMap@Path{#1}} % chemin des données
\setkeys{psset}{path=data}
%
\pstheader{map3d.pro}
\define@key{psset}{RotX}{\edef\psk@TroisD@RotX{#1}} % rotation autour de Ox en degrés
\define@key{psset}{RotY}{\edef\psk@TroisD@RotY{#1}} % rotation autour de Oy en degrés
\define@key{psset}{RotZ}{\edef\psk@TroisD@RotZ{#1}} % rotation autour de OZ en degrés
\define@key{psset}{Radius}{\edef\psk@TroisD@Radius{#1}} % rayon de la sphère
%
\define@key{psset}{THETA}{\edef\psk@TroisD@Theta{#1}}
\define@key{psset}{PHI}{\edef\psk@TroisD@Phi{#1}}
\define@key{psset}{Dobs}{\edef\psk@TroisD@Dobs{#1}}
\define@key{psset}{Decran}{\edef\psk@TroisD@Ecran{#1}}
\setkeys{psset}{THETA=0,PHI=45,Dobs=20,Decran=25,Radius=5}
%
\setkeys{psset}{RotX=0,RotY=0,RotZ=0}
%
\define@key{psset}{increment}{\edef\psk@WorldMap@increment{#1}}
\setkeys{psset}{increment=10}
%
\define@key{psset}{maillageColor}{\edef\psk@WorldMap@maillageColor{#1}}
\setkeys{psset}{maillageColor= 0.5 0.5 0.5 }
%
\define@key{psset}{MapFillColor}{\edef\psk@WorldMap@Fillcolor{#1}} % couleur des continents
\setkeys{psset}{MapFillColor= 0.99 0.95 0.7 }
%
\define@key{psset}{level}{\edef\psk@WorldMap@level{#1}}
\setkeys{psset}{level=1}
%
\def\variablesTroisD{%
    /RotX \psk@TroisD@RotX\space def
    /RotY \psk@TroisD@RotY\space def
    /RotZ \psk@TroisD@RotZ\space def
    /THETA \psk@TroisD@Theta\space def
    /PHI \psk@TroisD@Phi\space def
    /Rsphere \psk@TroisD@Radius\space def
    /Dobs \psk@TroisD@Dobs\space def
    /DScreen \psk@TroisD@Ecran\space def
    /step \psk@WorldMap@level\space def
 }%
 %
\newif\ifPst@WorldMap@capitals
\define@key{psset}{capital}[false]{\@nameuse{Pst@WorldMap@capitals#1}}
\setkeys{psset}{capital=false}
%
\newif\ifPst@WorldMap@city
\define@key{psset}{city}[false]{\@nameuse{Pst@WorldMap@city#1}}
\setkeys{psset}{city=false}
%
\newif\ifPst@WorldMap@Rivers%   hv 2004-05-03
\define@key{psset}{rivers}[true]{\@nameuse{Pst@WorldMap@Rivers#1}}
\setkeys{psset}{rivers=true}
%
\newif\ifPst@WorldMap@maillage
\define@key{psset}{maillage}[true]{\@nameuse{Pst@WorldMap@maillage#1}}
\setkeys{psset}{maillage=true}
%
\def\WorldMapThreeD{\pst@object{WorldMapThreeD}}
\def\WorldMapThreeD@i{\@ifnextchar[{\WorldMapThreeD@do}{\WorldMapThreeD@do[]}}
\def\WorldMapThreeD@do[#1]{{%
\setkeys{psset}{#1}%
\begin@ClosedObj
\addto@pscode{%
  /increment \psk@WorldMap@increment\space def
  \variablesTroisD
  (\psk@WorldMap@Path/river.dat) run
  (\psk@WorldMap@Path/pisland.dat) run
  (\psk@WorldMap@Path/pborder.dat) run
  (\psk@WorldMap@Path/plake.dat) run
  1 setlinejoin
  0 0 translate
  /xunit {\pst@number\psxunit\space mul}def
  /yunit {\pst@number\psyunit\space mul}def
  /runit {\pst@number\psrunit\space mul}def
  gsave
  newpath
  0.5 0.8 0.8 setrgbcolor
  % cercle vu par l'observateur
  /RsphereScreen Rsphere DScreen mul Dobs div
    1 Rsphere dup mul Dobs dup mul div sub sqrt div runit def
  0 0 RsphereScreen 0 360 arc
  closepath
  fill
  grestore
  /condition {PSfacette 0 le} def
  /departPhi -90 def
tx@map3DDict begin
 MatriceTransformation
/Draw {
    {
CalculsPoints
closepath
gsave
Color setrgbcolor
fill
grestore
stroke
} forall
}def
%/Color {0.5 0.8 0.5} def
/Color {\psk@WorldMap@Fillcolor} def
border
    Draw
islands
    Draw
/Color {0.5 0.8 0.8} def
lake
    Draw
% les rivières
\ifPst@WorldMap@Rivers %   hv 2004-05-03
  /DrawRivers {
    { CalculsPoints
      0 0 1 setrgbcolor
      stroke
    } forall
  }def
  river
  DrawRivers
\fi
\ifPst@WorldMap@city
% les capitales
  (\psk@WorldMap@Path/c-cap.dat) run
  1.5
  citycapitals
  DrawCitys
% les autres villes
  (\psk@WorldMap@Path/c-sub.dat) run
  0.5
  CitySub
DrawCitys
\fi
\ifPst@WorldMap@capitals
% les capitales
  (\psk@WorldMap@Path/c-cap.dat) run
  2
  citycapitals
  DrawCitys
\fi
\ifPst@WorldMap@maillage
/maillageColor {\psk@WorldMap@maillageColor} def
    MaillageSphere
\fi
end}%
\end@ClosedObj
}}
%
\catcode`\@=\PstAtCode\relax
\endinput
