summaryrefslogtreecommitdiff
path: root/obsolete/graphics/pstricks/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/graphics/pstricks/contrib')
-rw-r--r--obsolete/graphics/pstricks/contrib/palette/README (renamed from obsolete/graphics/pstricks/contrib/README)0
-rw-r--r--obsolete/graphics/pstricks/contrib/palette/palette.sty (renamed from obsolete/graphics/pstricks/contrib/palette.sty)0
-rw-r--r--obsolete/graphics/pstricks/contrib/palette/palette.tex (renamed from obsolete/graphics/pstricks/contrib/palette.tex)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/Changes23
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile48
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/README48
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib129
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdfbin0 -> 4588365 bytes
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex1266
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro2092
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty8
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex1640
12 files changed, 5254 insertions, 0 deletions
diff --git a/obsolete/graphics/pstricks/contrib/README b/obsolete/graphics/pstricks/contrib/palette/README
index 86ca603526..86ca603526 100644
--- a/obsolete/graphics/pstricks/contrib/README
+++ b/obsolete/graphics/pstricks/contrib/palette/README
diff --git a/obsolete/graphics/pstricks/contrib/palette.sty b/obsolete/graphics/pstricks/contrib/palette/palette.sty
index 352b31e734..352b31e734 100644
--- a/obsolete/graphics/pstricks/contrib/palette.sty
+++ b/obsolete/graphics/pstricks/contrib/palette/palette.sty
diff --git a/obsolete/graphics/pstricks/contrib/palette.tex b/obsolete/graphics/pstricks/contrib/palette/palette.tex
index 6c96c02f03..6c96c02f03 100644
--- a/obsolete/graphics/pstricks/contrib/palette.tex
+++ b/obsolete/graphics/pstricks/contrib/palette/palette.tex
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/Changes b/obsolete/graphics/pstricks/contrib/pst-vue3d/Changes
new file mode 100644
index 0000000000..e4bb5d2241
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/Changes
@@ -0,0 +1,23 @@
+----- pst-vue3d.tex
+1.24 2008-02-21 hv: draw circles for 360 degrees instead of 359
+1.23 2007-03-26 hv: load pst-vue3d.pro instead of 3d.pro
+1.22 2005-05-10 hv: make the unit option available
+1.21 2005-02-21 hv: use always pst-xkey and using \def instead
+ of \edef for the parameter definitions
+1.2 2004-09-12 hv: use always \pst@object for the definition
+ of the 3d objects
+1.1 2004-08-23 hv: use the default macro style of pstricks
+1.0i 2004-06-05 hv: fixed bug
+1.0h 2004-01-05 ml: added dodecaedron
+1.0g 2003-12-21 hv: fixed a bug in \pNodeThreeD
+1.0f 2003-12-20 hv: added two eye macros, drop the options for
+ CX,CY,CZ and Xorigine,...
+ added option SphericalCoor and modify all
+ macros to use it
+1.0e 2003-12-18 hv: edit the \AxesThreeD macro
+1.0d 2003-12-18 hv: fix bug in truncated pyramid
+
+
+----- pst-vue3d.pro
+33 2007-03-26 hv: renamed to pst-vue3d.pro
+32 2005-05-10 hv: make the unit option available
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile b/obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile
new file mode 100644
index 0000000000..1eac89064a
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile
@@ -0,0 +1,48 @@
+
+# `Makefile' for `pst-3dplot.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = pst-vue3d
+
+MAIN = $(PACKAGE)-doc
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+ GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+ if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+ if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+ makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+ $(basename $<).glo
+ makeindex -t $(basename $<).ilg -o $(basename $<).ind \
+ $(basename $<).idx
+ bibtex $(basename $<)
+ $(LATEX) $<
+ $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .Roessler .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps)
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+# EOF
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/README b/obsolete/graphics/pstricks/contrib/pst-vue3d/README
new file mode 100644
index 0000000000..12ea4dd201
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/README
@@ -0,0 +1,48 @@
+%% Package `pst-vue3d.tex'
+%%
+%% Herbert Voss <voss _at_ pstricks.de> (Germany)
+%%
+%% 2007-03-26
+%%
+
+PSTricks offers excellent macros to insert more or less complex
+graphics into a document. pstricks.tex itself is the base for several
+other additional packages, which are mostly named pst-xxxx,
+like pst-vue3d. There exists several packages for plotting three
+dimensional graphical objects. pst-vue3d is similiar to the
+pst-plot package for two dimensional objects and mathematical functions.
+
+
+Save the files
+
+pst-vue3d.sty
+pst-vue3d.tex
+pst-vue3d.pro
+
+in any place, where latex or any other TeX program will find it.
+The pro file should go into $TEXMF$/dvips/pstricks/.
+
+pst-vue3d uses the extended version of the keyval package. So
+be sure that you
+- have installed xkeyval with the special pst-xkey
+ (CTAN: tex-archive/macros/latex/contrib/xkeyval/)
+- do not load another package after pst-vue3d, which loads
+ the old keyval.sty or pst-key.tex
+
+
+If you like to get the documentation file in another format run
+
+latex pst-vue3d-doc.tex
+bibtex pst-vue3d.doc
+latex pst-vue3d-doc.tex
+dvips pst-vue3d-doc.dvi
+
+to get a PostScript file. But pay attention, that the pst-vue3d
+files are saved in the above mentioned way, before you run
+latex on the documentation file.
+
+The intermediate DVI file works only with viewers which can
+interprete the embedded PostScript code.
+
+For another PDF output read the Introduction from
+the documentation.
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
new file mode 100644
index 0000000000..3b785845e2
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
@@ -0,0 +1,129 @@
+@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} }
+
+@Book{PostScript,
+ Author = {Kollock, Nikolai G.},
+ Title = {PostScript richtig eingesetzt: vom Konzept zum
+ praktischen Einsatz},
+ Publisher = {IWT},
+ Address = {Vaterstetten},
+ year = 1989,
+}
+
+@Manual{pstricks,
+ Title = {PSTricks - {\PS} macros for Generic TeX},
+ Author = {Timothy Van Zandt},
+ Organization = {},
+ Address = {\url{http://www.tug.org/application/PSTricks}},
+ Note = {},
+ year = 1993,
+}
+
+
+@Manual{pdftricks,
+ Title = {PSTricks Support for pdf},
+ Author = {Herbert Voss},
+ Organization = {},
+ Address = {\url{http://PSTricks.de/pdf/pdfoutput.phtml}},
+ Note = {},
+ year = 2002,
+}
+
+@Manual{miwi,
+ Title = {References for \TeX{} and Friends},
+ Author = {Michael Wiedmann and Peter Karp},
+ Organization = {},
+ Address = {\url{http://www.miwie.org/tex-refs/}},
+ Note = {},
+ year = 2003,
+}
+
+
+@Manual{pstlens:2001,
+ Title = {PST-lens - {\PS} macros for Generic TeX},
+ Author = {Denis Girou and Manuel Luque},
+ Organization = {},
+ Address = {\url{ftp://ftp.dante.de/tex-archive/graphics/pstricks/contrib/pst-lens/}},
+ Note = {},
+ year = 2001,
+}
+
+@Manual{vue3d:2002,
+ Title = {Vue en 3D},
+ Author = {Manuel Luque},
+ Organization = {},
+ Address = {\url{http://members.aol.com/Mluque5130/vue3d16112002.zip}},
+ Note = {},
+ year = 2002,
+}
+
+@Article{dtk02.2:jackson.voss:plot-funktionen,
+ author = {Laura E. Jackson and Herbert Vo{\ss}},
+ title = {Die {P}lot-{F}unktionen von {\texttt{pst-plot}}},
+ journal = dtk,
+ year = 2002,
+ volume = {2/02},
+ altvolume = 2,
+ altnumber = 14,
+ month = jun,
+ pages = {27--34},
+ annote = bretter,
+ keywords = {},
+ abstract = { Im letzten Heft wurden die mathematischen Funktionen von
+ \PS~im Zusammenhang mit dem {\LaTeX}-Paket
+ \texttt{pst-plot} zum Zeichnen von Funktionen beschrieben
+ und durch Beispiele erl{\"a}utert. In diesem Teil werden
+ die bislang nur erw{\"a}hnten Plot-Funktionen f{\"u}r
+ externe Daten behandelt. }
+}
+
+@Article{dtk02.1:voss:mathematischen,
+ author = {Herbert Vo{\ss}},
+ title = {Die mathematischen {F}unktionen von {P}ostscript},
+ journal = dtk,
+ year = 2002,
+ volume = {1/02},
+ altvolume = 1,
+ altnumber = 14,
+ month = mar,
+ pages = {40-47},
+ annote = bretter,
+ keywords = {},
+ abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im
+ Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es
+ darum geht zu beurteilen, was es denn nun im eigentlichen
+ Sinne ist. Au{\ss}erdem wird h{\"a}ufig vergessen, dass
+ sich mit den \PS-Funktionen viele Dinge erledigen lassen,
+ bei denen sonst auf externe Programme zur{\"u}ckgegriffen
+ wird. Dies wird im Folgenden f{\"u}r die mathematischen
+ Funktionen im Zusammenhang mit dem Paket \texttt{pst-plot}
+ gezeigt. }
+}
+
+
+@Book{companion,
+ author = {Michel Goosens and Frank Mittelbach and Alexander
+ Samarin},
+ title = {The {\LaTeX} {G}raphics {C}ompanion},
+ publisher = {{Addison-Wesley Publishing Company}},
+ year = {2004},
+ edition = {2.},
+ address = {Reading, Mass.}
+}
+
+@Book{PSTricks2,
+ author = {Herbert Vo\ss},
+ title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX},
+ edition = {4.},
+ publisher = {DANTE -- Lehmanns},
+ year = {2007},
+ address = {Heidelberg/Hamburg}
+}
+
+@Book{voss:math,
+ author = {Herbert Vo\ss},
+ title = {\LaTeX\ in {M}athematik und {N}aturwissenschaften},
+ publisher = {{Franzis-Verlag}},
+ year = {2006},
+ address = {Poing}
+}
+
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
new file mode 100644
index 0000000000..8f43cdafea
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
Binary files differ
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
new file mode 100644
index 0000000000..e0808473fc
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
@@ -0,0 +1,1266 @@
+\listfiles
+\documentclass[english]{article}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage{lmodern}% only for PDF output
+%\usepackage[scaled=0.9]{luximono}
+\usepackage[a4paper,bmargin=2cm,tmargin=2cm]{geometry}
+\usepackage{url}
+\usepackage{morefloats}
+\setcounter{totalnumber}{10}
+\setcounter{dbltopnumber}{10}
+\renewcommand{\textfraction}{0}
+\usepackage{subfig}
+% Mluque5130@aol.com
+% 17 octobre 2003
+% Herbert Voss <voss@pstricks.de>
+% March 2007
+\def\UrlFont{\small\ttfamily}
+\makeatletter
+\def\verbatim@font{\small\normalfont\ttfamily}
+\makeatother
+\usepackage[colorlinks,linktocpage]{hyperref}
+\usepackage[english]{babel}
+\usepackage{pstricks,multido,pst-grad}
+\usepackage{pst-vue3d}
+\let\VueFversion\fileversion
+\usepackage{showexpl}
+\def\PS{PostScript}
+%
+\definecolor{GrisClair} {rgb}{0.6,0.7,0.8}
+\definecolor{GrisTresClair} {rgb}{0.8,0.9,0.7}
+\definecolor{GrayA} {rgb}{0.35,0.95,0.95}
+\definecolor{GrayB} {rgb}{0.85,0.85,0.35}
+\definecolor{GrayC} {rgb}{0.75,0.35,0.55}
+\definecolor{GrayD} {rgb}{0.65,0.65,0.65}
+\definecolor{GrayE} {rgb}{0.7,0.9,0.65}
+\definecolor{LightBlue}{rgb}{.68,.85,.9}
+%
+\newcommand\tapis{%
+ \psset{normaleLatitude=90,normaleLongitude=0}
+ \FrameThreeD[fillcolor=green,fillstyle=solid](0,0,-5)(-20,-20)(20,20)
+ \QuadrillageThreeD[grille=10](0,0,-5)(-20,-20)(20,20)%
+}
+%
+\def\Table{{%
+ \CubeThreeD[A=30,B=30,C=2,CubeColorFaceOne={.7 .6 .5}](0,0,-2)
+ \psset{normaleLongitude=0,normaleLatitude=90}
+ \QuadrillageThreeD[linewidth=0.2mm,linecolor=white,%
+ grille=5](0,0,0)(-30,-30)(30,30)
+}}
+%
+\def\DessusTable{{%
+ \psset{normaleLongitude=0,normaleLatitude=90}
+ \QuadrillageThreeD[linewidth=0.2mm,linecolor=gray,%
+ grille=5](0,0,0)(-30,-30)(30,30)%
+}}
+\def\PlansOXYZ{{%
+ \psset{normaleLongitude=0,normaleLatitude=90}
+ \FrameThreeD[fillstyle=solid,fillcolor=GrisClair](0,0,0)(-50,0)(0,50)
+ \QuadrillageThreeD[linewidth=0.2mm,grille=10](0,0,0)(-50,0)(0,50)%
+ \psset{normaleLongitude=90,normaleLatitude=0}
+ \FrameThreeD[fillstyle=solid,fillcolor=GrisTresClair](0,0,0)(0,0)(50,-50)
+ \QuadrillageThreeD[linewidth=0.2mm,grille=10](0,0,0)(0,-50)(50,0)%
+ \psset{normaleLongitude=0,normaleLatitude=0}
+ \FrameThreeD[fillstyle=solid,fillcolor=GrisTresClair](0,0,0)(-50,0)(0,-50)
+ \QuadrillageThreeD[linewidth=0.2mm,grille=10](0,0,0)(-50,-50)(0,0)%
+ }}
+\psset{CubeColorFaceOne=1 1 1,%
+ CubeColorFaceTwo=1 0 0,%
+ CubeColorFaceThree=0 1 0,%
+ CubeColorFaceFour=0 0 1,%
+ CubeColorFaceFive=1 1 0,%
+ CubeColorFaceSix=0 1 1}
+%
+\def\hexagon{%
+\begin{pspicture}(-2.2,-2.2)(2.2,2)
+ \Table
+ \pNodeThreeD(-8.66,-5,0){A6}
+ \pNodeThreeD(-8.66,5,0){A1}
+ \pNodeThreeD(0,10,0){A2}
+ \pNodeThreeD(8.66,5,0){A3}
+ \pNodeThreeD(8.66,-5,0){A4}
+ \pNodeThreeD(0,-10,0){A5}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)(A6)}
+ \DessusTable
+ \endpsclip
+ \psset{A=5,B=5,C=5}
+ \CubeThreeD[RotZ=60](-6.83,-11.830,5)%6
+ \CubeThreeD[RotZ=120](6.83,-11.830,5)%5
+ \CubeThreeD(-13.86,0,5)%1
+ \CubeThreeD[RotZ=-60](-6.83,11.830,5)%2
+ \CubeThreeD[RotZ=-120](6.83,11.830,5)%3
+ \CubeThreeD[RotZ=180](13.86,0,5)%4
+\end{pspicture}%
+}
+%
+\def\stardodecagon{%
+ \begin{pspicture}(-2.2,-2)(2.2,2.2)
+ \Table
+ \pNodeThreeD(-6.83,-11.83,0){A6}%
+ \pNodeThreeD(-13.86,0,0){A1}%
+ \pNodeThreeD(-6.83,11.83,0){A2}%
+ \pNodeThreeD(6.83,11.83,0){A3}%
+ \pNodeThreeD(13.86,0,0){A4}%
+ \pNodeThreeD(6.83,-11.83,0){A5}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)(A6)}
+ \DessusTable
+ \endpsclip%
+ \psset{A=5,B=5,C=5}
+ \CubeThreeD[RotZ=105](-10.6066,6.12372,5)%2
+ \CubeThreeD[RotZ=45](0,12.2474,5)%1
+ \CubeThreeD[RotZ=345](10.6066,6.12372,5)%6
+ \CubeThreeD[RotZ=165](-10.6066,-6.12372,5)%3
+ \CubeThreeD[RotZ=225](0,-12.2474,5)%4
+ \CubeThreeD[RotZ=285](10.6066,-6.12372,5)%5
+\end{pspicture}}
+%
+\def\pentagon{%
+ \begin{pspicture}(-2.2,-2.2)(2.2,2.2)
+ \Table
+ \pNodeThreeD(8.5065,0,0){A1}%
+ \pNodeThreeD(2.6287,8.09,0){A2}%
+ \pNodeThreeD(-6.882,5,0){A3}%
+ \pNodeThreeD(-6.882,-5,0){A4}%
+ \pNodeThreeD(2.6287,-8.09,0){A5}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)}
+ \DessusTable
+ \endpsclip%
+ \psset{A=5,B=5,C=5}
+ \CubeThreeD(-11.88,0,5)%1
+ \CubeThreeD[RotZ=72](-3.617,-11.3,5)%5
+ \CubeThreeD[RotZ=-72](-3.617,11.3,5)%2
+ \CubeThreeD[RotZ=-144](9.61267,6.984,5)%3
+ \CubeThreeD[RotZ=144](9.61267,-6.984,5)%4
+\end{pspicture}}
+%
+\def\stardecagon{%
+ \begin{pspicture}*(-2.2,-1.75)(2.2,2.2)
+ \Table
+ \pNodeThreeD(-12.03,0,0){A1}%
+ \pNodeThreeD(-3.7178,-11.44,0){A2}%
+ \pNodeThreeD(9.7325,-7.071,0){A3}%
+ \pNodeThreeD(9.7325,7.071,0){A4}%
+ \pNodeThreeD(-3.7178,11.44,0){A5}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)}
+ \DessusTable
+ \endpsclip%
+ \psset{A=5,B=5,C=5}
+ \CubeThreeD[RotZ=81](-7.87375,-5.72061,5)%4
+ \CubeThreeD[RotZ=9](-7.87375,5.72061,5)%3
+ \CubeThreeD[RotZ=153](3.0075,-9.2561,5)%5
+ \CubeThreeD[RotZ=-63](3.0075,9.25615,5)%2
+ \CubeThreeD[RotZ=-135](9.73249,0,5)%1
+\end{pspicture}%
+}
+\def\octogon{%
+ \begin{pspicture}(-2.2,-2.2)(2.2,2.2)
+ \Table
+ \pNodeThreeD(12.07,5,0){A1}%
+ \pNodeThreeD(5,12.07,0){A2}%
+ \pNodeThreeD(-5,12.07,0){A3}%
+ \pNodeThreeD(-12.07,5,0){A4}%
+ \pNodeThreeD(-12.07,-5,0){A5}%
+ \pNodeThreeD(-5,-12.071,0){A6}%
+ \pNodeThreeD(5,-12.07,0){A7}%
+ \pNodeThreeD(12.07,-5,0){A8}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)(A6)(A7)(A8)}
+ \DessusTable
+ \endpsclip%
+ \psset{A=5,B=5,C=5}
+ \CubeThreeD(-17.07,0,5)%5
+ \CubeThreeD[RotZ=45](-12.07,-12.07,5)%6
+ \CubeThreeD[RotZ=90](0,-17.07,5)%7
+ \CubeThreeD[RotZ=135](12.07,-12.07,5)%8
+ \CubeThreeD[RotZ=-45](-12.07,12.07,5)%4
+ \CubeThreeD[RotZ=-90](0,17.07,5)%3
+ \CubeThreeD[RotZ=-135](12.07,12.07,5)%2
+ \CubeThreeD[RotZ=180](17.07,0,5)%1
+\end{pspicture}%
+}
+%
+\def\starhexadecagon{%
+ \begin{pspicture}(-2.2,-2)(2.2,2.2)
+ \Table
+ \pNodeThreeD(17.07,7.07,0){A1}%
+ \pNodeThreeD(7.07,17.07,0){A2}%
+ \pNodeThreeD(-7.07,17.07,0){A3}%
+ \pNodeThreeD(-17.07,7.07,0){A4}%
+ \pNodeThreeD(-17.07,-7.07,0){A5}%
+ \pNodeThreeD(-7.07,-17.07,0){A6}%
+ \pNodeThreeD(7.07,-17.07,0){A7}%
+ \pNodeThreeD(17.07,-7.07,0){A8}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)(A6)(A7)(A8)}
+ \DessusTable
+ \endpsclip%
+ \psset{A=5,B=5,C=5}
+ \CubeThreeD[RotZ=225](-17.07,0,5)%5
+ \CubeThreeD[RotZ=-90](-12.07,-12.07,5)%6
+ \CubeThreeD[RotZ=-45](0,-17.07,5)%7
+ \CubeThreeD(12.07,-12.07,5)%8
+ \CubeThreeD[RotZ=180](-12.07,12.07,5)%4
+ \CubeThreeD[RotZ=135](0,17.07,5)%3
+ \CubeThreeD[RotZ=90](12.07,12.07,5)%2
+ \CubeThreeD[RotZ=45](17.07,0,5)%1
+\end{pspicture}}
+%
+\def\DecorSable{%
+ \FrameThreeD[normaleLongitude=0,normaleLatitude=90,%
+ fillstyle=solid,fillcolor=GrayE](0,0,0)(-60,-60)(60,60)
+ \QuadrillageThreeD[normaleLongitude=0,normaleLatitude=90,%
+ linecolor=GrayA,linewidth=0.2mm,grille=10](0,0,0)(-60,-60)(60,60)%
+}
+\newpsstyle{GradGrayWhite}{fillstyle=gradient,%
+ gradbegin=blue,gradend=white,linewidth=0.1mm}%
+
+\begin{document}
+
+\title{3D views with \texttt{pst-vue3d}\\[3ex]
+ \normalsize (v. \VueFversion)}
+\author{Manuel Luque\thanks{\url{mluque5130 _at_ aol.com}}\
+and Herbert Vo\ss\thanks{\url{voss _at_ pstricks.de}}}
+
+\maketitle
+\tableofcontents
+\clearpage
+
+\section{Presentation}
+The 3D representation of an object or a landscape is one of the
+most interesting subject in computer science and have many
+industrial applications (car and plane design, video game
+etc\ldots). In a smaller way, one can obtain very didactic
+realizations using PSTricks with two peculiarities:
+\begin{itemize}
+ \item using PostScript;
+ \item being manageable through \LaTeX.
+\end{itemize}
+Package \texttt{pst-key} of David \textsc{Carlisle} allows to
+write commands with parameters. Using this as an interface, one
+can observe the result of little modifications of some parameters.
+Our parameters being here: the position of the watcher, the choice
+of an solid (cube, sphere etc\ldots) and many other things. I want
+to signal that
+\begin{itemize}
+\item
+Regarding 3D representation, one does not forget the package pst-3d by Timothy Van Zandt
+who has used the best part of Post\-Script. Althrought limited to parallel projections,
+this package allows to draw very interesting 3D figure.\footnote{A lot of different examples
+for 3D images are available at: \url{http://members.aol.com/Mluque5130/}}
+\item Thanks to Denis \textsc{Girou}, i have discovered the
+package \texttt{pst-xkey} and I have learned it.
+\item I have written another package for drawing picture reflecting
+in spherical mirrors.%
+\footnote{\url{http://melusine.eu.org/syracuse/mluque/BouleMiroir/boulemiroir.html}}
+
+It is a french paper which illustrate a study of Pr. Henri
+\textsc{Bouasse} from this book \textit{Optique sup\'erieure}, edited in $1917$ by Delagrave.
+\end{itemize}
+
+
+\section{Aims}
+First, we want to draw the 3D representation with elimination of
+the hidden parts of some objects.
+
+The position of the watcher will be defined by its spherical
+coordinates: the distances from the origin, the longitude $\theta$
+and the latitude $\phi$. We will choose, too, the distance of the
+projection screen from this point.
+
+Second, we want to define some $3D$ elements of the scene: the bricks.
+
+The following bricks are already defined
+\begin{itemize}
+\item A box given by its three dimensions \verb+A,B,C+: it could
+be turn into a cube or a dice.
+\item A point which can be defined it two ways
+\begin{itemize}
+\item By cartesian coordinates $(x,y,z)$
+\item Or by spherical coordinates $(R,\theta,\phi)$
+ ($\theta$, $\phi$ are, respectively, longitude and latitude).
+\end{itemize}
+\item A rectangle.
+\item A circle defined by the normal line to its plane, its center
+and its radius. An arc is defined as the circle with two limit
+angles.
+\item A tetrahedron given by the coordinates of the center of its
+base and the radius of the circle containing the vertex of each
+faces. We can make it rotate.
+\item A square pyramid given by the half of the length of the side
+of its base and its height. We can make it rotate and move.
+\item A sphere given by the coordinates of its center \verb+\SphereThreeD(x,y,z){Radius}+
+and its radius. We can make it rotate with the parameters
+\verb+RotX=...+, \verb+RotY=...+, \verb+RotZ=...+ We can choose to
+draw only some meridians and parallel circles.
+ \item A solid or empty half-sphere (same parameters than a sphere)
+ \item A vertical cylinder defined by its radius and its height. We
+ can make it rotate using the parameters \verb+RotX=...+, \verb+RotY=...+, \verb+RotZ=...+
+ An we can choose the center of its base in the same way than the Sphere.
+\item A cone and a truncated cone defined by the radius of their
+base, the height and the height of the truncature.
+\end{itemize}
+
+\vspace*{1cm}
+To construct a scene, one may choose himself the order of the
+objects. For example, if an object 1 is partially hidden by an
+object 2, we write, in the list of commands, first object 1 and
+second object 2.
+
+\section{Rotating in the 3D space}
+
+A 3D object can be rotated around every axes with the \verb+RotX+, \verb+RotY+ and
+\verb+RotZ+ option. They can be mixed in every combination. Figure~\ref{fig:rot} shows
+how a rotation around the z-axes works.
+
+\begin{figure}[!htb]
+\multido{\iRotZ=0+45}{8}{%
+ \begin{pspicture}(-1.5,-1.5)(1.5,1.5)
+ \psset{THETA=70,PHI=30,Dobs=200,Decran=10}
+ \psset{A=5,B=5,C=A,fillstyle=solid,fillcolor=GrisClair,%
+ linecolor=red, RotZ=\iRotZ}
+ \tapis\DieThreeD(0,0,0)%
+ \LineThreeD[linecolor=red,linestyle=dashed,arrows=->](0,0,0)(0,0,25)
+ \pNodeThreeD(0,0,12.5){Z'}
+ \uput[180](Z'){\texttt{RotZ=\iRotZ}}
+ \end{pspicture}\hfill %
+}
+
+\psset{THETA=-10,PHI=20,Dobs=200,Decran=10}
+\multido{\iCX=0+30}{8}{%
+ \begin{pspicture}(-1.5,-1.5)(1.5,1.5)
+ \AxesThreeD{->}(50,20,20)
+ \psset{A=20,B=5,C=10,fillstyle=solid,fillcolor=LightBlue,linecolor=gray}
+ \psset{RotZ=0,RotY=0,RotX=\iCX}
+ \CubeThreeD(0,0,0)%
+ \psset{linestyle=dashed}
+ \end{pspicture}\hfill%
+}%
+\caption{Diffenerent views of a die and a cube\label{fig:rot}}
+\end{figure}
+
+
+\section{Location of the cube in the space}
+Suppose that one wants to place a 10-units edge cube at the point
+$(x=40,y=40,z=35)$. First, the half edge of the cube will be
+define by the parameters : \verb+A=5,B=5,C=5+, and next the
+coordinates of its center by \texttt{(40,40,35)}. On the
+figure, the period of the grid is 10~units
+(figure~\ref{coordinates}).
+
+\begin{figure}[!htb]
+\centering
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=30,PHI=30,Dobs=200,Decran=12}
+\begin{pspicture}(-2.8,-3)(3.5,3.5)
+ \PlansOXYZ
+ \pNodeThreeD(40,40,35){G}
+ \pNodeThreeD(40,40,0){G_XY}
+ \pNodeThreeD(40,0,0){G_X}
+ \pNodeThreeD(0,40,0){G_Y}
+ \pNodeThreeD(0,0,35){G_Z}
+ \pNodeThreeD(0,40,35){G_YZ}
+ \pNodeThreeD(40,0,35){G_XZ}
+ \psdots(G)(G_XY)(G_XZ)(G_YZ)(G_X)(G_Y)(G_Z)
+ \psline(G)(G_XY)
+ \psline(G)(G_XZ)
+ \psline(G)(G_YZ)
+ \psline(G_Z)(G_XZ)
+ \psline(G_Z)(G_YZ)
+ \AxesThreeD{->}(55)
+\end{pspicture}
+\end{LTXexample}
+\caption{\label{coordinates}Origin \texttt{(40,40,35)}}
+\end{figure}
+
+\begin{figure}[!ht]
+\centering
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=30,PHI=30,Dobs=200,Decran=12}
+\begin{pspicture}(-2.8,-3)(3.5,3.5)
+ \PlansOXYZ
+ \pNodeThreeD(40,40,35){G}
+ \pNodeThreeD(40,40,0){G_XY}
+ \pNodeThreeD(40,0,0){G_X}
+ \pNodeThreeD(0,40,0){G_Y}
+ \pNodeThreeD(0,0,35){G_Z}
+ \pNodeThreeD(0,40,35){G_YZ}
+ \pNodeThreeD(40,0,35){G_XZ}
+ \psdots(G)(G_XY)(G_XZ)(G_YZ)(G_X)(G_Y)(G_Z)
+ \psline(G)(G_XY)
+ \psline(G)(G_XZ)
+ \psline(G)(G_YZ)
+ \psline(G_Z)(G_XZ)
+ \psline(G_Z)(G_YZ)
+ \psset{A=5,B=5,C=5}
+ \DieThreeD(40,40,35)%
+ \AxesThreeD{->}(55)
+\end{pspicture}
+\end{LTXexample}
+\caption{\label{CubeOne}The placed cube.}
+\end{figure}
+
+
+To make it rotate of around $OX$ , one adds the parameter \verb+RotX=90+(figure~\ref{RotX}).
+
+\begin{figure}[!ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=30,PHI=30,Dobs=200,Decran=12}
+\begin{pspicture}(-2.8,-3)(3.5,3.5)
+ \PlansOXYZ
+ \AxesThreeD{->}(55)
+ \psset{A=5,B=5,C=5,RotX=90}
+ % projections sur les plaans
+ \DieThreeD(40,40,5)%
+ \DieThreeD(5,40,35)%
+ \DieThreeD(40,5,35)%
+ \pNodeThreeD(40,40,35){G}
+ \pNodeThreeD(40,40,10){G_XY}
+ \pNodeThreeD(10,40,35){G_YZ}
+ \pNodeThreeD(40,10,35){G_XZ}
+ \psline(G)(G_XY)
+ \psline(G)(G_XZ)
+ \psline(G)(G_YZ)
+ \DieThreeD(40,40,35)%
+\end{pspicture}
+\end{LTXexample}
+\caption{\label{RotX} 90\textsuperscript{o} rotation around $OX$ and plane projections.}
+\end{figure}
+
+
+Three successive rotations around three axes with: \verb+RotX=60,RotY=20,RotZ=110+, are illustrate in figure~\ref{RotXYZ}.
+
+\begin{figure}[!ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=30,PHI=30,Dobs=200,Decran=12}
+\begin{pspicture}(-2.8,-3)(3.5,3.5)
+ \PlansOXYZ
+ \AxesThreeD(55)
+ \DieThreeD[A=5,B=5,C=5,RotX=30,RotY=20,RotZ=150](40,40,35)%
+\end{pspicture}
+\end{LTXexample}
+\caption{\label{RotXYZ}rotations around $OX$, $OY$ et $OZ$: \texttt{RotX=60,RotY=20,RotZ=110}.}
+\end{figure}
+
+\section{Constructions using cubes}
+This section was done after a book first published in 1873 and
+titled:
+
+\begin{figure}[!ht]
+\centering
+\psframebox{%
+\begin{pspicture}(-3.1,-3.8)(3.1,3)
+\rput(0,2.6){M\'ETHODE INTUITIVE}
+\rput(0,2){\Large EXERCICES ET TRAVAUX}
+\rput(0,1.5){POUR LES ENFANTS}
+\rput(0,1){\tiny SELON LA M\'ETHODE ET LES PROC\'ED\'ES}
+\rput(0,0){de \textbf{PESTALOZZI et FR\OE{}BEL}}
+\rput(0,-1){M\textsuperscript{me} FANNY DELON}
+\rput(0,-1.5){\tiny Directrice d'une \'Ecole professionnelle \`a Paris}
+\rput(0,-2){M. CH. DELON}
+\rput(0,-2.5){\tiny Licenci\'e \`es sciences}
+\rput(0,-3){PARIS}
+\rput(0,-3.5){1873}
+\end{pspicture}}
+\end{figure}
+
+for children at infant school! One can not be surprised that
+theses kinds of pedagogue gave rise to the generation of Eintein,
+Maxwell, Bohr etc.
+
+
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=15,PHI=50,Dobs=200,Decran=15}
+\hexagon
+\end{LTXexample}
+\caption{\label{hexagone}hexagon.}
+\end{figure}
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=15,PHI=50,Dobs=200,Decran=15}%
+\stardodecagon
+\end{LTXexample}
+\caption{\label{dodecagone}star dodecagon.}
+\end{figure}
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=-15,PHI=50,Dobs=200,Decran=15}
+\pentagon
+\end{LTXexample}
+\caption{\label{pentagone}pentagon.}
+\end{figure}
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=-15,Decran=10,Dobs=100,PHI=75}
+\stardecagon
+\end{LTXexample}
+\caption{\label{decagone}star decagon.}
+\end{figure}
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=20,PHI=75,Decran=10,Dobs=100}
+\begin{pspicture*}(-2.5,-2.5)(2.5,2)
+\Table
+\psset{A=5,B=5,C=5}
+\CubeThreeD(-7.88675,0,5)%1
+\CubeThreeD[RotZ=-120](3.94338,6.83,5)%2
+\CubeThreeD[RotZ=120](3.94338,-6.83,5)%3
+\end{pspicture*}
+\end{LTXexample}
+\caption{\label{triangle}triangle.}
+\end{figure}
+
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=-15,PHI=50,Decran=10,Dobs=150}
+\octogon
+\end{LTXexample}
+\caption{\label{octogone}octogon.}
+\end{figure}
+
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=-15,Decran=10,Dobs=150,PHI=75}
+\starhexadecagon
+\end{LTXexample}
+\caption{\label{hexadecagon}star hexadecagon.}
+\end{figure}
+
+\begin{figure}[ht]
+\begin{LTXexample}[width=0.45\linewidth]
+\psset{THETA=-15,Decran=10,Dobs=150,PHI=75}
+\begin{pspicture}(-2.2,-1.75)(2.2,2.2)
+ \Table
+ \pNodeThreeD(-8.66,-5,0){A6}
+ \pNodeThreeD(-8.66,5,0){A1}
+ \pNodeThreeD(0,10,0){A2}
+ \pNodeThreeD(8.66,5,0){A3}
+ \pNodeThreeD(8.66,-5,0){A4}
+ \pNodeThreeD(0,-10,0){A5}%
+ \psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,%
+ linestyle=none](A1)(A2)(A3)(A4)(A5)(A6)}
+ \DessusTable
+ \endpsclip
+ \psset{A=5,B=5,C=5}
+ \DieThreeD[RotZ=60,RotX=-90](-6.83,-11.83,5)%
+ \DieThreeD[RotZ=120,RotY=-90](6.83,-11.83,5)%
+ \DieThreeD[RotX=90](-13.86,0,5)%
+ \DieThreeD[RotZ=-60,RotY=90](-6.83,11.83,5)%
+ \DieThreeD[RotZ=-120,RotY=180](6.83,11.83,5)%
+ \DieThreeD[RotZ=180](13.86,0,5)%
+\end{pspicture}
+\end{LTXexample}
+\caption{\label{pentagoneDie}hexagon with dices.}
+\end{figure}
+
+Observing figure from off :
+\begin{verbatim}
+\psset{PHI=90,THETA=0}
+\end{verbatim}
+ one obtains classical geometric
+figures :
+
+(\ref{hexagonePlan}) (\ref{dodecagonePlan}) (\ref{pentagonePlan}) (\ref{decagonePlanStar})
+(\ref{trianglePlan}) (\ref{octogonePlan}) (\ref{hexadecagonePlan}) (\ref{hexagonePlanDie}).
+
+\begin{figure}[ht]
+\centering
+\psset{THETA=0,Decran=10,Dobs=125,PHI=90}
+\hexagon
+\caption{\label{hexagonePlan}``flat'' hexagon.}
+\end{figure}
+
+
+\begin{figure}[ht]
+\centering
+\psset{Decran=10,Dobs=100}
+\psset{PHI=90,THETA=0}
+\stardecagon
+\caption{\label{dodecagonePlan}``flat'' star dodecagone.}
+\end{figure}
+%
+\begin{figure}[ht]
+\centering
+\psset{Decran=10,Dobs=125}
+\psset{PHI=90,THETA=0}
+\pentagon
+\caption{\label{pentagonePlan}``flat'' pentagon.}
+\end{figure}
+
+
+\begin{figure}[ht]
+\centering
+\psset{THETA=0,Decran=10,Dobs=125,PHI=90}
+\stardecagon
+\caption{\label{decagonePlanStar}``flat'' star decagon.}
+\end{figure}
+%
+
+
+%
+\begin{figure}[ht]
+\centering
+\psset{PHI=90,THETA=0,Decran=10,Dobs=100}
+\begin{pspicture}*(-2.2,-2.2)(2.2,2.2)
+\Table
+\psset{A=5,B=5,C=5}
+\CubeThreeD(-7.88675,0,5)%1
+\CubeThreeD[RotZ=-120](3.94338,6.83,5)%2
+\CubeThreeD[RotZ=120](3.94338,-6.83,5)%3
+\end{pspicture}
+\caption{\label{trianglePlan}``flat'' triangle.}
+\end{figure}
+
+
+\begin{figure}[ht]
+\centering
+\psset{PHI=90,THETA=0,Decran=10,Dobs=125}
+\octogon
+\caption{\label{octogonePlan}``flat'' octogon.}
+\end{figure}
+
+
+
+\begin{figure}[ht]
+\centering
+\psset{PHI=90,THETA=0,Decran=10,Dobs=125}
+\starhexadecagon
+\caption{\label{hexadecagonePlan}``flat'' star hexadecagon.}
+\end{figure}
+
+\begin{figure}[ht]
+\centering
+\psset{PHI=90,THETA=0,Decran=10,Dobs=125}
+\begin{pspicture}(-2.2,-2.2)(2.2,2.2)
+\Table
+\pNodeThreeD(-8.66,-5,0){A6}
+\pNodeThreeD(-8.66,5,0){A1}
+\pNodeThreeD(0,10,0){A2}
+\pNodeThreeD(8.66,5,0){A3}
+\pNodeThreeD(8.66,-5,0){A4}
+\pNodeThreeD(0,-10,0){A5}%
+\psclip{\pspolygon[fillstyle=solid,fillcolor=GrisClair,linestyle=none](A1)(A2)(A3)(A4)(A5)(A6)}
+\DessusTable
+\endpsclip
+\psset{A=5,B=5,C=5}
+\DieThreeD[RotZ=60,RotX=-90](-6.83,-11.83,5)%
+\DieThreeD[RotZ=120,RotY=-90](6.83,-11.83,5)%
+\DieThreeD[RotX=90](-13.86,0,5)%
+\DieThreeD[RotZ=-60,RotY=90](-6.83,11.83,5)%
+\DieThreeD[RotZ=-120,RotY=180](6.83,11.83,5)%
+\DieThreeD[RotZ=180](13.86,0,5)%
+\end{pspicture}
+\caption{\label{hexagonePlanDie}``flat'' hexagon with dices.}
+\end{figure}
+
+
+
+
+\clearpage
+
+
+\section{Sphere, part of sphere, half-sphere, parallels and meridians}
+
+Beside \verb+sphereThreeD+ there exist several macro for spheres:
+
+\begin{itemize}
+\item \verb|SphereInverseThreeD|
+\item \verb|\SphereCercleThreeD|
+\item \verb|\SphereMeridienThreeD|
+\item \verb|\DemiSphereThreeDThreeD|
+\item \verb|\SphereCreuseThreeD|
+\item \verb|\PortionSphereThreeD|
+\end{itemize}
+
+
+The macro:
+\begin{verbatim}
+\SphereThreeD(10,30,20){20}
+\end{verbatim}
+draws the sphere defined by the coordinates of its centre and its radius which is shown in
+figure~\ref{sphere} together with the macro
+\begin{verbatim}
+\PortionSphereThreeD(0,0,0){20}
+\end{verbatim}
+and some more additional lines.
+
+\begin{verbatim}
+\begin{pspicture}(-3,-3.5)(3,5)
+\psset{THETA=30,PHI=30,Dobs=100,Decran=10}
+{\psset{style=GradGrayWhite}%
+\SphereThreeD(0,0,0){20}
+\psset{fillstyle=solid,fillcolor=gray}
+\PortionSphereThreeD(0,0,0){20}
+\pNodeThreeD(20;10;10){C1}
+\pNodeThreeD(40;10;10){D1}
+\psline(C1)(D1)
+\pNodeThreeD(20;10;-10){C2}
+\pNodeThreeD(40;10;-10){D2}
+\psline(C2)(D2)
+\pNodeThreeD(20;-10;-10){C3}
+\pNodeThreeD(40;-10;-10){D3}
+\psline(C3)(D3)
+\pNodeThreeD(20;-10;10){C4}
+\pNodeThreeD(40;-10;10){D4}
+\psline(C4)(D4)
+\PortionSphereThreeD%
+ [style=GradGrayWhite](0,0,0){40}}
+% PhiCercle=latitude of the cercle
+% \SphereCercle[PhiCercle=...]{radius}
+\psset{linecolor=white,PhiCercle=45}
+\SphereCercleThreeD(0,0,0){20}
+% ThetaMeridien=longitude of the meridian
+% \SphereMeridien[ThetaMeridien=...]{radius}
+\SphereMeridienThreeD%
+ [ThetaMeridien=45](0,0,0){20}
+\pNodeThreeD(20;45;45){A}
+\pNodeThreeD(50;45;45){B}
+\psline[linecolor=black]{->}(A)(B)
+\pNodeThreeD(20;0;90){Nord}
+\pNodeThreeD(40;0;90){Nord1}
+\psline[linecolor=black]{->}(Nord)(Nord1)
+\SphereCercleThreeD[PhiCercle=0](0,0,0){20}
+\SphereMeridienThreeD%
+ [ThetaMeridien=0](0,0,0){20}
+\end{pspicture}
+\end{verbatim}
+
+
+
+\begin{figure}[!htb]
+\begin{pspicture}(-3,-3.5)(3,5)
+\psset{THETA=30,PHI=30,Dobs=100,Decran=10}
+\bgroup
+ \psset{style=GradGrayWhite}%
+ \SphereThreeD(0,0,0){20}
+ \psset{fillstyle=solid,fillcolor=gray}
+ \PortionSphereThreeD(0,0,0){20}
+ \pNodeThreeD(20;10;10){C1}
+ \pNodeThreeD(40;10;10){D1}
+ \psline(C1)(D1)
+ \pNodeThreeD(20;10;-10){C2}
+ \pNodeThreeD(40;10;-10){D2}
+ \psline(C2)(D2)
+ \pNodeThreeD(20;-10;-10){C3}
+ \pNodeThreeD(40;-10;-10){D3}
+ \psline(C3)(D3)
+ \pNodeThreeD(20;-10;10){C4}
+ \pNodeThreeD(40;-10;10){D4}
+ \psline(C4)(D4)
+ \PortionSphereThreeD[style=GradGrayWhite](0,0,0){40}
+\egroup
+% PhiCercle=latitude of the cercle
+% \SphereCercle[PhiCercle=...]{radius}
+ \psset{linecolor=white,PhiCercle=45}
+ \SphereCercleThreeD(0,0,0){20}
+% ThetaMeridien=longitude of the meridian
+% \SphereMeridien[ThetaMeridien=...]{radius}
+ \SphereMeridienThreeD[ThetaMeridien=45](0,0,0){20}
+% \pNodeThreeD(radius}{longitude}{latitude}{name of the point}
+ \pNodeThreeD(20;45;45){A}
+ \pNodeThreeD(50;45;45){B}
+ \psline[linecolor=black]{->}(A)(B)
+ \pNodeThreeD(20;0;90){Nord}
+ \pNodeThreeD(40;0;90){Nord1}
+ \psline[linecolor=black]{->}(Nord)(Nord1)
+ \SphereCercleThreeD[PhiCercle=0](0,0,0){20}
+ \SphereMeridienThreeD[ThetaMeridien=0](0,0,0){20}
+\end{pspicture}
+\caption{\label{sphere}A Sphere.}
+\end{figure}
+
+
+\begin{figure}[!htb]
+\centering
+\begin{pspicture}(-3,-2)(3,5)
+ \psset{THETA=60,PHI=30,Dobs=100,Decran=10}
+% \DemiSphereThreeD(x,y,z){radius}
+ \DemiSphereThreeD[RotX=180,style=GradGrayWhite](0,0,0){20}
+ \SphereCreuseThreeD[RotX=180,linecolor=white,style=GradGrayWhite](0,0,0){20}
+ \AxesThreeD[linestyle=dashed](30,30,40)
+\end{pspicture}
+\caption{\label{halfsphere}half-sphere.}
+\end{figure}
+
+
+\begin{figure}[!htb]
+\centering
+\begin{pspicture}(-3,-2)(3,2)
+\psset{THETA=60,PHI=20,Dobs=100,Decran=10}
+\psset{style=GradGrayWhite}%
+\SphereThreeD(0,0,0){10}%
+\DemiSphereThreeD[RotX=180](0,0,0){20}%
+\begin{psclip}{%
+\SphereCreuseThreeD[RotX=180,linecolor=white](0,0,0){20}}%
+\SphereThreeD(0,0,0){10}
+\end{psclip}%
+\end{pspicture}
+\caption{\label{egg} levitation}
+\end{figure}
+
+
+\section{A Hole in a sphere}
+
+\begin{figure}[!htb]
+\centering
+\psset{THETA=10,PHI=30,Dobs=100,Decran=10}
+\begin{pspicture}*(-3,-3)(3,3)
+ \SphereThreeD[style=GradGrayWhite,gradmidpoint=0.2](0,0,0){40}%
+ \begin{psclip}{\PortionSphereThreeD[PortionSpherePHI=40,%
+ DeltaPHI=30,DeltaTHETA=30,linewidth=4\pslinewidth](0,0,0){40}}%
+ \SphereInverseThreeD[style=GradGrayWhite](0,0,0){40}%
+ \SphereThreeD[style=GradGrayWhite](0,0,0){30}%
+ \begin{psclip}{\PortionSphereThreeD[PortionSpherePHI=30,%
+ DeltaPHI=30,DeltaTHETA=30,linewidth=4\pslinewidth](0,0,0){30}}%
+ \SphereInverseThreeD[style=GradGrayWhite](0,0,0){30}%
+ \SphereThreeD[style=GradGrayWhite](0,0,0){20}%
+ \begin{psclip}{\PortionSphereThreeD[PortionSpherePHI=30,%
+ DeltaPHI=30,DeltaTHETA=30,linewidth=4\pslinewidth](0,0,0){20}}%
+ \SphereInverseThreeD[style=GradGrayWhite](0,0,0){20}%
+ \SphereThreeD[style=GradGrayWhite](0,0,0){10}%
+ \begin{psclip}{%
+ \PortionSphereThreeD[PortionSpherePHI=30,%
+ DeltaPHI=30,DeltaTHETA=30,linewidth=4\pslinewidth](0,0,0){10}}%
+ \SphereInverseThreeD[style=GradGrayWhite](0,0,0){10}%
+ \SphereThreeD[style=GradGrayWhite](0,0,0){5}%
+ \end{psclip}%
+ \end{psclip}%
+ \end{psclip}%
+ \end{psclip}%
+\end{pspicture}
+\caption{\label{Holeinasphere}A Hole in a sphere.}
+\end{figure}
+
+It is a rectangular hole whose the size are meridian and parallels
+arcs (figure~\ref{Holeinasphere}).
+
+We define the part of the sphere setting its radius, the center
+of the sphere and the $\Delta\phi$ and $\Delta\theta$.
+\begin{verbatim}
+\PortionSphereThreeD[PortionSpherePHI=45,%
+ PortionSphereTHETA=0,%
+ DeltaPHI=45,%
+ DeltaTHETA=20](0,0,0){20}
+\end{verbatim}
+
+There are the parameters of the first hole. The radius is
+\texttt{20}.
+\begin{verbatim}
+{\psset{fillstyle=gradient,%
+ gradbegin=white,%
+ gradend=blue,%
+ gradmidpoint=0.2,%
+ linecolor=cyan,%
+ linewidth=0.1mm}
+\SphereThreeD(0,0,0){20}}%
+\begin{psclip}{%
+\PortionSphereThreeD[PortionSpherePHI=45,%
+ DeltaPHI=45,DeltaTHETA=20](0,0,0){20}}
+\SphereInverseThreeD[fillstyle=solid,%
+ fillcolor=red,%
+ linecolor=blue](0,0,0){20}%
+\end{psclip}%
+\end{verbatim}
+
+This is the tricks to see the inner of the sphere.
+
+\verb+\SphereInverse+ define the hidden part of the sphere.
+
+
+\section{Drawing a cylinder}
+A cylinder is defined by the radius of its base and its height.
+The center of the base is set in the usual way, and
+\textsf{RotX,RotY,RotZ} make it rotate around the axes.
+
+\verb+\CylindreThreeD(x,y,z){radius}{hauteur}+
+
+\begin{figure}[!htb]
+\centering
+\begin{pspicture}(-3.5,-2)(3,4.5)
+\psset{THETA=5,PHI=40,Dobs=150,Decran=6.5,fillstyle=solid,linewidth=0.1mm}
+% plan horizontal
+{\psset{normaleLongitude=0, normaleLatitude=90}
+\FrameThreeD[fillstyle=solid,fillcolor=GrisClair](0,0,0)(-50,0)(50,50)
+\FrameThreeD[fillstyle=solid,fillcolor=GrisClair](0,0,0)(-50,0)(50,-50)
+\QuadrillageThreeD(0,0,0)(-50,-50)(50,50)}
+\multido{\iCY=-45+90}{2}{%
+ \CylindreThreeD(-45,\iCY,0){5}{50}
+ \DemiSphereThreeD(-45,\iCY,50){5}%
+}
+\CylindreThreeD(0,0,0){10}{15}
+\CylindreThreeD(0,0,15){20}{5}
+\DemiSphereThreeD[RotX=180](0,0,35){20}
+\SphereCreuseThreeD[RotX=180](0,0,35){20}
+{\psset{RotY=90,RotX=0,RotZ=30}
+\CylindreThreeD(15,15,5){5}{20}}
+\multido{\iCY=-45+90}{2}{%
+\CylindreThreeD(45,\iCY,0){5}{50}
+\DemiSphereThreeD(45,\iCY,50){5}}
+\end{pspicture}
+\caption{\label{cylinder}cylinders.}
+\end{figure}
+
+\begin{verbatim}
+\CylindreThreeD(0,0,-5){10}{15}}
+\psset{RotY=90}
+\CylindreThreeD(15,15,-5){5}{20}
+\end{verbatim}
+
+
+\section{Tetrahedron, cone and square pyramid}
+\subsection{square pyramid}
+\begin{verbatim}
+\psset{A=...,Hpyramide=...}
+\Pyramide
+\end{verbatim}
+
+See the examples of figures~(\ref{Pyramid})~(\ref{Obelisque}).
+
+\begin{figure}[!htb]
+\centering
+\psset{ColorFaceD=GrayD,ColorFaceA=GrayA,%
+ ColorFaceB=GrayB,ColorFaceC=GrayC,ColorFaceE=GrayE}
+\psframebox[fillstyle=solid,fillcolor=GrayB,framesep=0pt]{%
+\begin{pspicture}*(-3,-4)(3,4)
+\psset{THETA=-70,PHI=60,Dobs=200,Decran=15}
+\DecorSable
+\psset{RotZ=45,fillstyle=solid,linecolor=black,A=9}
+\PyramideThreeD(5,35,0){10}
+\psset{A=10}
+\PyramideThreeD(0,0,0){13}
+\psset{A=7}
+\PyramideThreeD(10,-35,0){8.7}
+\end{pspicture}}
+\caption{\label{Pyramid}Pyramids of Egypt.}
+\end{figure}
+
+
+\begin{figure}[!htb]
+\centering
+\psframebox[fillstyle=solid,fillcolor=GrayB,framesep=0pt]{%
+ \begin{pspicture}*(-2.5,-2)(2.5,5.5)
+ \psset{THETA=30,PHI=30,Dobs=400,Decran=12}
+ \DecorSable
+ \CubeThreeD[A=15,B=15,C=15](0,0,15)%
+ \psset{A=10,fillstyle=solid}
+ \PyramideThreeD[fracHeight=0.8](0,0,30){150}%
+ \psset{A=2}
+ \PyramideThreeD(0,0,150){5}%
+ \end{pspicture}%
+}
+\caption{\label{Obelisque}Obelisk of Egypt.}
+\end{figure}
+
+
+\subsection{Cone}
+\begin{verbatim}
+\ConeThreeD[fracHeight=...]
+ (x,y,z){radius}{Height}
+\end{verbatim}
+by default \verb+fracHeight=1+ : figure~\ref{Cone}.
+
+\begin{figure}[!htb]
+\centering
+\psframebox[fillstyle=solid,fillcolor=GrayB,framesep=0pt]{%
+\begin{pspicture}*(-3,-5)(3,4)
+\psset{THETA=30,PHI=40,Dobs=200,Decran=12,fillstyle=solid,%
+ fillcolor=GrisClair,linewidth=0.25\pslinewidth}
+\DecorSable
+\CylindreThreeD(0,0,0){10}{50}
+\ConeThreeD[fillcolor=GrayB](0,0,50){10}{10}
+\CylindreThreeD[RotY=90,RotZ=150](40,20,10){10}{50}
+\ConeThreeD[fracHeight=0.5](20,-20,0){10}{10}
+\CylindreThreeD(20,-20,5){5}{50}
+\ConeThreeD[fracHeight=0.5](50,50,0){10}{10}
+\CylindreThreeD(50,50,5){5}{50}
+\end{pspicture}}
+\caption{\label{Cone}Cones and cylinders.}
+\end{figure}
+
+\section{Points and lines}
+The command allowing to mark points and thus to draw lines
+and polygons can be used of two manners, either with the Cartesian coordinates
+ \begin{verbatim}
+\pNodeThreeD(x,y,z){name}
+\end{verbatim}
+ or with the spherical coordinates :
+\begin{verbatim}
+\pNodeThreeD(radius;longitude;latitude)%
+ {name of the point}
+\end{verbatim}
+
+For example \verb+\pNodeThreeD(25,-25,25){A}+, the point $A(25,25,25)$ places.
+Points being positioned, just to write \verb+\psline(A)(B)+, to draw the segment $AB$.
+
+ On the figure~\ref {points}, one drew a cube with its diagonals.
+\begin{figure}[!htb]
+\centering
+\psset{unit=1cm}
+ \psset{THETA=70,PHI=30,Dobs=150,Decran=10}
+ \begin{pspicture}(-3,-3)(3,4)
+ \AxesThreeD[linecolor=red,linestyle=dashed](50,60,50)
+ \pNodeThreeD(25,-25,25){A}
+ \pNodeThreeD(25,25,25){B}
+ \pNodeThreeD(25,25,-25){C}
+ \pNodeThreeD(25,-25,-25){D}
+ \pNodeThreeD(-25,-25,25){E}
+ \pNodeThreeD(-25,25,25){F}
+ \pNodeThreeD(-25,25,-25){G}
+ \pNodeThreeD(-25,-25,-25){H}
+ \pspolygon(A)(B)(C)(D)
+ \pspolygon(E)(F)(G)(H)
+ \psline(A)(E)
+ \psline(B)(F)
+ \psline(C)(G)
+ \psline(D)(H)
+ \psset{linestyle=dashed}
+ \psline(A)(G)
+ \psline(B)(H)
+ \psline(C)(E)
+ \psline(D)(F)
+% routine page 49 in "présentation de PSTricks"
+% D.Girou "cahier 16 Gutengerg"
+ \newcounter{lettre}
+ \multido{\i=1+1}{8}{%
+ \setcounter{lettre}{\i}
+ \psdot[linecolor=red](\Alph{lettre})
+ \uput[90](\Alph{lettre}){\Alph{lettre}}
+ }
+\end{pspicture}
+\caption{\label{points}Points and lines.}
+\end{figure}
+
+
+\section{Circles}
+A circle is defined by a vector normal for its plan by $(\theta,\varphi)$, with the following parameters for example:
+\begin{verbatim}
+normaleLongitude=60,normaleLatitude=90
+\end{verbatim}
+The coordinates of his centre as well as his radius.
+\begin{verbatim}
+\CircleThreeD(x,y,z){radius}
+\end{verbatim}
+
+The circles of the figure~\ref{circles}, were drawn with the following
+commands:
+
+\begin{figure}[!htb]
+\centering
+\psframebox{%
+ \begin{pspicture}(-2.5,-3.5)(3.5,1.5)
+ \psset{THETA=50,PHI=50,Dobs=250,Decran=10}
+ \multido{\iX=-70+10}{15}{%
+ \pNodeThreeD(\iX,0,0){X1}
+ \pNodeThreeD(\iX,50,0){X2}
+ \psline(X1)(X2)
+ }
+ \multido{\iY=0+10}{6}{%
+ \pNodeThreeD(-70,\iY,0){Y1}
+ \pNodeThreeD(70,\iY,0){Y2}
+ \psline(Y1)(Y2)%
+ }
+ \psset{normaleLongitude=0,normaleLatitude=90}
+ \multido{\iXorigine=-65+10}{14}{%
+ \multido{\iYorigine=5+10}{5}{%
+ \CircleThreeD[linecolor=red](\iXorigine,\iYorigine,0){5}%
+ }%
+ }
+ \end{pspicture}%
+}
+\caption{\label{circles}circles.}
+\end{figure}
+
+\begin{verbatim}
+\psset{normaleLongitude=0,%
+ normaleLatitude=90}
+\multido{\iXorigine=-65+10}{14}{%
+ \multido{\iYorigine=5+10}{5}{%
+ \CircleThreeD[linecolor=red]%
+ (\iXorigine,\iYorigine,0){5}}}
+\end{verbatim}
+
+\section{The macros and the options}
+\subsection{The colors of the cube, the pyramid and tetraedre}
+
+The predefined colors for the different sides of a cube are
+always set in the \verb+rgb+ mode :
+\begin{verbatim}
+CubeColorFaceOne=1 1 0,%
+CubeColorFaceTwo=0.9 0.9 0,%
+CubeColorFaceThree=0.8 0.8 0,%
+CubeColorFaceFour=0.7 0.7 0,%
+CubeColorFaceFive=0.65 0.65 0,%
+CubeColorFaceSix=0.75 0.75 0
+\end{verbatim}
+
+The colors for the pyramid and the tetraedre are taken from the predefined ones:
+\begin{verbatim}
+ColorFaceD=cyan,
+ColorFaceA=magenta,
+ColorFaceB=red,
+ColorFaceC=blue,
+ColorFaceE=yellow
+\end{verbatim}
+
+They can be changed in the usual way with the \verb+\psset+ macro.
+
+
+\subsection{Common parameters}
+\verb+RotX=<value>, RotY=<value>, RotZ=<value>+
+
+The predefined value is zero, means no rotation.
+
+\subsection{Cube}
+The following command places a parallelepiped with a length of $a=40$, $b=20$ and $c=10$ units
+and it is placed with its center at the point $x=25$, $y=25$ and $z=25$
+
+\begin{verbatim}
+\CubeThreeD[A=20,B=10,C=5](25,25,25)
+\end{verbatim}
+
+\begin{figure}[!htb]
+\centering
+\begin{pspicture}(-3,-3)(3,3.5)
+\psset{PHI=30,THETA=45,Dobs=200}
+\PlansOXYZ\AxesThreeD(55)
+\FrameThreeD[normaleLongitude=0,%
+ normaleLatitude=90,%
+ fillstyle=vlines,hatchsep=0.4mm](25,25,0)(-10,-15)(10,15)
+\FrameThreeD[normaleLongitude=0,%
+ normaleLatitude=0,%
+ fillstyle=vlines,hatchsep=0.4mm](0,25,25)(-10,-5)(10,5)
+\FrameThreeD[normaleLongitude=90,%
+ normaleLatitude=0,%
+ fillstyle=vlines,hatchsep=0.4mm](25,0,25)(-15,-5)(15,5)
+\CubeThreeD[A=15,B=10,C=5](25,25,25)%
+\end{pspicture}
+\caption{\label{Prisme}Parallelepiped}
+\end{figure}
+
+In other words: the length of the sides is \verb+2A,2B,2C+ (see figure~\ref{Prisme}).
+
+For rotations, let us consider the result of a rotation around one of the axes, while knowing that it is possible to combine them. The corresponding rotation of projection on the horizontal level is obtained with the parameter: \verb+normaleLongitude=<degrees>+ (figure~\ref{PrismeRotZ}).
+
+\begin{figure}[!htb]
+\centering
+\begin{pspicture}(-3,-3)(3,3.5)
+\psset{PHI=30,THETA=45,Dobs=200,RotZ=60}
+\PlansOXYZ\AxesThreeD(55)
+% la projection sur le plan Oxy
+\FrameThreeD[normaleLongitude=60,%
+ normaleLatitude=90,%
+ fillstyle=vlines,hatchsep=0.4mm](25,25,0)(-10,-15)(10,15)
+\CubeThreeD[A=15,B=10,C=5](25,25,25)%
+\end{pspicture}
+\caption{\label{PrismeRotZ}The same parallelepiped rotated with \texttt{RotZ=60}.}
+\end{figure}
+
+There is no difference to a die, except that all sides have the same length.
+
+
+\begin{figure}[!htb]
+\centering
+\begin{pspicture}(-3,-3)(3,3.5)
+\psset{PHI=30,THETA=45,Dobs=200,RotZ=60,,RotX=90}
+\PlansOXYZ\AxesThreeD(55)
+% la projection sur le plan Oxy
+\FrameThreeD[normaleLongitude=60,%
+ normaleLatitude=90,%
+ fillstyle=vlines,hatchsep=0.4mm](25,25,0)(-5,-15)(5,15)
+\CubeThreeD[A=15,B=10,C=5](25,25,25)%
+\end{pspicture}
+\caption{\label{PrismeRotXRotZ}The same parallelepiped, rotated with the values \texttt{RotX=90,RotZ=60}}
+\end{figure}
+
+
+\subsection{Cylinder and circle}
+In addition to the already quoted optional parameters the cylinder requires the obligatory parameters:
+\begin{verbatim}
+\CylindreThreeD[...](x,y,z){radius}{height}
+\end{verbatim}
+
+Projection on the horizontal level is obtained with the following values:
+
+\begin{verbatim}
+\CircleThreeD[normaleLongitude=0,%
+ normaleLatitude=90,%
+ fillstyle=vlines,%
+ hatchsep=0.4mm](30,30,0){10}
+\end{verbatim}
+
+The circle macro needs the following parameters:
+
+\begin{verbatim}
+\CircleThreeD[...](x,y,z){radius}
+\end{verbatim}
+
+Figure~\ref{CylindreDemo} shows an example of the above macros.
+
+\begin{figure}[!ht]
+\centering
+\begin{pspicture}(-3,-3)(3,3.5)
+\psset{PHI=30,THETA=45,Dobs=200}
+\PlansOXYZ\AxesThreeD(55)
+% la projection sur le plan Oxy
+\CircleThreeD[normaleLongitude=0,%
+ normaleLatitude=90,%
+ fillstyle=vlines,%
+ hatchsep=0.4mm](30,30,0){10}
+\CylindreThreeD[fillstyle=solid,fillcolor=yellow,%
+ linewidth=0.1mm](30,30,20){10}{30}%
+\end{pspicture}
+\caption{\label{CylindreDemo}A cylinder with a radius of $10$ units and a
+ height of $50$ units
+ with its base center at \texttt{(30,30,20)}.%
+}
+\end{figure}
+
+
+\section{See the interior of a cube}
+The following option makes it possible to visualize the interior of the box, the result is seen in the figure~\ref{Cube inside} :
+
+\begin{verbatim}
+\DieThreeD(0,0,0)%
+\begin{psclip}{%
+\FrameThreeD[normaleLongitude=0,%
+ normaleLatitude=90]%
+ (0,0,10)(-10,-10)(10,10)}%
+\DieThreeD[CubeInside=true](0,0,0)%
+\end{psclip}%
+\end{verbatim}
+
+\begin{figure}
+\centering
+\begin{pspicture}(-2,-2)(2,3.5)
+ \psset{A=10,B=10,C=10,PHI=60,THETA=-60}
+ \DieThreeD(0,0,0)%
+ \begin{psclip}{%
+ \FrameThreeD[normaleLongitude=0,%
+ normaleLatitude=90](0,0,10)(-10,-10)(10,10)}%
+ \DieThreeD[CubeInside=true](0,0,0)%
+ \end{psclip}%
+ \FrameThreeD[normaleLongitude=0,%
+ normaleLatitude=90,linewidth=1mm](0,0,10)(-10,-10)(10,10)%
+\end{pspicture}
+\caption{\label{Cube inside}An empty box.}
+\end{figure}
+
+
+\nocite{*}
+
+\bibliographystyle{plain}
+\bibliography{pst-vue3d-doc}
+
+\end{document}
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
new file mode 100644
index 0000000000..b6e8d1289a
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
@@ -0,0 +1,2092 @@
+%version 33 march 2007
+%
+/tx@3DDict 100 dict def
+tx@3DDict begin
+/Cube{%
+ /XA M11 A mul M12 B mul add M13 C mul add CX add def
+ /YA M21 A mul M22 B mul add M23 C mul add CY add def
+ /ZA M31 A mul M32 B mul add M33 C mul add CZ add def
+ /XB M11 A mul neg M12 B mul add M13 C mul add CX add def
+ /YB M21 A mul neg M22 B mul add M23 C mul add CY add def
+ /ZB M31 A mul neg M32 B mul add M33 C mul add CZ add def
+ /XC M11 A mul neg M12 B mul neg add M13 C mul add CX add def
+ /YC M21 A mul neg M22 B mul neg add M23 C mul add CY add def
+ /ZC M31 A mul neg M32 B mul neg add M33 C mul add CZ add def
+ /XD M11 A mul M12 B mul neg add M13 C mul add CX add def
+ /YD M21 A mul M22 B mul neg add M23 C mul add CY add def
+ /ZD M31 A mul M32 B mul neg add M33 C mul add CZ add def
+ /XE M11 A mul M12 B mul add M13 C mul sub CX add def
+ /YE M21 A mul M22 B mul add M23 C mul sub CY add def
+ /ZE M31 A mul M32 B mul add M33 C mul sub CZ add def
+ /XF M11 A mul neg M12 B mul add M13 C mul sub CX add def
+ /YF M21 A mul neg M22 B mul add M23 C mul sub CY add def
+ /ZF M31 A mul neg M32 B mul add M33 C mul sub CZ add def
+ /XG M11 A mul neg M12 B mul sub M13 C mul sub CX add def
+ /YG M21 A mul neg M22 B mul sub M23 C mul sub CY add def
+ /ZG M31 A mul neg M32 B mul sub M33 C mul sub CZ add def
+ /XH M11 A mul M12 B mul sub M13 C mul sub CX add def
+ /YH M21 A mul M22 B mul sub M23 C mul sub CY add def
+ /ZH M31 A mul M32 B mul sub M33 C mul sub CZ add def
+% Centres des faces : condition de visibilité
+% FACE 1
+% OC1
+ /XC1 M13 C mul CX add def
+ /YC1 M23 C mul CY add def
+ /ZC1 M33 C mul CZ add def
+% Normale à la face 1
+ /NX1 M13 C mul def
+ /NY1 M23 C mul def
+ /NZ1 M33 C mul def
+% rayon vers point de vue
+ /RXvue1 XC1 XpointVue sub def
+ /RYvue1 YC1 YpointVue sub def
+ /RZvue1 ZC1 ZpointVue sub def
+% produit scalaire
+ /PS1 RXvue1 NX1 mul RYvue1 NY1 mul add RZvue1 NZ1 mul add def
+% FACE 2
+% OC2
+ /XC2 M11 A mul CX add def
+ /YC2 M21 A mul CY add def
+ /ZC2 M31 A mul CZ add def
+% normale à la face 2
+ /NX2 M11 A mul def
+ /NY2 M21 A mul def
+ /NZ2 M31 A mul def
+% rayon vers point de vue
+ /RXvue2 XC2 XpointVue sub def
+ /RYvue2 YC2 YpointVue sub def
+ /RZvue2 ZC2 ZpointVue sub def
+% produit scalaire
+ /PS2 RXvue2 NX2 mul RYvue2 NY2 mul add RZvue2 NZ2 mul add def
+% FACE 3
+% OC3
+ /XC3 M13 C neg mul CX add def
+ /YC3 M23 C neg mul CY add def
+ /ZC3 M33 C neg mul CZ add def
+% normale à la face 3
+ /NX3 M13 C neg mul def
+ /NY3 M23 C neg mul def
+ /NZ3 M33 C neg mul def
+% rayon vers point de vue
+ /RXvue3 XC3 XpointVue sub def
+ /RYvue3 YC3 YpointVue sub def
+ /RZvue3 ZC3 ZpointVue sub def
+% produit scalaire
+ /PS3 RXvue3 NX3 mul RYvue3 NY3 mul add RZvue3 NZ3 mul add def
+% FACE 4
+% OC4
+ /XC4 M11 A neg mul CX add def
+ /YC4 M21 A neg mul CY add def
+ /ZC4 M31 A neg mul CZ add def
+% normale à la face 4
+ /NX4 M11 A neg mul def
+ /NY4 M21 A neg mul def
+ /NZ4 M31 A neg mul def
+% rayon vers point de vue
+ /RXvue4 XC4 XpointVue sub def
+ /RYvue4 YC4 YpointVue sub def
+ /RZvue4 ZC4 ZpointVue sub def
+% produit scalaire
+ /PS4 RXvue4 NX4 mul RYvue4 NY4 mul add RZvue4 NZ4 mul add def
+% FACE 5
+% OC5
+ /XC5 M12 B neg mul CX add def
+ /YC5 M22 B neg mul CY add def
+ /ZC5 M32 B neg mul CZ add def
+% normale à la face 5
+ /NX5 M12 B neg mul def
+ /NY5 M22 B neg mul def
+ /NZ5 M32 B neg mul def
+% rayon vers point de vue
+ /RXvue5 XC5 XpointVue sub def
+ /RYvue5 YC5 YpointVue sub def
+ /RZvue5 ZC5 ZpointVue sub def
+% produit scalaire
+ /PS5 RXvue5 NX5 mul RYvue5 NY5 mul add RZvue5 NZ5 mul add def
+% FACE 6
+% OC6
+ /XC6 M12 B mul CX add def
+ /YC6 M22 B mul CY add def
+ /ZC6 M32 B mul CZ add def
+% normale à la face 6
+ /NX6 M12 B mul def
+ /NY6 M22 B mul def
+ /NZ6 M32 B mul def
+% rayon vers point de vue
+ /RXvue6 XC6 XpointVue sub def
+ /RYvue6 YC6 YpointVue sub def
+ /RZvue6 ZC6 ZpointVue sub def
+% produit scalaire
+ /PS6 RXvue6 NX6 mul RYvue6 NY6 mul add RZvue6 NZ6 mul add def
+% faceOne
+PS1 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceOne setrgbcolor
+fill
+grestore
+stroke
+} if
+% faceTwo
+PS2 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceTwo setrgbcolor
+fill
+grestore
+stroke
+} if
+% face three
+PS3 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XE def
+ /Yordonnee YE def
+ /Zcote ZE def
+ CalcCoordinates
+ moveto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceThree setrgbcolor
+fill
+grestore
+stroke
+} if
+% face four
+PS4 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ moveto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceFour setrgbcolor
+fill
+grestore
+stroke
+} if
+% face five
+PS5 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ moveto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceFive setrgbcolor
+fill
+grestore
+stroke
+} if
+% face six
+PS6 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ moveto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceSix setrgbcolor
+fill
+grestore
+stroke
+} if
+}
+def
+%
+/PointsDie{%
+PS6 0 Condition{ %
+reduction reduction scale
+A 2 div neg A A 2 div {
+ /XCpoint exch def
+C 2 div neg C C 2 div {
+ /ZCpoint exch def
+newpath
+ /Zpoint Rpoint ZCpoint add def
+ /Xpoint XCpoint def
+ /Ypoint B def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul ZCpoint add def
+ /Xpoint Rpoint Angle sin mul XCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+ } if
+PS5 0 Condition{ %
+reduction reduction scale
+newpath
+ /Ypoint B neg def
+ /XCpoint A 2 div neg def
+ /ZCpoint C 2 div def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+%
+newpath
+ /XCpoint A 2 div def
+ /ZCpoint C 2 div neg def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+%
+newpath
+ /XCpoint 0 def
+ /ZCpoint 0 def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS4 0 Condition{ %
+reduction reduction scale
+C 2 div neg C C 2 div {
+ /ZCpoint exch def
+B 2 div neg B B 2 div {
+ /YCpoint exch def
+newpath
+ /Zpoint Rpoint ZCpoint add def
+ /Ypoint YCpoint def
+ /Xpoint A neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul ZCpoint add def
+ /Ypoint Rpoint Angle sin mul YCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+% le point du milieu
+newpath
+ /Zpoint Rpoint def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul def
+ /Ypoint Rpoint Angle sin mul def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS3 0 Condition{ %
+reduction reduction scale
+A 2 div neg A A 2 div {
+ /XCpoint exch def
+B 2 div neg B 2 div B 2 div {
+ /YCpoint exch def
+newpath
+ /Xpoint Rpoint XCpoint add def
+ /Ypoint YCpoint def
+ /Zpoint C neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Ypoint Rpoint Angle sin mul YCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+} if
+PS2 0 Condition{ %
+reduction reduction scale
+newpath
+ /Xpoint A def
+ /Ypoint Rpoint B 2 div add def
+ /Zpoint C 2 div neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Ypoint Rpoint Angle cos mul B 2 div add def
+ /Zpoint Rpoint Angle sin mul C 2 div sub def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+newpath
+ /Xpoint A def
+ /Ypoint Rpoint B 2 div sub def
+ /Zpoint C 2 div def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint A def
+ /Ypoint Rpoint Angle cos mul B 2 div sub def
+ /Zpoint Rpoint Angle sin mul A 2 div add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS1 0 Condition{ %
+reduction reduction scale
+newpath
+ /Xpoint Rpoint def
+ /Ypoint 0 def
+ /Zpoint C def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul def
+ /Ypoint Rpoint Angle sin mul def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+} def
+%
+/CalcCoordinates{%
+ formulesTroisD
+% hv 2005-04-30 --->beg
+% Xi 28.45 mul Yi 28.45 mul
+ Xi xUnit mul Yi yUnit mul
+% hv 2005-04-30 <---beg
+ }
+ def
+% pour la 3D conventionnelle
+/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 DScreen xObservateur mul zObservateur div def
+ /Yi DScreen yObservateur mul zObservateur div def
+ }
+def
+%
+/CalculsPointsAfterTransformations{%
+ /Xabscisse M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add def
+ /Yordonnee M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add def
+ /Zcote M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add def
+ }
+def
+%
+/SommetsTetraedre{%
+ /xA RayonBaseTetraedre neg def
+ /yA 0 def
+ /zA 0 def
+ /xB 0.5 RayonBaseTetraedre mul def
+ /yB RayonBaseTetraedre 0.866 mul neg def
+ /zB 0 def
+ /xC xB def
+ /yC yB neg def
+ /zC 0 def
+ /xD 0 def
+ /yD 0 def
+ /zD RayonBaseTetraedre 1.414 mul def
+% coordonnées centre des faces
+ /xFaceA xA xB xC add add 3 div def
+ /yFaceA yA yB yC add add 3 div def
+ /zFaceA zA zB zC add add 3 div def
+ /xFaceB xD xA xB add add 3 div def
+ /yFaceB yD yA yB add add 3 div def
+ /zFaceB zD zA zB add add 3 div def
+ /xFaceC xA xD xC add add 3 div def
+ /yFaceC yA yD yC add add 3 div def
+ /zFaceC zA zD zC add add 3 div def
+ /xFaceD xD xB xC add add 3 div def
+ /yFaceD yD yB yC add add 3 div def
+ /zFaceD zD zB zC add add 3 div def
+% sommets après rotation et translation
+ /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def
+ /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def
+ /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def
+ /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def
+ /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def
+ /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def
+ /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def
+ /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def
+ /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def
+ /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def
+ /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def
+ /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def
+% centres de faces après transformations
+ /XFaceA M11 xFaceA mul M12 yFaceA mul add M13 zFaceA mul add CX add def
+ /YFaceA M21 xFaceA mul M22 yFaceA mul add M23 zFaceA mul add CY add def
+ /ZFaceA M31 xFaceA mul M32 yFaceA mul add M33 zFaceA mul add CZ add def
+ /XFaceB M11 xFaceB mul M12 yFaceB mul add M13 zFaceB mul add CX add def
+ /YFaceB M21 xFaceB mul M22 yFaceB mul add M23 zFaceB mul add CY add def
+ /ZFaceB M31 xFaceB mul M32 yFaceB mul add M33 zFaceB mul add CZ add def
+ /XFaceC M11 xFaceC mul M12 yFaceC mul add M13 zFaceC mul add CX add def
+ /YFaceC M21 xFaceC mul M22 yFaceC mul add M23 zFaceC mul add CY add def
+ /ZFaceC M31 xFaceC mul M32 yFaceC mul add M33 zFaceC mul add CZ add def
+ /XFaceD M11 xFaceD mul M12 yFaceD mul add M13 zFaceD mul add CX add def
+ /YFaceD M21 xFaceD mul M22 yFaceD mul add M23 zFaceD mul add CY add def
+ /ZFaceD M31 xFaceD mul M32 yFaceD mul add M33 zFaceD mul add CZ add def
+% Normales aux faces
+ /NxA XFaceA XD sub def
+ /NyA YFaceA YD sub def
+ /NzA ZFaceA ZD sub def
+ /NxB XFaceB XC sub def
+ /NyB YFaceB YC sub def
+ /NzB ZFaceB ZC sub def
+ /NxC XFaceC XB sub def
+ /NyC YFaceC YB sub def
+ /NzC ZFaceC ZB sub def
+ /NxD XFaceD XA sub def
+ /NyD YFaceD YA sub def
+ /NzD ZFaceD ZA sub def
+% Conditions de visibilité
+% rayon vers point de vue
+ /RXvueA XFaceA XpointVue sub def
+ /RYvueA YFaceA YpointVue sub def
+ /RZvueA ZFaceA ZpointVue sub def
+ /RXvueB XFaceB XpointVue sub def
+ /RYvueB YFaceB YpointVue sub def
+ /RZvueB ZFaceB ZpointVue sub def
+ /RXvueC XFaceC XpointVue sub def
+ /RYvueC YFaceC YpointVue sub def
+ /RZvueC ZFaceC ZpointVue sub def
+ /RXvueD XFaceD XpointVue sub def
+ /RYvueD YFaceD YpointVue sub def
+ /RZvueD ZFaceD ZpointVue sub def
+% produit scalaire
+ /PSA RXvueA NxA mul RYvueA NyA mul add RZvueA NzA mul add def
+ /PSB RXvueB NxB mul RYvueB NyB mul add RZvueB NzB mul add def
+ /PSC RXvueC NxC mul RYvueC NyC mul add RZvueC NzC mul add def
+ /PSD RXvueD NxD mul RYvueD NyD mul add RZvueD NzD mul add def
+ }
+ def
+/Tetraedre{%
+SommetsTetraedre
+% face ABC
+ PSA 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+} if
+% face DAB
+ PSB 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+} if
+% face DAC
+PSC 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+} if
+% face DBC
+ PSD 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+} if
+}
+def
+%
+/SommetsPyramide{%
+ /xA A def
+ /yA A neg def
+ /zA 0 def
+ /xB A def
+ /yB A def
+ /zB 0 def
+ /xC A neg def
+ /yC A def
+ /zC 0 def
+ /xD A neg def
+ /yD A neg def
+ /zD 0 def
+ /xS 0 def
+ /yS 0 def
+ /zS Hpyramide def
+% coordonnées centre des faces
+ /Alpha A Hpyramide atan def
+ /xFaceSAB Hpyramide Alpha dup sin exch cos mul mul def
+ /yFaceSAB 0 def
+ /zFaceSAB Hpyramide Alpha sin dup mul mul def
+ /xFaceSBC 0 def
+ /yFaceSBC xFaceSAB def
+ /zFaceSBC zFaceSAB fracHeight mul def
+ /xFaceSCD xFaceSAB neg def
+ /yFaceSCD 0 def
+ /zFaceSCD zFaceSAB fracHeight mul def
+ /xFaceSDA 0 def
+ /yFaceSDA xFaceSAB neg def
+ /zFaceSDA zFaceSAB fracHeight mul def
+% sommets après rotation et translation
+ /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def
+ /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def
+ /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def
+ /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def
+ /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def
+ /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def
+ /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def
+ /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def
+ /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def
+ /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def
+ /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def
+ /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def
+ /XS M11 xS mul M12 yS mul add M13 zS mul add CX add def
+ /YS M21 xS mul M22 yS mul add M23 zS mul add CY add def
+ /ZS M31 xS mul M32 yS mul add M33 zS mul add CZ add def
+% centres de faces après transformations
+ /XFaceSAB M11 xFaceSAB mul M12 yFaceSAB mul add M13 zFaceSAB mul add CX add def
+ /YFaceSAB M21 xFaceSAB mul M22 yFaceSAB mul add M23 zFaceSAB mul add CY add def
+ /ZFaceSAB M31 xFaceSAB mul M32 yFaceSAB mul add M33 zFaceSAB mul add CZ add def
+ /XFaceSBC M11 xFaceSBC mul M12 yFaceSBC mul add M13 zFaceSBC mul add CX add def
+ /YFaceSBC M21 xFaceSBC mul M22 yFaceSBC mul add M23 zFaceSBC mul add CY add def
+ /ZFaceSBC M31 xFaceSBC mul M32 yFaceSBC mul add M33 zFaceSBC mul add CZ add def
+ /XFaceSCD M11 xFaceSCD mul M12 yFaceSCD mul add M13 zFaceSCD mul add CX add def
+ /YFaceSCD M21 xFaceSCD mul M22 yFaceSCD mul add M23 zFaceSCD mul add CY add def
+ /ZFaceSCD M31 xFaceSCD mul M32 yFaceSCD mul add M33 zFaceSCD mul add CZ add def
+ /XFaceSDA M11 xFaceSDA mul M12 yFaceSDA mul add M13 zFaceSDA mul add CX add def
+ /YFaceSDA M21 xFaceSDA mul M22 yFaceSDA mul add M23 zFaceSDA mul add CY add def
+ /ZFaceSDA M31 xFaceSDA mul M32 yFaceSDA mul add M33 zFaceSDA mul add CZ add def
+% Normales aux faces
+ /NxSAB XFaceSAB CX sub def
+ /NySAB YFaceSAB CY sub def
+ /NzSAB ZFaceSAB CZ sub def
+ /NxSBC XFaceSBC CX sub def
+ /NySBC YFaceSBC CY sub def
+ /NzSBC ZFaceSBC CZ sub def
+ /NxSCD XFaceSCD CX sub def
+ /NySCD YFaceSCD CY sub def
+ /NzSCD ZFaceSCD CZ sub def
+ /NxSDA XFaceSDA CX sub def
+ /NySDA YFaceSDA CY sub def
+ /NzSDA ZFaceSDA CZ sub def
+ /NxABCD CX XS sub def
+ /NyABCD CY YS sub def
+ /NzABCD CZ ZS sub def
+% Conditions de visibilité
+% rayon vers point de vue
+ /RXvueSAB XFaceSAB XpointVue sub def
+ /RYvueSAB YFaceSAB YpointVue sub def
+ /RZvueSAB ZFaceSAB ZpointVue sub def
+ /RXvueSBC XFaceSBC XpointVue sub def
+ /RYvueSBC YFaceSBC YpointVue sub def
+ /RZvueSBC ZFaceSBC ZpointVue sub def
+ /RXvueSCD XFaceSCD XpointVue sub def
+ /RYvueSCD YFaceSCD YpointVue sub def
+ /RZvueSCD ZFaceSCD ZpointVue sub def
+ /RXvueSDA XFaceSDA XpointVue sub def
+ /RYvueSDA YFaceSDA YpointVue sub def
+ /RZvueSDA ZFaceSDA ZpointVue sub def
+ /RXvueABCD CX XpointVue sub def
+ /RYvueABCD CY YpointVue sub def
+ /RZvueABCD CZ ZpointVue sub def
+ /PSAB RXvueSAB NxSAB mul RYvueSAB NySAB mul add RZvueSAB NzSAB mul add def
+ /PSBC RXvueSBC NxSBC mul RYvueSBC NySBC mul add RZvueSBC NzSBC mul add def
+ /PSCD RXvueSCD NxSCD mul RYvueSCD NySCD mul add RZvueSCD NzSCD mul add def
+ /PSDA RXvueSDA NxSDA mul RYvueSDA NySDA mul add RZvueSDA NzSDA mul add def
+ /PSABCD RXvueABCD NxABCD mul RYvueABCD NyABCD mul add RZvueABCD NzABCD mul add def
+ }
+ def
+%
+/MaillageSphere {
+0 increment 360 increment sub {%
+ /theta exch def
+departPhi increment 90 increment sub {%
+ /phi exch def
+% newpath
+ /Xpoint Rsphere theta cos mul phi cos mul def
+ /Ypoint Rsphere theta sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ moveto
+% Centre de la facette
+ /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def
+ /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def
+ /Zpoint Rsphere phi increment 2 div add sin mul def
+CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale à la facette
+ /nXfacette xCentreFacette CX sub def
+ /nYfacette yCentreFacette CY sub def
+ /nZfacette zCentreFacette CZ sub def
+% rayon vers point de vue
+ /RXvue xCentreFacette XpointVue sub def
+ /RYvue yCentreFacette YpointVue sub def
+ /RZvue zCentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+condition {
+theta 1 theta increment add {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi cos mul def
+ /Ypoint Rsphere theta1 sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi 1 phi increment add {
+ /phi1 exch def
+ /Xpoint Rsphere theta increment add cos mul phi1 cos mul def
+ /Ypoint Rsphere theta increment add sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta increment add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi increment add cos mul def
+ /Ypoint Rsphere theta1 sin mul phi increment add cos mul def
+ /Zpoint Rsphere phi increment add sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi increment add -1 phi {
+ /phi1 exch def
+ /Xpoint Rsphere theta cos mul phi1 cos mul def
+ /Ypoint Rsphere theta sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+} def
+%
+/CylinderThreeD{
+reduction reduction scale
+1 setlinejoin
+0 incrementANGLE 360 {%
+ /theta exch def
+ 0 incrementHAUTEUR Hcylindre incrementHAUTEUR sub {%
+ /H exch def
+% newpath
+ /X1 Rcylindre theta cos mul def
+ /Y1 Rcylindre theta sin mul def
+ /Z1 H def
+ /Xpoint X1 def
+ /Ypoint Y1 def
+ /Zpoint Z1 def
+CalculsPointsAfterTransformations
+ /Xfacette Xabscisse def
+ /Yfacette Yordonnee def
+ /Zfacette Zcote def
+ CalcCoordinates
+ moveto
+% coordonnées du centre de la facette
+ /Xpoint Rcylindre theta incrementANGLE 2 div add cos mul def
+ /Ypoint Rcylindre theta incrementANGLE 2 div add sin mul def
+ /Zpoint H incrementHAUTEUR 2 div add def
+CalculsPointsAfterTransformations
+% Point sur l'axe du cylindre
+% à la même hauteur que M1
+ /Zpoint Z1 def
+ /Xpoint 0 def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+% normale à la facette
+ /nXfacette Xfacette Xabscisse sub def
+ /nYfacette Yfacette Yordonnee sub def
+ /nZfacette Zfacette Zcote sub def
+% rayon vers point de vue
+ /RXvue Xfacette XpointVue sub def
+ /RYvue Yfacette YpointVue sub def
+ /RZvue Zfacette ZpointVue sub def
+% test de visibilité
+ /PSfacette nXfacette RXvue mul
+ nYfacette RYvue mul add
+ nZfacette RZvue mul add
+ def
+PSfacette 0 le {
+theta 1 theta incrementANGLE add {%
+ /theta1 exch def
+ /Xpoint Rcylindre theta1 cos mul def
+ /Ypoint Rcylindre theta1 sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H 1 H incrementHAUTEUR add {
+ /H1 exch def
+ /Xpoint Rcylindre theta incrementANGLE add cos mul def
+ /Ypoint Rcylindre theta incrementANGLE add sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta incrementANGLE add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rcylindre theta1 cos mul def
+ /Ypoint Rcylindre theta1 sin mul def
+ /Zpoint H incrementHAUTEUR add def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H incrementHAUTEUR add -1 H {
+ /H1 exch def
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+% Face supérieure
+% centre de la face supérieure
+ /Xpoint 0 def
+ /Zpoint Hcylindre def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+ /CxFaceSup Xabscisse def
+ /CyFaceSup Yordonnee def
+ /CzFaceSup Zcote def
+% centre de la face inférieure
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% Normale à la face supérieure
+ /nXFaceSup CxFaceSup CxFaceInf sub def
+ /nYFaceSup CyFaceSup CyFaceInf sub def
+ /nZFaceSup CzFaceSup CzFaceInf sub def
+% rayon vers point de vue verd la face inférieure
+ /RXvueInf CxFaceInf XpointVue sub def
+ /RYvueInf CyFaceInf YpointVue sub def
+ /RZvueInf CzFaceInf ZpointVue sub def
+% rayon vers point de vue verd la face supérieure
+ /RXvueSup CxFaceSup XpointVue sub def
+ /RYvueSup CyFaceSup YpointVue sub def
+ /RZvueSup CzFaceSup ZpointVue sub def
+% Visibilité face supérieure
+ /PSfaceSup RXvueSup nXFaceSup mul
+ RYvueSup nYFaceSup mul add
+ RZvueSup nZFaceSup mul add def
+% Visibilité face inférieure
+ /PSfaceInf RXvueInf nXFaceSup neg mul
+ RYvueInf nYFaceSup mul sub
+ RZvueInf nZFaceSup mul sub def
+PSfaceSup 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint Hcylindre def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+% face inférieure
+PSfaceInf 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint 0 def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+ } def
+%
+ %
+/ConeThreeD{
+ /AngleCone Rcone Hcone atan def
+ /TanAngleCone AngleCone dup sin exch cos div def
+ /incrementANGLE 10 def
+ /incrementHAUTEUR Hcone fracHeight mul 5 div def
+1 setlinejoin
+newpath
+0 incrementANGLE 360 {%
+ /theta exch def
+ 0 incrementHAUTEUR Hcone fracHeight mul incrementHAUTEUR sub {%
+ /H exch def
+ % normale à la facette
+ /nXfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add cos mul
+ mul def
+ /nYfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add sin mul
+ mul def
+ /nZfacette Hcone AngleCone sin dup mul mul def
+ /Xpoint nXfacette def
+ /Ypoint nYfacette def
+ /Zpoint nZfacette def
+CalculsPointsAfterTransformations
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+%
+ /OK Hcone H sub TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ /Xfacette Xabscisse def
+ /Yfacette Yordonnee def
+ /Zfacette Zcote def
+ CalcCoordinates
+ moveto
+% coordonnées du centre de la facette
+ /OK Hcone H incrementHAUTEUR 2 div add sub TanAngleCone mul def
+ /Xpoint OK theta incrementANGLE 2 div add cos mul def
+ /Ypoint OK theta incrementANGLE 2 div add sin mul def
+ /Zpoint H incrementHAUTEUR 2 div add def
+CalculsPointsAfterTransformations
+ /XcentreFacette Xabscisse def
+ /YcentreFacette Yordonnee def
+ /ZcentreFacette Zcote def
+% rayon vers point de vue
+ /RXvue XcentreFacette XpointVue sub def
+ /RYvue YcentreFacette YpointVue sub def
+ /RZvue ZcentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette nXfacette RXvue mul
+ nYfacette RYvue mul add
+ nZfacette RZvue mul add
+ def
+PSfacette 0 le {
+theta 1 theta incrementANGLE add {%
+ /theta1 exch def
+ /OK Hcone H sub TanAngleCone mul def
+ /Xpoint OK theta1 cos mul def
+ /Ypoint OK theta1 sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H 1 H incrementHAUTEUR add {
+ /H1 exch def
+ /OK Hcone H1 sub TanAngleCone mul def
+ /Xpoint OK theta incrementANGLE add cos mul def
+ /Ypoint OK theta incrementANGLE add sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta incrementANGLE add -1 theta {%
+ /theta1 exch def
+ /OK Hcone H incrementHAUTEUR add sub TanAngleCone mul def
+ /Xpoint OK theta1 cos mul def
+ /Ypoint OK theta1 sin mul def
+ /Zpoint H incrementHAUTEUR add def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H incrementHAUTEUR add -1 H {
+ /H1 exch def
+ /OK Hcone H1 sub TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% modification du 16/11/2002
+% /Xpoint CxFaceInf def
+% /Ypoint CyFaceInf def
+% /Zpoint CzFaceInf def
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint 0 def
+% fin modification du 16/11/2002
+CalculsPointsAfterTransformations
+ /CxBaseInf Xabscisse def
+ /CyBaseInf Yordonnee def
+ /CzBaseInf Zcote def
+% centre de la base supérieure avant transformations
+ /CxFaceSup 0 def
+ /CyFaceSup 0 def
+ /CzFaceSup Hcone fracHeight mul def
+% Sommet du cone
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Hcone def
+CalculsPointsAfterTransformations
+ /XsommetCone Xabscisse def
+ /YsommetCone Yordonnee def
+ /ZsommetCone Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetCone sub def
+ /nYBaseInf CyFaceInf YsommetCone sub def
+ /nZBaseInf CzFaceInf ZsommetCone sub def
+% centre de la base supérieure
+ /Xpoint CxFaceSup def
+ /Ypoint CyFaceSup def
+ /Zpoint CzFaceSup def
+CalculsPointsAfterTransformations
+ /CxBaseSup Xabscisse def
+ /CyBaseSup Yordonnee def
+ /CzBaseSup Zcote def
+% Normale extérieure à la base supérieure
+ /nXBaseSup XsommetCone CxFaceSup sub def
+ /nYBaseSup YsommetCone CyFaceSup sub def
+ /nZBaseSup ZsommetCone CzFaceSup sub def
+% rayon vers point de vue
+ /RXvueSup CxBaseSup XpointVue sub def
+ /RYvueSup CyBaseSup YpointVue sub def
+ /RZvueSup CzBaseSup ZpointVue sub def
+ /RXvueInf CxBaseInf XpointVue sub def
+ /RYvueInf CyBaseInf YpointVue sub def
+ /RZvueInf CzBaseInf ZpointVue sub def
+% Visibilité de la base inférieure
+ /PSbaseInfCone nXBaseInf RXvueInf mul
+ nYBaseInf RYvueInf mul add
+ nZBaseInf RZvueInf mul add def
+% Visibilité de la base supérieure
+ /PSbaseSupCone nXBaseSup RXvueSup mul
+ nYBaseSup RYvueSup mul add
+ nZBaseSup RZvueSup mul add def
+PSbaseInfCone 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcone theta cos mul def
+ /Ypoint Rcone theta sin mul def
+ /Zpoint 0 def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+%% PSbaseSupCone 0 le {
+%% modifié le 31/10/2003
+%PSbaseSupCone 0 ge {
+PSbaseSupCone 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /OK Hcone 1 fracHeight sub mul TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint Hcone fracHeight mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+ } def
+/PortionSphere{%
+ /Xpoint Rsphere psTHETA dTHETA neg add cos mul psPHI dPHI sub cos mul def
+ /Ypoint Rsphere psTHETA dTHETA neg add sin mul psPHI dPHI sub cos mul def
+ /Zpoint Rsphere psPHI dPHI sub sin mul def
+CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale à la facette
+ /nXfacette xCentreFacette CX sub def
+ /nYfacette yCentreFacette CY sub def
+ /nZfacette zCentreFacette CZ sub def
+% rayon vers point de vue
+ /RXvue xCentreFacette XpointVue sub def
+ /RYvue yCentreFacette YpointVue sub def
+ /RZvue zCentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+PSfacette 0 le {
+CalcCoordinates
+newpath
+ moveto
+psTHETA dTHETA sub 1 psTHETA dTHETA add {
+ /Theta exch def
+ /Xpoint Rsphere Theta cos psPHI dPHI sub cos mul mul def
+ /Ypoint Rsphere Theta sin psPHI dPHI sub cos mul mul def
+ /Zpoint Rsphere psPHI dPHI sub sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+psPHI dPHI sub 1 psPHI dPHI add {
+ /Phi exch def
+ /Xpoint Rsphere psTHETA dTHETA add cos Phi cos mul mul def
+ /Ypoint Rsphere psTHETA dTHETA add sin Phi cos mul mul def
+ /Zpoint Rsphere Phi sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+psTHETA dTHETA add -1 psTHETA dTHETA sub {
+ /Theta exch def
+ /Xpoint Rsphere Theta cos psPHI dPHI add cos mul mul def
+ /Ypoint Rsphere Theta sin psPHI dPHI add cos mul mul def
+ /Zpoint Rsphere psPHI dPHI add sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+psPHI dPHI add -1 psPHI dPHI sub {
+ /Phi exch def
+ /Xpoint Rsphere psTHETA dTHETA sub cos Phi cos mul mul def
+ /Ypoint Rsphere psTHETA dTHETA sub sin Phi cos mul mul def
+ /Zpoint Rsphere Phi sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+closepath
+} if
+} def
+% Dodecahedron : 31 décembre 2003
+% datas : Graphisme scientifique R.Dony
+% Masson ed. page 240
+/Dodecahedron{%
+ /XA M11 0 mul M12 A 0.607062 mul mul add M13 A mul 0.794655 mul add CX add def
+ /YA M21 0 mul M22 A 0.607062 mul mul add M23 A mul 0.794655 mul add CY add def
+ /ZA M31 0 mul M32 A 0.607062 mul mul add M33 A mul 0.794655 mul add CZ add def
+ /XB M11 A mul -0.5773503 mul M12 A mul 0.1875925 mul add M13 A mul 0.7946545 mul add CX add def
+ /YB M21 A mul -0.5773503 mul M22 A mul 0.1875925 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZB M31 A mul -0.5773503 mul M32 A mul 0.1875925 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XC M11 A mul -0.3568221 mul M12 A mul -0.4911235 mul add M13 A mul 0.7946545 mul add CX add def
+ /YC M21 A mul -0.3568221 mul M22 A mul -0.4911235 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZC M31 A mul -0.3568221 mul M32 A mul -0.4911235 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XD M11 A mul 0.3568221 mul M12 A mul -0.4911235 mul add M13 A mul 0.7946545 mul add CX add def
+ /YD M21 A mul 0.3568221 mul M22 A mul -0.4911235 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZD M31 A mul 0.3568221 mul M32 A mul -0.4911235 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XE M11 A mul 0.5773503 mul M12 A mul 0.1875925 mul add M13 A mul 0.7946545 mul add CX add def
+ /YE M21 A mul 0.5773503 mul M22 A mul 0.1875925 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZE M31 A mul 0.5773503 mul M32 A mul 0.1875925 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XF M11 A mul 0 mul M12 A mul 0.982247 mul add M13 A mul 0.175925 mul add CX add def
+ /YF M21 A mul 0 mul M22 A mul 0.982247 mul add M23 A mul 0.175925 mul add CY add def
+ /ZF M31 A mul 0 mul M32 A mul 0.982247 mul add M33 A mul 0.175925 mul add CZ add def
+ /XG M11 A mul -0.9341724 mul M12 A mul 0.303531 mul add M13 A mul 0.1875925 mul add CX add def
+ /YG M21 A mul -0.9341724 mul M22 A mul 0.303531 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZG M31 A mul -0.9341724 mul M32 A mul 0.303531 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XH M11 A mul -0.5773503 mul M12 A mul -0.7946545 mul add M13 A mul 0.1875925 mul add CX add def
+ /YH M21 A mul -0.5773503 mul M22 A mul -0.7946545 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZH M31 A mul -0.5773503 mul M32 A mul -0.7946545 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XI M11 A mul 0.5773503 mul M12 A mul -0.7946545 mul add M13 A mul 0.1875925 mul add CX add def
+ /YI M21 A mul 0.5773503 mul M22 A mul -0.7946545 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZI M31 A mul 0.5773503 mul M32 A mul -0.7946545 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XJ M11 A mul 0.9341724 mul M12 A mul 0.303531 mul add M13 A mul 0.1875925 mul add CX add def
+ /YJ M21 A mul 0.9341724 mul M22 A mul 0.303531 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZJ M31 A mul 0.9341724 mul M32 A mul 0.303531 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XK M11 A mul 0 mul M12 A mul -0.982247 mul add M13 A mul -0.1875925 mul add CX add def
+ /YK M21 A mul 0 mul M22 A mul -0.982247 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZK M31 A mul 0 mul M32 A mul -0.982247 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XL M11 A mul 0.9341724 mul M12 A mul -0.303531 mul add M13 A mul -0.1875925 mul add CX add def
+ /YL M21 A mul 0.9341724 mul M22 A mul -0.303531 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZL M31 A mul 0.9341724 mul M32 A mul -0.303531 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XM M11 A mul 0.5773503 mul M12 A mul 0.7946545 mul add M13 A mul -0.1875925 mul add CX add def
+ /YM M21 A mul 0.5773503 mul M22 A mul 0.7946545 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZM M31 A mul 0.5773503 mul M32 A mul 0.7946545 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XN M11 A mul -0.5773503 mul M12 A mul 0.7946545 mul add M13 A mul -0.1875925 mul add CX add def
+ /YN M21 A mul -0.5773503 mul M22 A mul 0.7946545 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZN M31 A mul -0.5773503 mul M32 A mul 0.7946545 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XO M11 A mul -0.9341724 mul M12 A mul -0.303531 mul add M13 A mul -0.1875925 mul add CX add def
+ /YO M21 A mul -0.9341724 mul M22 A mul -0.303531 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZO M31 A mul -0.9341724 mul M32 A mul -0.303531 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XP M11 A mul -0.5773503 mul M12 A mul -0.1875925 mul add M13 A mul -0.7946545 mul add CX add def
+ /YP M21 A mul -0.5773503 mul M22 A mul -0.1875925 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZP M31 A mul -0.5773503 mul M32 A mul -0.1875925 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XQ M11 A mul -0.3568221 mul M12 A mul 0.4911235 mul add M13 A mul -0.7946545 mul add CX add def
+ /YQ M21 A mul -0.3568221 mul M22 A mul 0.4911235 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZQ M31 A mul -0.3568221 mul M32 A mul 0.4911235 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XR M11 A mul 0.3568221 mul M12 A mul 0.4911235 mul add M13 A mul -0.7946545 mul add CX add def
+ /YR M21 A mul 0.3568221 mul M22 A mul 0.4911235 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZR M31 A mul 0.3568221 mul M32 A mul 0.4911235 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XS M11 A mul 0.5773503 mul M12 A mul -0.1875925 mul add M13 A mul -0.7946545 mul add CX add def
+ /YS M21 A mul 0.5773503 mul M22 A mul -0.1875925 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZS M31 A mul 0.5773503 mul M32 A mul -0.1875925 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XT M11 0 mul M12 A -0.607062 mul mul add M13 A mul -0.794655 mul add CX add def
+ /YT M21 0 mul M22 A -0.607062 mul mul add M23 A mul -0.794655 mul add CY add def
+ /ZT M31 0 mul M32 A -0.607062 mul mul add M33 A mul -0.794655 mul add CZ add def
+% Centres des faces : condition de visibilité
+% FACE 1 pentagone régulier ABCDE
+% OC1
+ /XC1 XA XB add XC add XD add XE add 5 div def
+ /YC1 YA YB add YC add YD add YE add 5 div def
+ /ZC1 ZA ZB add ZC add ZD add ZE add 5 div def
+% Normale à la face 1
+ /NX1 XC1 CX sub def
+ /NY1 YC1 CY sub def
+ /NZ1 ZC1 CZ sub def
+% rayon vers point de vue
+ /RXvue1 XC1 XpointVue sub def
+ /RYvue1 YC1 YpointVue sub def
+ /RZvue1 ZC1 ZpointVue sub def
+% produit scalaire
+ /PS1 RXvue1 NX1 mul RYvue1 NY1 mul add RZvue1 NZ1 mul add def
+% FACE 2 pentagone régulier EDILJ
+% OC2
+ /XC2 XE XD add XI add XL add XJ add 5 div def
+ /YC2 YE YD add YI add YL add YJ add 5 div def
+ /ZC2 ZE ZD add ZI add ZL add ZJ add 5 div def
+% Normale à la face 2
+ /NX2 XC2 CX sub def
+ /NY2 YC2 CY sub def
+ /NZ2 ZC2 CZ sub def
+% rayon vers point de vue
+ /RXvue2 XC2 XpointVue sub def
+ /RYvue2 YC2 YpointVue sub def
+ /RZvue2 ZC2 ZpointVue sub def
+% produit scalaire
+ /PS2 RXvue2 NX2 mul RYvue2 NY2 mul add RZvue2 NZ2 mul add def
+% FACE 3 pentagone régulier EJMFA
+% OC3
+ /XC3 XE XJ add XM add XF add XA add 5 div def
+ /YC3 YE YJ add YM add YF add YA add 5 div def
+ /ZC3 ZE ZJ add ZM add ZF add ZA add 5 div def
+% Normale à la face 2
+ /NX3 XC3 CX sub def
+ /NY3 YC3 CY sub def
+ /NZ3 ZC3 CZ sub def
+% rayon vers point de vue
+ /RXvue3 XC3 XpointVue sub def
+ /RYvue3 YC3 YpointVue sub def
+ /RZvue3 ZC3 ZpointVue sub def
+% produit scalaire
+ /PS3 RXvue3 NX3 mul RYvue3 NY3 mul add RZvue3 NZ3 mul add def
+% FACE 4 pentagone régulier AFNGB
+% OC4
+ /XC4 XA XF add XN add XG add XB add 5 div def
+ /YC4 YA YF add YN add YG add YB add 5 div def
+ /ZC4 ZA ZF add ZN add ZG add ZB add 5 div def
+% Normale à la face 4
+ /NX4 XC4 CX sub def
+ /NY4 YC4 CY sub def
+ /NZ4 ZC4 CZ sub def
+% rayon vers point de vue
+ /RXvue4 XC4 XpointVue sub def
+ /RYvue4 YC4 YpointVue sub def
+ /RZvue4 ZC4 ZpointVue sub def
+% produit scalaire
+ /PS4 RXvue4 NX4 mul RYvue4 NY4 mul add RZvue4 NZ4 mul add def
+% FACE 5 pentagone régulier BGOHC
+% OC5
+ /XC5 XB XG add XO add XH add XC add 5 div def
+ /YC5 YB YG add YO add YH add YC add 5 div def
+ /ZC5 ZB ZG add ZO add ZH add ZC add 5 div def
+% Normale à la face 5
+ /NX5 XC5 CX sub def
+ /NY5 YC5 CY sub def
+ /NZ5 ZC5 CZ sub def
+% rayon vers point de vue
+ /RXvue5 XC5 XpointVue sub def
+ /RYvue5 YC5 YpointVue sub def
+ /RZvue5 ZC5 ZpointVue sub def
+% produit scalaire
+ /PS5 RXvue5 NX5 mul RYvue5 NY5 mul add RZvue5 NZ5 mul add def
+% FACE 6 pentagone régulier CHKID
+% OC6
+ /XC6 XC XH add XK add XI add XD add 5 div def
+ /YC6 YC YH add YK add YI add YD add 5 div def
+ /ZC6 ZC ZH add ZK add ZI add ZD add 5 div def
+% Normale à la face 6
+ /NX6 XC6 CX sub def
+ /NY6 YC6 CY sub def
+ /NZ6 ZC6 CZ sub def
+% rayon vers point de vue
+ /RXvue6 XC6 XpointVue sub def
+ /RYvue6 YC6 YpointVue sub def
+ /RZvue6 ZC6 ZpointVue sub def
+% produit scalaire
+ /PS6 RXvue6 NX6 mul RYvue6 NY6 mul add RZvue6 NZ6 mul add def
+% FACE 7 pentagone régulier KTSLI
+% OC7
+ /XC7 XK XT add XS add XL add XI add 5 div def
+ /YC7 YK YT add YS add YL add YI add 5 div def
+ /ZC7 ZK ZT add ZS add ZL add ZI add 5 div def
+% Normale à la face 7
+ /NX7 XC7 CX sub def
+ /NY7 YC7 CY sub def
+ /NZ7 ZC7 CZ sub def
+% rayon vers point de vue
+ /RXvue7 XC7 XpointVue sub def
+ /RYvue7 YC7 YpointVue sub def
+ /RZvue7 ZC7 ZpointVue sub def
+% produit scalaire
+ /PS7 RXvue7 NX7 mul RYvue7 NY7 mul add RZvue7 NZ7 mul add def
+% FACE 8 pentagone régulier LSRMJ
+% OC8
+ /XC8 XL XS add XR add XM add XJ add 5 div def
+ /YC8 YL YS add YR add YM add YJ add 5 div def
+ /ZC8 ZL ZS add ZR add ZM add ZJ add 5 div def
+% Normale à la face 8
+ /NX8 XC8 CX sub def
+ /NY8 YC8 CY sub def
+ /NZ8 ZC8 CZ sub def
+% rayon vers point de vue
+ /RXvue8 XC8 XpointVue sub def
+ /RYvue8 YC8 YpointVue sub def
+ /RZvue8 ZC8 ZpointVue sub def
+% produit scalaire
+ /PS8 RXvue8 NX8 mul RYvue8 NY8 mul add RZvue8 NZ8 mul add def
+% FACE 9 pentagone régulier MRQNF
+% OC9
+ /XC9 XM XR add XQ add XN add XF add 5 div def
+ /YC9 YM YR add YQ add YN add YF add 5 div def
+ /ZC9 ZM ZR add ZQ add ZN add ZF add 5 div def
+% Normale à la face 6
+ /NX9 XC9 CX sub def
+ /NY9 YC9 CY sub def
+ /NZ9 ZC9 CZ sub def
+% rayon vers point de vue
+ /RXvue9 XC9 XpointVue sub def
+ /RYvue9 YC9 YpointVue sub def
+ /RZvue9 ZC9 ZpointVue sub def
+% produit scalaire
+ /PS9 RXvue9 NX9 mul RYvue9 NY9 mul add RZvue9 NZ9 mul add def
+% FACE 10 pentagone régulier NQPOG
+% OC10
+ /XC10 XN XQ add XP add XO add XG add 5 div def
+ /YC10 YN YQ add YP add YO add YG add 5 div def
+ /ZC10 ZN ZQ add ZP add ZO add ZG add 5 div def
+% Normale à la face 6
+ /NX10 XC10 CX sub def
+ /NY10 YC10 CY sub def
+ /NZ10 ZC10 CZ sub def
+% rayon vers point de vue
+ /RXvue10 XC10 XpointVue sub def
+ /RYvue10 YC10 YpointVue sub def
+ /RZvue10 ZC10 ZpointVue sub def
+% produit scalaire
+ /PS10 RXvue10 NX10 mul RYvue10 NY10 mul add RZvue10 NZ10 mul add def
+% FACE 11 pentagone régulier OPTKH
+% OC11
+ /XC11 XO XP add XT add XK add XH add 5 div def
+ /YC11 YO YP add YT add YK add YH add 5 div def
+ /ZC11 ZO ZP add ZT add ZK add ZH add 5 div def
+% Normale à la face 11
+ /NX11 XC11 CX sub def
+ /NY11 YC11 CY sub def
+ /NZ11 ZC11 CZ sub def
+% rayon vers point de vue
+ /RXvue11 XC11 XpointVue sub def
+ /RYvue11 YC11 YpointVue sub def
+ /RZvue11 ZC11 ZpointVue sub def
+% produit scalaire
+ /PS11 RXvue11 NX11 mul RYvue11 NY11 mul add RZvue11 NZ11 mul add def
+% FACE 12 pentagone régulier PQRST
+% OC12
+ /XC12 XP XQ add XR add XS add XT add 5 div def
+ /YC12 YP YQ add YR add YS add YT add 5 div def
+ /ZC12 ZP ZQ add ZR add ZS add ZT add 5 div def
+% Normale à la face 12
+ /NX12 XC12 CX sub def
+ /NY12 YC12 CY sub def
+ /NZ12 ZC12 CZ sub def
+% rayon vers point de vue
+ /RXvue12 XC12 XpointVue sub def
+ /RYvue12 YC12 YpointVue sub def
+ /RZvue12 ZC12 ZpointVue sub def
+% produit scalaire
+ /PS12 RXvue12 NX12 mul RYvue12 NY12 mul add RZvue12 NZ12 mul add def
+% faceOne ABDCE
+PS1 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.1 0.1 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face2 EDILJ
+PS2 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YE def
+ /Zcote ZE def
+ /Xabscisse XE def
+ CalcCoordinates
+ moveto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZI def
+ /Xabscisse XI def
+ /Yordonnee YI def
+ CalcCoordinates
+ lineto
+ /Zcote ZL def
+ /Xabscisse XL def
+ /Yordonnee YL def
+ CalcCoordinates
+ lineto
+ /Zcote ZJ def
+ /Xabscisse XJ def
+ /Yordonnee YJ def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.15 0.15 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face3 EJMFA
+PS3 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YE def
+ /Zcote ZE def
+ /Xabscisse XE def
+ CalcCoordinates
+ moveto
+ /Zcote ZJ def
+ /Xabscisse XJ def
+ /Yordonnee YJ def
+ CalcCoordinates
+ lineto
+ /Zcote ZM def
+ /Xabscisse XM def
+ /Yordonnee YM def
+ CalcCoordinates
+ lineto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.2 0.2 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face4 AFNGB
+PS4 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZN def
+ /Xabscisse XN def
+ /Yordonnee YN def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.25 0.25 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face5 BGOHC
+PS5 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YB def
+ /Zcote ZB def
+ /Xabscisse XB def
+ CalcCoordinates
+ moveto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZO def
+ /Xabscisse XO def
+ /Yordonnee YO def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.3 0.3 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face6 CHKID
+PS6 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YC def
+ /Zcote ZC def
+ /Xabscisse XC def
+ CalcCoordinates
+ moveto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZK def
+ /Xabscisse XK def
+ /Yordonnee YK def
+ CalcCoordinates
+ lineto
+ /Zcote ZI def
+ /Xabscisse XI def
+ /Yordonnee YI def
+ CalcCoordinates
+ lineto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.35 0.35 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face7 KTSLI
+PS7 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YK def
+ /Zcote ZK def
+ /Xabscisse XK def
+ CalcCoordinates
+ moveto
+ /Zcote ZT def
+ /Xabscisse XT def
+ /Yordonnee YT def
+ CalcCoordinates
+ lineto
+ /Zcote ZS def
+ /Xabscisse XS def
+ /Yordonnee YS def
+ CalcCoordinates
+ lineto
+ /Zcote ZL def
+ /Xabscisse XL def
+ /Yordonnee YL def
+ CalcCoordinates
+ lineto
+ /Zcote ZI def
+ /Xabscisse XI def
+ /Yordonnee YI def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.4 0.4 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face8 LSRMJ
+PS8 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YL def
+ /Zcote ZL def
+ /Xabscisse XL def
+ CalcCoordinates
+ moveto
+ /Zcote ZS def
+ /Xabscisse XS def
+ /Yordonnee YS def
+ CalcCoordinates
+ lineto
+ /Zcote ZR def
+ /Xabscisse XR def
+ /Yordonnee YR def
+ CalcCoordinates
+ lineto
+ /Zcote ZM def
+ /Xabscisse XM def
+ /Yordonnee YM def
+ CalcCoordinates
+ lineto
+ /Zcote ZJ def
+ /Xabscisse XJ def
+ /Yordonnee YJ def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.45 0.45 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face9 MRQNF
+PS9 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YM def
+ /Zcote ZM def
+ /Xabscisse XM def
+ CalcCoordinates
+ moveto
+ /Zcote ZR def
+ /Xabscisse XR def
+ /Yordonnee YR def
+ CalcCoordinates
+ lineto
+ /Zcote ZQ def
+ /Xabscisse XQ def
+ /Yordonnee YQ def
+ CalcCoordinates
+ lineto
+ /Zcote ZN def
+ /Xabscisse XN def
+ /Yordonnee YN def
+ CalcCoordinates
+ lineto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.5 0.5 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face10 NQPOG
+PS10 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YN def
+ /Zcote ZN def
+ /Xabscisse XN def
+ CalcCoordinates
+ moveto
+ /Zcote ZQ def
+ /Xabscisse XQ def
+ /Yordonnee YQ def
+ CalcCoordinates
+ lineto
+ /Zcote ZP def
+ /Xabscisse XP def
+ /Yordonnee YP def
+ CalcCoordinates
+ lineto
+ /Zcote ZO def
+ /Xabscisse XO def
+ /Yordonnee YO def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.55 0.55 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face11 OPTKH
+PS11 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YO def
+ /Zcote ZO def
+ /Xabscisse XO def
+ CalcCoordinates
+ moveto
+ /Zcote ZP def
+ /Xabscisse XP def
+ /Yordonnee YP def
+ CalcCoordinates
+ lineto
+ /Zcote ZT def
+ /Xabscisse XT def
+ /Yordonnee YT def
+ CalcCoordinates
+ lineto
+ /Zcote ZK def
+ /Xabscisse XK def
+ /Yordonnee YK def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.6 0.6 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face12 PQRST
+PS12 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YP def
+ /Zcote ZP def
+ /Xabscisse XP def
+ CalcCoordinates
+ moveto
+ /Zcote ZQ def
+ /Xabscisse XQ def
+ /Yordonnee YQ def
+ CalcCoordinates
+ lineto
+ /Zcote ZR def
+ /Xabscisse XR def
+ /Yordonnee YR def
+ CalcCoordinates
+ lineto
+ /Zcote ZS def
+ /Xabscisse XS def
+ /Yordonnee YS def
+ CalcCoordinates
+ lineto
+ /Zcote ZT def
+ /Xabscisse XT def
+ /Yordonnee YT def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.65 0.65 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+}
+def
+end
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
new file mode 100644
index 0000000000..3895513e2a
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
@@ -0,0 +1,8 @@
+\RequirePackage{pstricks}
+\ProvidesPackage{pst-vue3d}[2007/03/26 package wrapper for
+ pst-vue3d.tex (hv)]
+\input{pst-vue3d.tex}
+\IfFileExists{pst-vue3d.pro}{\@addtofilelist{pst-vue3d.pro}}{}%
+\ProvidesFile{pst-vue3d.tex}
+ [\filedate\space v\fileversion\space `pst-vue3d' (ML,hv)]
+\endinput
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
new file mode 100644
index 0000000000..e6ffa14446
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
@@ -0,0 +1,1640 @@
+%% This is file `pst-vue3d.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-vue3d.tex'
+%%
+%% Manuel Luque <Mluque5130@aol.com> (France)
+%% Herbert Voss <voss _at_ pstricks.de (Germany)
+%%
+%% 2008/02/21
+%%
+%% 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-vue3d' is a PSTricks package to define 3d views
+%% ChangeLog (at end)
+%%
+\csname PSTVueTroisDLoaded\endcsname
+\let\PSTVueTroisDLoaded\endinput
+% Require PSTricks and pst-node packages
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\PSTthreeDLoaded\endinput\else\input pst-3d.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi
+%
+\def\fileversion{1.24}%
+\def\filedate{2008/02/21}%
+\message{`pst-vue3d v\fileversion, \filedate\space (ML,hv)}%
+\edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax
+\pst@addfams{pst-vue3d}% for pst-xkey
+%%%%
+\define@key[psset]{pst-vue3d}{scale}{\def\psk@TroisD@scale{#1}} % echelle
+\define@key[psset]{pst-vue3d}{RotX}{\def\psk@TroisD@RotX{#1}} % rotation autour de Ox en degrés
+\define@key[psset]{pst-vue3d}{RotY}{\def\psk@TroisD@RotY{#1}} % rotation autour de Oy en degrés
+\define@key[psset]{pst-vue3d}{RotZ}{\def\psk@TroisD@RotZ{#1}} % rotation autour de OZ en degrés
+\define@key[psset]{pst-vue3d}{A}{\def\psk@TroisD@A{#1}} % double d'une arête du parallèlépipède
+\define@key[psset]{pst-vue3d}{B}{\def\psk@TroisD@B{#1}} % double d'une arête du parallèlépipède
+\define@key[psset]{pst-vue3d}{C}{\def\psk@TroisD@C{#1}} % double de l'arête du parallèlépipède
+\define@key[psset]{pst-vue3d}{Rtetraedre}{\def\psk@TroisD@Rtetraedre{#1}} % Rayon du cercle tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceA}{\def\psk@TroisD@TetraedreColorFaceA{#1}} % couleur de la face A du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceB}{\def\psk@TroisD@TetraedreColorFaceB{#1}} % couleur de la face B du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceC}{\def\psk@TroisD@TetraedreColorFaceC{#1}} % couleur de la face C du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceD}{\def\psk@TroisD@TetraedreColorFaceD{#1}} % couleur de la face D du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceE}{\def\psk@TroisD@TetraedreColorFaceE{#1}} % couleur de la face D du tétraèdre
+\define@key[psset]{pst-vue3d}{fracHeight}{\def\psk@TroisD@fracHeight{#1}} % fraction de la hauteur du cone
+\define@key[psset]{pst-vue3d}{fracHcone}{\def\psk@TroisD@fracHeight{#1}} % for compatibility
+%
+\define@key[psset]{pst-vue3d}{normaleLongitude}{\def\psk@TroisD@normaleLongitude{#1}} % coordonnées angulaires de la normale
+\define@key[psset]{pst-vue3d}{normaleLatitude}{\def\psk@TroisD@normaleLatitude{#1}} % coordonnées angulaires de la normale
+\define@key[psset]{pst-vue3d}{pas}{\def\psk@TroisD@pas{#1}} % en cm résolution du tracé
+\define@key[psset]{pst-vue3d}{grille}{\def\psk@TroisD@grille{#1}} % Pas de la grille en cm
+%
+\define@key[psset]{pst-vue3d}{THETA}{\def\psk@TroisD@Theta{#1}}
+\define@key[psset]{pst-vue3d}{PHI}{\def\psk@TroisD@Phi{#1}}
+\define@key[psset]{pst-vue3d}{DeltaTHETA}{\def\psk@TroisD@DeltaTheta{#1}}
+\define@key[psset]{pst-vue3d}{DeltaPHI}{\def\psk@TroisD@DeltaPhi{#1}}
+\define@key[psset]{pst-vue3d}{PortionSphereTHETA}{\def\psk@TroisD@PortionSphereTHETA{#1}}
+\define@key[psset]{pst-vue3d}{PortionSpherePHI}{\def\psk@TroisD@PortionSpherePHI{#1}}
+\define@key[psset]{pst-vue3d}{PhiCercle}{\def\psk@TroisD@PhiCercle{#1}}
+\define@key[psset]{pst-vue3d}{ThetaMeridien}{\def\psk@TroisD@ThetaMeridien{#1}}
+\define@key[psset]{pst-vue3d}{Dobs}{\def\psk@TroisD@Dobs{#1}}
+\define@key[psset]{pst-vue3d}{Decran}{\def\psk@TroisD@Ecran{#1}}
+%
+\psset[pst-vue3d]{THETA=30,PHI=10,%
+ Dobs=100,Decran=10,%
+ normaleLongitude=45,%
+ normaleLatitude=45,%
+ PhiCercle=0,%
+ ThetaMeridien=0,%
+ pas=1,%
+ grille=10,%
+ scale=1,%
+ RotX=0,RotY=0,RotZ=0,%
+ A=10,B=10,C=10,%
+ Rtetraedre=5,%
+ ColorFaceD=cyan,ColorFaceA=magenta,ColorFaceB=red,%
+ ColorFaceC=blue,ColorFaceE=yellow,%
+ fracHeight=1,%
+ DeltaTHETA=10,DeltaPHI=10,%
+ PortionSphereTHETA=0,PortionSpherePHI=0}
+% ajout du 28 août 2003
+% colorier au choix les faces du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceOne}{\def\psk@TroisD@CubeColorFaceOne{#1}} % couleur de la face 1 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceTwo}{\def\psk@TroisD@CubeColorFaceTwo{#1}} % couleur de la face 2 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceThree}{\def\psk@TroisD@CubeColorFaceThree{#1}} % couleur de la face 3 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceFour}{\def\psk@TroisD@CubeColorFaceFour{#1}} % couleur de la face 4 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceFive}{\def\psk@TroisD@CubeColorFaceFive{#1}} % couleur de la face 5 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceSix}{\def\psk@TroisD@CubeColorFaceSix{#1}} % couleur de la face 6 du cube
+\psset[pst-vue3d]{CubeColorFaceOne= 1 1 0 ,
+ CubeColorFaceTwo= 0.9 0.9 0 ,
+ CubeColorFaceThree= 0.8 0.8 0 ,
+ CubeColorFaceFour= 0.7 0.7 0 ,
+ CubeColorFaceFive= 0.6 0.6 0 ,
+ CubeColorFaceSix= 0.5 0.5 0 }
+% fin 28 août 2003
+% ajout 27 octobre 2003
+\define@boolkey[psset]{pst-vue3d}[Pst@]{CubeInside}[true]{}
+\psset[pst-vue3d]{CubeInside=false}
+% hv 2003-12-20
+\define@boolkey[psset]{pst-vue3d}[Pst@]{SphericalCoor}[true]{}
+\psset[pst-vue3d]{SphericalCoor=false}
+%
+\def\variablesTroisD{%
+ 0 0 translate
+% hv 2005-04-30 --->beg
+ /xUnit \pst@number\psxunit def
+ /yUnit \pst@number\psyunit def
+% hv 2005-04-30 <---end
+ /reduction \psk@TroisD@scale\space def
+ /RotX \psk@TroisD@RotX\space def
+ /RotY \psk@TroisD@RotY\space def
+ /RotZ \psk@TroisD@RotZ\space def
+ /A \psk@TroisD@A\space def
+ /B \psk@TroisD@B\space def
+ /C \psk@TroisD@C\space def
+ /RayonBaseTetraedre \psk@TroisD@Rtetraedre\space def
+ /fracHeight \psk@TroisD@fracHeight\space def
+ /Rpoint A 4 div def
+ /nTheta \psk@TroisD@normaleLongitude\space def
+ /nPhi \psk@TroisD@normaleLatitude\space def
+ /S1 \psk@TroisD@normaleLongitude\space sin def
+ /C1 \psk@TroisD@normaleLongitude\space cos def
+ /S2 \psk@TroisD@normaleLatitude\space sin def
+ /C2 \psk@TroisD@normaleLatitude\space cos def
+ /THETA \psk@TroisD@Theta\space def
+ /PHI \psk@TroisD@Phi\space def
+ /dTHETA \psk@TroisD@DeltaTheta\space def
+ /dPHI \psk@TroisD@DeltaPhi\space def
+ /psTHETA \psk@TroisD@PortionSphereTHETA\space def
+ /psPHI \psk@TroisD@PortionSpherePHI\space def
+ /PhiCercle \psk@TroisD@PhiCercle\space def
+ /ThetaMeridien \psk@TroisD@ThetaMeridien\space def
+ /Dobs \psk@TroisD@Dobs\space def
+ /DScreen \psk@TroisD@Ecran\space def
+ /Sin1 THETA sin def
+ /Sin2 PHI sin def
+ /Cos1 THETA cos def
+ /Cos2 PHI cos def
+ /Cos1Sin2 Cos1 Sin2 mul def
+ /Sin1Sin2 Sin1 Sin2 mul def
+ /Cos1Cos2 Cos1 Cos2 mul def
+ /Sin1Cos2 Sin1 Cos2 mul def
+ /XpointVue Dobs Cos1Cos2 mul def
+ /YpointVue Dobs Sin1Cos2 mul def
+ /ZpointVue Dobs Sin2 mul def
+ /M11 RotZ cos RotY cos mul def
+ /M12 RotZ cos RotY sin mul RotX sin mul
+ RotZ sin RotX cos mul sub def
+ /M13 RotZ cos RotY sin mul RotX cos mul
+ RotZ sin RotX sin mul add def
+ /M21 RotZ sin RotY cos mul def
+ /M22 RotZ sin RotY sin RotX sin mul mul
+ RotZ cos RotX cos mul add def
+ /M23 RotZ sin RotY sin mul RotX cos mul
+ RotZ cos RotX sin mul sub def
+ /M31 RotY sin neg def
+ /M32 RotX sin RotY cos mul def
+ /M33 RotX cos RotY cos mul def
+ }%
+% hv 2003-12-20
+% -------------- Utilities -----------------
+\SpecialCoor
+\pstheader{pst-vue3d.pro}
+
+\def\face{%
+ \pscurve(1;160)(0.8;180)(1;200)
+ \pscustom{\gsave\psarc(0,0){1}{165}{195}
+ \pscurve(1;195)(0.85;180)(1;165)
+ \fill[fillstyle=solid,fillcolor=blue]\grestore}
+ \pscurve[linewidth=.4pt](1;195)(0.85;180)(1;165)
+ \bgroup
+ \psset{linewidth=2pt}
+ \psarc(0,1){1}{180}{270}
+ \psarc(0,-1){1}{90}{180}
+ \egroup
+ \psarc(0,0){1}{150}{210}
+ \psset{linewidth=4pt,linecolor=gray}%
+ \pscurve(-.5,3.5)(-1,3)(-1.2,2.5)(-1.3,2)(-1.4,1)(-1.35,0.5)%
+ (-1.2,-.2)(-1.35,-.5)(-1.4,-1)(-1.5,-1.5)(-1.8,-2)(-1.8,-2.3)%
+ (-1.65,-2.5)(-1.35,-2.55)(-.95,-2.8)(-.95,-3.35)(-1,-3.65)(-.8,-4)(-.4,-4.1)
+ \pscurve(-.8,-4)(-.8,-4.2)(-.5,-4.5)(-.4,-5)(-.25,-5.5)(0,-5.8)(.5,-6)%
+}
+\def\eye{%
+ \psarc[linewidth=2pt](0,2.5){2.5}{215}{270}%
+ \psarc[linewidth=2pt](0,-2.5){2.5}{90}{140}%
+ \psarc(-2.5,0){1}{-30}{30}%
+ \psarc(0,0){1.75}{160}{200}
+ \psclip{\pscircle[linestyle=none](0,0){1.75}}
+ \pscircle[fillstyle=solid,fillcolor=lightgray](-2.5,0){0.9}
+ \endpsclip%
+}
+%
+% -------------- Basic Macros --------------
+%
+% hv 2003
+\def\AxesThreeD{\pst@object{AxesThreeD}}
+\def\AxesThreeD@i{\@ifnextchar({\AxesThreeD@iii}{\AxesThreeD@ii}}
+\def\AxesThreeD@ii#1(#2){%
+ \begingroup
+ \addto@par{arrows=#1}%
+ \begin@OpenObj
+ \AxesThreeD@iv#2,@comma*\relax%
+}
+\def\AxesThreeD@iii(#1){%
+ \begingroup
+ \begin@OpenObj
+ \AxesThreeD@iv#1,@comma*\relax%
+}
+%
+\def\AxesThreeD@iv#1,#2*{%
+ \def\@tempa{#2}\def\@tempb{@comma}%
+ \ifx\@tempa\@tempb% only one value
+ \AxesThreeD@v#1,#2\else\AxesThreeD@vi#1,#2\relax%
+ \fi%
+}
+\def\AxesThreeD@v#1,#2\relax{%
+ \AxesThreeD@vi#1,#1,#1,#1\relax%
+}
+\def\AxesThreeD@vi#1,#2,#3,#4\relax{%
+ \use@par
+ \pNodeThreeD(0,0,0){Origin}%
+ \pNodeThreeD(0,0,#3){ZMax}\pNodeThreeD(#1,0,0){XMax}\pNodeThreeD(0,#2,0){YMax}%
+ \psline(Origin)(ZMax)\psline(Origin)(XMax)\psline(Origin)(YMax)%
+ \uput[0](ZMax){\small Z}\uput[90](XMax){\small X}\uput[0](YMax){\small Y}%
+ \end@OpenObj
+ \endgroup
+}
+%
+% hv 2003
+\def\showCoorThreeD{\pst@object{showCoorThreeD}}
+\def\showCoorThreeD@i(#1){{%
+ \begin@OpenObj
+ \showCoorThreeD@ii#1,@comma*\relax
+ \end@OpenObj
+ }\ignorespaces%
+}
+\def\showCoorThreeD@ii#1,#2*{%
+ \def\@tempa{#2}\def\@tempb{@comma}%
+ \ifx\@tempa\@tempb%
+ \showCoorThreeD@iii#1;#2\else\showCoorThreeD@iv#1,#2\relax%
+ \fi%
+}
+%
+\def\showCoorThreeD@iii#1;#2;#3;#4\relax{%
+ \psline(!
+ \variablesTroisD
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /Zcote Radius latitude sin mul def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)(!
+ /Zcote 0 def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)
+ \psline(!
+ /Zcote 0 def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)(!
+ /Zcote 0 def
+ /Yordonnee 0 def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)
+ \psline(!
+ /Zcote 0 def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)(!
+ /Zcote 0 def
+ /Xabscisse 0 def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)
+}
+%
+\def\showCoorThreeD@iv#1,#2,#3,#4\relax{%
+% \qdisk(P){1pt}
+ \LineThreeD(#1,#2,#3)(#1,#2,0)%
+ \LineThreeD(#1,#2,0)(#1,0,0)%
+ \LineThreeD(#1,#2,0)(0,#2,0)%
+}
+%
+%
+\def\CubeThreeD{\def\pst@par{}\pst@object{CubeThreeD}}
+\def\CubeThreeD@i(#1,#2,#3){{
+ \begin@ClosedObj
+% \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ \ifPst@CubeInside /Condition { ge } def \else /Condition { le } def \fi
+ /CubeColorFaceOne {\psk@TroisD@CubeColorFaceOne} def
+ /CubeColorFaceTwo {\psk@TroisD@CubeColorFaceTwo} def
+ /CubeColorFaceThree {\psk@TroisD@CubeColorFaceThree} def
+ /CubeColorFaceFive {\psk@TroisD@CubeColorFaceFive} def
+ /CubeColorFaceFour {\psk@TroisD@CubeColorFaceFour} def
+ /CubeColorFaceSix {\psk@TroisD@CubeColorFaceSix} def
+ tx@3DDict begin
+ /Condition1 { PS1 0 le } def
+ Cube
+ end
+ }% fin du code ps
+ \end@ClosedObj%
+}}
+%
+\def\DieThreeD{\pst@object{DieThreeD}}
+\def\DieThreeD@i(#1,#2,#3){{%
+% (#2,#3,#4) coordonnées du centre
+ \begin@ClosedObj
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ \ifPst@CubeInside /Condition { ge } def \else /Condition {le } def \fi
+ /CubeColorFaceOne {\psk@TroisD@CubeColorFaceOne} def
+ /CubeColorFaceTwo {\psk@TroisD@CubeColorFaceTwo} def
+ /CubeColorFaceThree {\psk@TroisD@CubeColorFaceThree} def
+ /CubeColorFaceFive {\psk@TroisD@CubeColorFaceFive} def
+ /CubeColorFaceFour {\psk@TroisD@CubeColorFaceFour} def
+ /CubeColorFaceSix {\psk@TroisD@CubeColorFaceSix} def
+ tx@3DDict begin
+ Cube
+ PointsDie
+ end
+ }% fin du code ps
+ \end@ClosedObj%
+}}
+%
+% Dodecahedron : 31 décembre 2003 ml
+\def\DodecahedronThreeD{\pst@object{DodecahedronThreeD}}
+\def\DodecahedronThreeD@i(#1,#2,#3){{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ /Condition {le } def
+ tx@3DDict begin
+ Dodecahedron
+ end
+ }% fin du code ps
+ \end@ClosedObj%
+}}
+%
+\def\SphereThreeD{\pst@object{SphereThreeD}}
+\def\SphereThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj%
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /condition { PSfacette 0 le } def
+ /departPhi -90 def
+ MaillageSphere
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+% % fin de la commande PSTricks
+%
+% 2décembre 2002
+%
+\def\SphereInverseThreeD{\pst@object{SphereInverseThreeD}}
+\def\SphereInverseThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /condition {PSfacette 0 ge} def
+ /departPhi -90 def
+ MaillageSphere
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+% % fin de la commande PSTricks
+% fin 2 décembre 2002
+%
+\def\SphereCercleThreeD{\pst@object{SphereCercleThreeD}}
+\def\SphereCercleThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ tx@3DDict begin
+ 0 2 360 {
+ /ThetaEquateur exch def
+ /Xpoint Rsphere ThetaEquateur cos mul PhiCercle cos mul def
+ /Ypoint Rsphere ThetaEquateur sin mul PhiCercle cos mul def
+ /Zpoint Rsphere PhiCercle sin mul def
+ CalculsPointsAfterTransformations
+% rayon de las sphère (normale)
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+% rayon vers point de vue
+ /RXvue Xabscisse XpointVue sub def
+ /RYvue Yordonnee YpointVue sub def
+ /RZvue Zcote ZpointVue sub def
+% test de visibilité
+ /PSPoint RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+ PSPoint 0 le {
+ newpath
+ CalcCoordinates
+ 0.5 0 360 arc
+ closepath
+ fill
+ } if
+%lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+%
+%
+\def\SphereMeridienThreeD{\pst@object{SphereMeridienThreeD}}
+\def\SphereMeridienThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj%
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ tx@3DDict begin
+ 0 2 360 {
+ /PhiCercle exch def
+ /Xpoint Rsphere ThetaMeridien cos mul PhiCercle cos mul def
+ /Ypoint Rsphere ThetaMeridien sin mul PhiCercle cos mul def
+ /Zpoint Rsphere PhiCercle sin mul def
+ CalculsPointsAfterTransformations
+% rayon de las sphère (normale)
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+% rayon vers point de vue
+ /RXvue Xabscisse XpointVue sub def
+ /RYvue Yordonnee YpointVue sub def
+ /RZvue Zcote ZpointVue sub def
+% test de visibilité
+ /PSPoint RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+ PSPoint 0 le{
+ newpath
+ CalcCoordinates
+ 0.5 0 360 arc
+ closepath
+ fill
+ } if
+ %lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+%
+\def\CylindreThreeD{\pst@object{CylindreThreeD}}
+\def\CylindreThreeD@i(#1,#2,#3)#4#5{{%
+% Le centre de la base sera placé avec
+% (#2,#3,#4) les paramètres CX,CY et CZ
+% #5 rayon
+% #6 hauteur
+% on peut ensuite faire tourner le cylindre
+% avec RotX, RotY et RotZ
+ \begin@ClosedObj
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rcylindre #4 def
+ /Hcylindre #5 def
+ /incrementANGLE 10 def
+ /incrementHAUTEUR Hcylindre 5 div def
+ tx@3DDict begin
+ CylinderThreeD
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+% hv 2003-12-18
+\def\LineThreeD{\pst@object{LineThreeD}}
+\def\LineThreeD@i(#1,#2,#3)(#4,#5,#6){{%
+% (#2,#3,#4) coordonnées du point1
+% (#5,#6,#7) coordonnées du point2
+ \begin@OpenObj
+ \pNodeThreeD(#1,#2,#3){tempNodeA}
+ \pNodeThreeD(#4,#5,#6){tempNodeB}
+ \psline(tempNodeA)(tempNodeB)
+ \end@OpenObj
+}\ignorespaces}
+%
+% hv 2003-12-17
+\def\pNodeThreeD{\pst@object{pNodeThreeD}}
+% point can be in cartesian (x,y,z) or sphere coordinates (r;phi;theta)
+\def\pNodeThreeD@i(#1)#2{{%
+ \begin@ClosedObj
+ \edef\@NodeNameThreeD{#2}
+ \pNodeThreeD@ii#1,@comma*\relax
+ \end@ClosedObj
+ }\ignorespaces%
+}
+\def\pNodeThreeD@ii#1,#2*{%
+ \def\@tempa{#2}\def\@tempb{@comma}%
+ \ifx\@tempa\@tempb%
+ \pNodeThreeD@iii#1;#2\else\pNodeThreeD@iv#1,#2\relax%
+ \fi%
+}
+\def\pNodeThreeD@iii#1;#2;#3;#4\relax{%
+ \pnode(!
+ \variablesTroisD
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /Zcote Radius latitude sin mul def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end){\@NodeNameThreeD}
+}
+\def\pNodeThreeD@iv#1,#2,#3,#4\relax{%
+ \pnode(!
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /Zcote Radius latitude sin mul def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ \else
+ /Zcote #3 def
+ /Xabscisse #1 def
+ /Yordonnee #2 def
+ \fi
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end){\@NodeNameThreeD}%
+}
+%
+
+\iffalse
+% hv 2005-12-04
+\def\pnodeThreeD{\pst@object{pnodeThreeD}}
+\def\pnodeThreeD@i(#1,#2,#3)#4{%
+ \pst@killglue
+ \begingroup
+ \use@par
+ \pnode(!
+ \psk@embedangle
+ \psk@viewpoint
+ \psk@viewangle
+ \tx@SetMatrixThreeD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ Radius longitude cos mul latitude cos mul % x
+ Radius longitude sin mul latitude cos mul % y
+ Radius latitude sin mul % z
+ \else
+ #1 #2 #3
+ \fi
+ \tx@ProjThreeD){#4}%
+ \endgroup}
+%
+\let\pNodeThreeD\pnodeThreeD
+\fi
+%
+\def\TetraedreThreeD{\pst@object{TetraedreThreeD}}
+\def\TetraedreThreeD@i(#1,#2,#3){{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ tx@3DDict begin
+ Tetraedre
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+%
+% pyramide
+%
+\def\FaceSAB{\pst@object{FaceSAB}}
+\def\FaceSAB@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSAB 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XA XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YA YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XB XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YB YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\FaceSBC{\pst@object{FaceSBC}}
+\def\FaceSBC@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSBC 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XB XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YB YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XC XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YC YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+%
+\def\FaceSCD{\pst@object{FaceSCD}}
+\def\FaceSCD@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSCD 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XC XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YC YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XD XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YD YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\FaceSDA{\pst@object{FaceSDA}}
+\def\FaceSDA@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSDA 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XD XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YD YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XA XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YA YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\FaceABCD{\pst@object{FaceABCD}}
+\def\FaceABCD@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSABCD 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+% hv 2003
+\def\FaceABCDTop{\pst@object{FaceABCDTop}}
+\def\FaceABCDTop@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSABCD 0 gt { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XD XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YD YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XS 1 fracHeight sub XA XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YA YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XB XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YB YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XC XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YC YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\PyramideThreeD{\@ifnextchar[{\PyramideThreeD@i}{\PyramideThreeD@i[]}}
+% (#2,#3,#4) the coordinates of the origin
+% #5 the height of the pyrimide
+\def\PyramideThreeD@i[#1](#2,#3,#4)#5{{%
+ \FaceSAB[fillcolor=\psk@TroisD@TetraedreColorFaceA,#1](#2,#3,#4){#5}%
+ \FaceSBC[fillcolor=\psk@TroisD@TetraedreColorFaceB,#1](#2,#3,#4){#5}%
+ \FaceSCD[fillcolor=\psk@TroisD@TetraedreColorFaceC,#1](#2,#3,#4){#5}%
+ \FaceSDA[fillcolor=\psk@TroisD@TetraedreColorFaceD,#1](#2,#3,#4){#5}%
+ \FaceABCD[fillcolor=\psk@TroisD@TetraedreColorFaceE,#1](#2,#3,#4){#5}%
+ \FaceABCDTop[fillcolor=\psk@TroisD@TetraedreColorFaceE,#1](#2,#3,#4){#5}%
+}\ignorespaces}
+%
+%
+\def\ConeThreeD{\pst@object{ConeThreeD}}
+\def\ConeThreeD@i(#1,#2,#3)#4#5{%
+% Le centre de la base sera placé avec
+% (#2,#3,#4) les paramètres CX,CY et CZ
+% #5 rayon
+% #6 hauteur
+% on peut ensuite faire tourner le cylindre
+% avec RotX, RotY et RotZ
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rcone #4 def
+ /Hcone #5 def
+ tx@3DDict begin
+ ConeThreeD
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj
+\ignorespaces}%
+%
+\def\CircleThreeD{\pst@object{CircleThreeD}}
+\def\CircleThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) les paramètres CX,CY et CZ
+% #5 rayon du cercle
+ \begin@ClosedObj
+ \addto@pscode{%
+ /Rcercle #4 def
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ tx@3DDict begin
+ reduction reduction scale
+ /TableauxPoints [
+ 0 1 360 {% on décrit le cercle
+ /Angle exch def [
+ /Xcercle Rcercle Angle cos mul def
+ /Ycercle Rcercle Angle sin mul def
+ /Xabscisse Xcercle S1 mul Ycercle S2 C1 mul mul add CX add def
+ /Yordonnee Xcercle C1 mul neg Ycercle S2 S1 mul mul add CY add def
+ /Zcote Ycercle C2 mul neg CZ add def
+ CalcCoordinates ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 360 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj
+}\ignorespaces}
+%
+%
+\def\FrameThreeD{\pst@object{FrameThreeD}}
+\def\FrameThreeD@i(#1,#2,#3)(#4,#5)(#6,#7){{%
+% (#2,#3,#4) the origin
+% (#5,#6) d'un sommet
+% (#7,#8) du sommet opposé
+% rectangle ABCD
+ \begin@ClosedObj
+ \addto@pscode{%
+ /XA #4 def
+ /YA #5 def
+ /XC #6 def
+ /YC #7 def
+% on en déduit les autres sommets
+ /XB XC def
+ /YB YA def
+ /XD XA def
+ /YD YC def
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ tx@3DDict begin
+ reduction reduction scale
+ newpath
+ /Xframe XA def
+ /Yframe YA def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ moveto
+ /Xframe XB def
+ /Yframe YB def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ /Xframe XC def
+ /Yframe YC def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ /Xframe XD def
+ /Yframe YD def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ /Xframe XA def
+ /Yframe YA def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+%
+\def\QuadrillageThreeD{\pst@object{QuadrillageThreeD}}
+\def\QuadrillageThreeD@i(#1,#2,#3)(#4,#5)(#6,#7){{%
+ \begin@OpenObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Xmin #4 def
+ /Xmax #6 def
+ /Ymin #5 def
+ /Ymax #7 def
+ /pas \psk@TroisD@pas\space def
+ /grille \psk@TroisD@grille\space def
+ tx@3DDict begin
+ reduction reduction scale
+ Ymin grille Ymax {% balayage suivant Oy
+ /Ygrille exch def
+ /TableauxPoints [
+ Xmin pas Xmax { % balayage suivant Ox
+ /Xgrille exch def
+ /Xabscisse Xgrille S1 mul Ygrille S2 C1 mul mul add CX add def
+ /Yordonnee Xgrille C1 mul neg Ygrille S2 S1 mul mul add CY add def
+ /Zcote Ygrille C2 mul neg CZ add def
+ formulesTroisD
+ [ Xi 28.45 mul Yi 28.45 mul ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 Xmax Xmin sub pas div {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+% stroke
+ } for
+%
+ Xmin grille Xmax {% balayage suivant Ox
+ /Xgrille exch def
+ /TableauxPoints [
+ Ymin pas Ymax { % balayage suivant Ox
+ /Ygrille exch def
+ /Xabscisse Xgrille S1 mul Ygrille S2 C1 mul mul add CX add def
+ /Yordonnee Xgrille C1 mul neg Ygrille S2 S1 mul mul add CY add def
+ /Zcote Ygrille C2 mul neg CZ add def
+ formulesTroisD
+ [ Xi 28.45 mul Yi 28.45 mul ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 Ymax Ymin sub pas div {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor
+ \@nameuse{psls@\pslinestyle}
+% stroke
+ } for
+% fin du tracé
+ end
+ }% fin du code ps
+ \end@OpenObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+\newif\ifPstThreeDplot@showInside
+\define@key[psset]{pst-vue3d}{showInside}[true]{\@nameuse{PstThreeDplot@showInside@#1}}
+\define@key[psset]{pst-vue3d}{SegmentColor}{\pst@getcolor{#1}\psk@ThreeDplot@SegmentColor}
+\define@key[psset]{pst-vue3d}{increment}{\pst@getint{#1}\psk@ThreeDplot@increment}
+\psset[pst-vue3d]{showInside,SegmentColor={[cmyk]{0.2,0.6,1,0}},increment=10}
+%
+\def\ParaboloidThreeD{\pst@object{ParaboloidThreeD}}
+\def\ParaboloidThreeD@i#1#2{%
+\begin@SpecialObj%
+\addto@pscode{%
+ \psk@embedangle
+ \psk@viewpoint
+ \psk@viewangle
+ \tx@SetMatrixThreeD
+% Vecteur ViewPoint
+ \psk@viewpoint
+ /vZ ED
+ /vY ED
+ /vX ED
+ /increment \psk@ThreeDplot@increment\space def
+ /height #1 def
+ /radius #2 #1 sqrt div def
+ /cmyk {} def
+ 1 setlinejoin
+ % les rayons de lumière
+ /xLight 1 def
+ /yLight 0.1 def
+ /zLight 0.2 def
+ % précision du tracé
+ /pas 0.5 def
+ /pas10 {pas 10 div} bind def
+%
+ /NormeLight {xLight dup mul yLight dup mul zLight dup mul add add sqrt} bind def
+% l'ellipse du plan de coupe : le contour
+ /calculate2DPoint { % four values on stack; x2D y2D are returned
+ /V0 ED /Z0 ED /U20 ED /U10 ED
+ U10 cos V0 mul radius mul \pst@number\psunit mul
+ U20 sin V0 mul radius mul \pst@number\psunit mul
+ Z0 \pst@number\psunit mul \tx@ProjThreeD
+ } def
+ /PlanCoupe {
+ /Z height store
+ /V {Z sqrt} bind def
+ /TableauxPoints [
+ 0 1 359 {
+ /U exch def [ U U Z V caclculate2DPoint ] % on décrit le cercle
+ } for
+ ] def
+ newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+ closepath
+ } def
+%
+ /facette {
+ newpath
+ U U Z V calculate2DPoint moveto
+ U 1 U increment add {%
+ /U1 exch def
+ U1 U1 Z V calculate2DPoint lineto
+ } for
+ Z pas10 Z pas add pas10 add{
+ /Z1 exch def
+ /V {Z1 sqrt} bind def
+ U1 U1 Z1 V calculate2DPoint lineto
+ } for
+ U increment add -1 U {%
+ /U2 exch def
+ U2 U2 Z pas add V calculate2DPoint lineto
+ } for
+ Z pas add pas10 sub pas10 neg Z pas10 sub{
+ /Z2 exch def
+ /V {Z2 abs sqrt} bind def
+ U U Z2 V calculate2DPoint lineto
+ } for
+ closepath
+ } def % facette
+%
+ /MaillageParaboloid {
+ 0 pas height pas sub{%
+ /Z ED
+ /V {Z sqrt} bind def
+ 0 increment 360 increment sub {%
+ /U exch def
+% Centre de la facette
+ /Ucentre {U increment 2 div add} bind def
+ /Vcentre {Z pas 2 div add sqrt} bind def
+% normale à la facette
+ /nXfacette {2 Vcentre dup mul mul Ucentre cos mul radius mul} bind def
+ /nYfacette {2 Vcentre dup mul mul Ucentre sin mul radius mul} bind def
+ /nZfacette {Vcentre neg radius dup mul mul} bind def
+ /NormeN {
+ nXfacette dup mul
+ nYfacette dup mul
+ nZfacette dup mul
+ add add sqrt} bind def
+ NormeN 0 eq {/NormeN 1e-10 def} if
+% test de visibilité
+ /PSfacette vX nXfacette mul
+ vY nYfacette mul add
+ vZ nZfacette mul add def
+ condition {
+ facette
+ /cosV {1 xLight nXfacette mul
+ yLight nYfacette mul
+ zLight nZfacette mul
+ add add
+ NormeLight
+ NormeN mul div sub} bind def
+ \psk@ThreeDplot@SegmentColor\space
+ cosV mul 4 1 roll cosV mul 4 1 roll cosV dup mul mul 4 1 roll cosV dup mul mul 4 1 roll
+ setcmykcolor fill
+ 0 setgray
+ facette
+ stroke
+ } if
+ } for
+ } for
+ } def
+ /conditionGE {PSfacette 0 ge} def
+ /conditionLE {PSfacette 0 le} def
+ \ifPstThreeDplot@showInside
+ /condition {conditionGE} def
+ MaillageParaboloid
+ vZ 0 ge {%
+ PlanCoupe 1 0.5 0.5 setrgbcolor fill
+ PlanCoupe 0 setgray stroke} if
+ \else
+ /condition {conditionLE} def
+ MaillageParaboloid
+ /condition {conditionGE} def
+ MaillageParaboloid%
+ \fi
+}
+% fin du code ps
+\showpointsfalse
+\end@SpecialObj}
+%
+%
+% 11 novembre
+\def\DemiSphereThreeD{\pst@object{DemiSphereThreeD}}
+\def\DemiSphereThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordinates of the center
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /condition { PSfacette 0 le } def
+ /departPhi 0 def
+ MaillageSphere
+% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% correction 16 novembre 2002
+% /Xpoint CxFaceInf def
+% /Ypoint CyFaceInf def
+% /Zpoint CzFaceInf def
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint 0 def
+% fin correction 16/11/2002
+ CalculsPointsAfterTransformations
+ /CxBaseInf Xabscisse def
+ /CyBaseInf Yordonnee def
+ /CzBaseInf Zcote def
+ /RXvueInf CxBaseInf XpointVue sub def
+ /RYvueInf CyBaseInf YpointVue sub def
+ /RZvueInf CzBaseInf ZpointVue sub def
+% Sommet de la sphère
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Rsphere def
+ CalculsPointsAfterTransformations
+ /XsommetSphere Xabscisse def
+ /YsommetSphere Yordonnee def
+ /ZsommetSphere Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetSphere sub def
+ /nYBaseInf CyFaceInf YsommetSphere sub def
+ /nZBaseInf CzFaceInf ZsommetSphere sub def
+% Visibilité de la base inférieure
+ /PSbaseSphere nXBaseInf RXvueInf mul
+ nYBaseInf RYvueInf mul add
+ nZBaseInf RZvueInf mul add def
+ PSbaseSphere 0 le {
+ /TableauxPoints [
+ 0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rsphere theta cos mul def
+ /Ypoint Rsphere theta sin mul def
+ /Zpoint 0 def
+ CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+ gsave
+ newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ 0.7 setgray
+ closepath
+ fill
+ grestore
+ } if
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+%
+\def\SphereCreuseThreeD{\pst@object{SphereCreuseThreeD}}
+\def\SphereCreuseThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordinates of the center
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /SphereInside {
+ /condition {PSfacette 0 ge} def
+ /departPhi 0 def
+ MaillageSphere
+ } def
+%% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+ /Xpoint CxFaceInf def
+ /Ypoint CyFaceInf def
+ /Zpoint CzFaceInf def
+ CalculsPointsAfterTransformations
+ /CxBaseInf Xabscisse def
+ /CyBaseInf Yordonnee def
+ /CzBaseInf Zcote def
+ /RXvueInf CxBaseInf XpointVue sub def
+ /RYvueInf CyBaseInf YpointVue sub def
+ /RZvueInf CzBaseInf ZpointVue sub def
+% Sommet de la sphère
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Rsphere def
+ CalculsPointsAfterTransformations
+ /XsommetSphere Xabscisse def
+ /YsommetSphere Yordonnee def
+ /ZsommetSphere Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetSphere sub def
+ /nYBaseInf CyFaceInf YsommetSphere sub def
+ /nZBaseInf CzFaceInf ZsommetSphere sub def
+% Visibilité de la base inférieure
+ /PSbaseSphere nXBaseInf RXvueInf mul nYBaseInf RYvueInf mul add
+ nZBaseInf RZvueInf mul add def
+ /base {
+ /TableauxPoints [
+ 0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rsphere theta cos mul def
+ /Ypoint Rsphere theta sin mul def
+ /Zpoint 0 def
+ CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+% gsave
+ newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+ 0.7 setgray
+ closepath
+% stroke
+%grestore
+ } def
+ PSbaseSphere 0 le {
+ base
+ clip
+ SphereInside
+ }{ 0 0 0.01 0 360 arc } ifelse
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+% 30 novembre 2002
+% révisé le 30 octobre 2003
+\def\PortionSphereThreeD{\pst@object{PortionSphereThreeD}}
+\def\PortionSphereThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordinates of the center
+% #5 rayon
+ \begin@ClosedObj%
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 1 def
+% /increment 2.5 def
+ tx@3DDict begin
+ PortionSphere
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}% % fin de la commande PSTricks
+%
+\catcode`\@=\PstAtCode\relax
+%
+%% END: pst-vue3D.tex
+\endinput
+