summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/dvips
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-08-02 23:12:56 +0000
committerKarl Berry <karl@freefriends.org>2008-08-02 23:12:56 +0000
commit0e6b09416ade3c53b6f6d8d772b4bd180f6cf5b0 (patch)
tree032fcab01b77e9ef174e51a209a5dc717d8932d1 /Master/texmf-dist/dvips
parente64ffb6f004c76b6552fa48978e1ab5a97cdf4db (diff)
rm pst-solide3d, now solides
git-svn-id: svn://tug.org/texlive/trunk@10018 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/dvips')
-rw-r--r--Master/texmf-dist/dvips/pst-solide3d/solides.pro5797
1 files changed, 0 insertions, 5797 deletions
diff --git a/Master/texmf-dist/dvips/pst-solide3d/solides.pro b/Master/texmf-dist/dvips/pst-solide3d/solides.pro
deleted file mode 100644
index e0e28e19792..00000000000
--- a/Master/texmf-dist/dvips/pst-solide3d/solides.pro
+++ /dev/null
@@ -1,5797 +0,0 @@
-%!
-% PostScript prologue for pst-solides3d.tex.
-% Version 3.02, 2008/01/17
-%
-%% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque
-%%
-%% 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.
-%
-/SolidesDict 100 dict def
-/SolidesbisDict 100 dict def
-SolidesDict begin
-
-%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %% les variables globales gerees par PSTricks %%
-%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %% les lignes dessous sont a decommenter si l on veut utiliser le
-%% %% fichier solides.pro independamment du package PSTricks
-%% /Dobs 20 def
-%% /THETA 20 def
-%% /PHI 50 def
-%% /Decran 30 def
-%% /XpointVue {Dobs Cos1Cos2 mul} def
-%% /YpointVue {Dobs Sin1Cos2 mul} def
-%% /ZpointVue {Dobs Sin2 mul} def
-%% /xunit 28.14 def
-%% /solidhollow false def
-%% /solidbiface false def
-%% /xunit 28.45 def
-%% /tracelignedeniveau? true def
-%% /hauteurlignedeniveau 1 def
-%% /couleurlignedeniveau {rouge} def
-%% /linewidthlignedeniveau 4 def
-%% /solidgrid true def
-/aretescachees true def
-/defaultsolidmode 2 def
-/activationgestioncouleurs true def
-
-
-/fillstyle {} def
-/startest false def
-/cm {} def
-/cm_1 {} def
-/yunit {xunit} def
-/angle_repere 90 def
-
-/hadjust 2.5 def
-/vadjust 2.5 def
-
-/pointilles {
- [6.25 3.75] 1.25 setdash
-} def
-/stockcurrentcpath {} def
-/newarrowpath {} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% choix d une fonte accentuee pour le .ps %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-/ReEncode { exch findfont
-dup length dict begin { 1 index /FID eq {pop pop} {def} ifelse
-}forall /Encoding ISOLatin1Encoding def currentdict end definefont
-pop }bind def
-/Font /Times-Roman /ISOfont ReEncode /ISOfont def
-%Font findfont 10 scalefont setfont
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% extrait de color.pro pour pouvoir recuperer ses couleurs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-/GreenYellow{0.15 0 0.69 0 setcmykcolor}def
-/Yellow{0 0 1 0 setcmykcolor}def
-/Goldenrod{0 0.10 0.84 0 setcmykcolor}def
-/Dandelion{0 0.29 0.84 0 setcmykcolor}def
-/Apricot{0 0.32 0.52 0 setcmykcolor}def
-/Peach{0 0.50 0.70 0 setcmykcolor}def
-/Melon{0 0.46 0.50 0 setcmykcolor}def
-/YellowOrange{0 0.42 1 0 setcmykcolor}def
-/Orange{0 0.61 0.87 0 setcmykcolor}def
-/BurntOrange{0 0.51 1 0 setcmykcolor}def
-/Bittersweet{0 0.75 1 0.24 setcmykcolor}def
-/RedOrange{0 0.77 0.87 0 setcmykcolor}def
-/Mahogany{0 0.85 0.87 0.35 setcmykcolor}def
-/Maroon{0 0.87 0.68 0.32 setcmykcolor}def
-/BrickRed{0 0.89 0.94 0.28 setcmykcolor}def
-/Red{0 1 1 0 setcmykcolor}def
-/OrangeRed{0 1 0.50 0 setcmykcolor}def
-/RubineRed{0 1 0.13 0 setcmykcolor}def
-/WildStrawberry{0 0.96 0.39 0 setcmykcolor}def
-/Salmon{0 0.53 0.38 0 setcmykcolor}def
-/CarnationPink{0 0.63 0 0 setcmykcolor}def
-/Magenta{0 1 0 0 setcmykcolor}def
-/VioletRed{0 0.81 0 0 setcmykcolor}def
-/Rhodamine{0 0.82 0 0 setcmykcolor}def
-/Mulberry{0.34 0.90 0 0.02 setcmykcolor}def
-/RedViolet{0.07 0.90 0 0.34 setcmykcolor}def
-/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}def
-/Lavender{0 0.48 0 0 setcmykcolor}def
-/Thistle{0.12 0.59 0 0 setcmykcolor}def
-/Orchid{0.32 0.64 0 0 setcmykcolor}def
-/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}def
-/Purple{0.45 0.86 0 0 setcmykcolor}def
-/Plum{0.50 1 0 0 setcmykcolor}def
-/Violet{0.79 0.88 0 0 setcmykcolor}def
-/RoyalPurple{0.75 0.90 0 0 setcmykcolor}def
-/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}def
-/Periwinkle{0.57 0.55 0 0 setcmykcolor}def
-/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}def
-/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}def
-/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}def
-/NavyBlue{0.94 0.54 0 0 setcmykcolor}def
-/RoyalBlue{1 0.50 0 0 setcmykcolor}def
-/Blue{1 1 0 0 setcmykcolor}def
-/Cerulean{0.94 0.11 0 0 setcmykcolor}def
-/Cyan{1 0 0 0 setcmykcolor}def
-/ProcessBlue{0.96 0 0 0 setcmykcolor}def
-/SkyBlue{0.62 0 0.12 0 setcmykcolor}def
-/Turquoise{0.85 0 0.20 0 setcmykcolor}def
-/TealBlue{0.86 0 0.34 0.02 setcmykcolor}def
-/Aquamarine{0.82 0 0.30 0 setcmykcolor}def
-/BlueGreen{0.85 0 0.33 0 setcmykcolor}def
-/Emerald{1 0 0.50 0 setcmykcolor}def
-/JungleGreen{0.99 0 0.52 0 setcmykcolor}def
-/SeaGreen{0.69 0 0.50 0 setcmykcolor}def
-/Green{1 0 1 0 setcmykcolor}def
-/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}def
-/PineGreen{0.92 0 0.59 0.25 setcmykcolor}def
-/LimeGreen{0.50 0 1 0 setcmykcolor}def
-/YellowGreen{0.44 0 0.74 0 setcmykcolor}def
-/SpringGreen{0.26 0 0.76 0 setcmykcolor}def
-/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}def
-/RawSienna{0 0.72 1 0.45 setcmykcolor}def
-/Sepia{0 0.83 1 0.70 setcmykcolor}def
-/Brown{0 0.81 1 0.60 setcmykcolor}def
-/Tan{0.14 0.42 0.56 0 setcmykcolor}def
-/Gray{0 0 0 0.50 setcmykcolor}def
-/Black{0 0 0 1 setcmykcolor}def
-/White{0 0 0 0 setcmykcolor}def
-%% fin de l extrait color.pro
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% autres couleurs %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-/bleu {0 0 1 setrgbcolor} def
-/rouge {1 0 0 setrgbcolor} def
-/vert {0 .5 0 setrgbcolor} def
-/gris {.4 .4 .4 setrgbcolor} def
-/jaune {1 1 0 setrgbcolor} def
-/noir {0 0 0 setrgbcolor} def
-/blanc {1 1 1 setrgbcolor} def
-/orange {1 .65 0 setrgbcolor} def
-/rose {1 .01 .58 setrgbcolor} def
-/cyan {1 0 0 0 setcmykcolor} def
-/magenta {0 1 0 0 setcmykcolor} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% definition du point de vue %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% pour la 3D conventionnelle
-%% Dony : graphisme scientifique : page 187
-%% Editeur : Masson
-
-%% calcul des coefficients de la matrice
-%% de transformation
-/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
-
-/3dto2d {
-6 dict begin
- /Zcote exch def
- /Yordonnee exch def
- /Xabscisse exch def
- /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
- %% maintenant on depose les resultats sur la pile
- Decran xObservateur mul zObservateur div cm
- Decran yObservateur mul zObservateur div cm
-end
-} def
-
-/getpointVue {
- XpointVue
- YpointVue
- ZpointVue
-} def
-
-/GetCamPos {
- getpointVue
-} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% jps modifie pour PSTricks %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-/solid {continu} def
-/dashed {pointilles} def
-
-%%% les 3 procedures utilisees pour transformer les depots de AlgToPs en nombres
-/pstrickactionR3 {
-3 dict begin
- /len@3 exch def
- /len@2 exch def
- /len@1 exch def
- len@1 exec
- len@2 exec
- len@3 exec
-end
-} def
-
-/pstrickactionR2 {
- exec exch exec exch
-} def
-
-/pstrickactionR {
- exec
-} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% geometrie basique %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% syntaxe~: [x1 y1 ... xn yn] ligne
-/ligne {
-gsave
- newpath
- dup 0 getp smoveto
- ligne_
- starfill
- stroke
-grestore
-} def
-
-%% syntaxe~: [x1 y1 ... xn yn] ligne_
-/ligne_ {
- reversep
- aload length 2 idiv
- {
- slineto
- } repeat
-} def
-
-%% syntaxe~: [x1 y1 ... xn yn] polygone
-/polygone* {
-1 dict begin
- /startest {true} def
- polygone
-end
-} def
-
-/polygone {
- gsave
- newpath
- aload length 2 idiv
- 3 copy pop
- smoveto
- {
- slineto
- } repeat
- closepath
- starfill
- currentlinewidth 0 eq {} {stroke} ifelse
- grestore
-} def
-
-%% syntaxe : x y point
-/point {
-gsave
- 1 setlinecap
- newpath
- smoveto
- 0 0 rlineto
- 5 setlinewidth
- stroke
-grestore
-} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% %%%%
-%%%% insertion librairie jps %%%%
-%%%% %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% le repere jps %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### AAAscale ###
-%%%%%%%%%%%%%%%% les deplacements a l echelle %%%%%%%%%%%%%%%%%%%
-
- /v@ct_I {xunit 0} def
- /v@ct_J {angle_repere cos yunit mul angle_repere sin yunit mul} def
-
-/xscale {} def
-/yscale {} def
-
-/xscale-1 {} def
-/yscale-1 {} def
-
-/gtransform {} def
-/gtransform-1 {} def
-
-/jtoppoint {
-2 dict begin
- gtransform
- /y exch yscale def
- /x exch xscale def
- v@ct_I x mulv
- v@ct_J y mulv
- addv
-end
-} def
-
-/rptojpoint {
- xtranslate ytranslate
- 3 1 roll %% xA yB yA xB
- 4 1 roll %% xB xA yB yA
- sub neg 3 1 roll %% yB-yA xB xA
- sub neg exch
- ptojpoint
-} def
-
-/rptoppoint {
- xtranslate ytranslate
- 3 1 roll %% xA yB yA xB
- 4 1 roll %% xB xA yB yA
- sub neg 3 1 roll %% yB-yA xB xA
- sub neg exch
-} def
-
-/ptojpoint {
-4 dict begin
- /Y exch yscale-1 def
- /X exch xscale-1 def
- /y Y yunit angle_repere sin mul div def
- /x X y yunit mul angle_repere cos mul sub xunit div def
- x y
- gtransform-1
-end
-} def
-
-/smoveto {
- jtoppoint
- moveto
-} def
-
-/srmoveto {
- jtoppoint
- rmoveto
-} def
-
-/slineto {
- jtoppoint
- lineto
-} def
-
-/srlineto {
- jtoppoint
- rlineto
-} def
-
-/stranslate {
- jtoppoint
- translate
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% les tests %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### isbool ###
-%% syntaxe : any isbool --> booleen
-/isbool {
- type (booleantype) cvn eq
-} def
-
-%%%%% ### isarray ###
-%% syntaxe : any isarray --> booleen
-/isarray {
- type (arraytype) cvn eq
-} def
-
-%%%%% ### isstring ###
-%% syntaxe : any isstring --> booleen
-/isstring {
- type (stringtype) cvn eq
-} def
-
-%%%%% ### isinteger ###
-%% syntaxe : any isinteger --> booleen
-/isinteger {
- type (integertype) cvn eq
-} def
-
-%%%%% ### isnum ###
-%% syntaxe : any isnum --> booleen
-/isnum {
- dup isreal
- exch isinteger or
-} def
-
-%%%%% ### isreal ###
-%% syntaxe : any isreal --> booleen
-/isreal {
- type (realtype) cvn eq
-} def
-
-%%%%% ### eq ###
-%% syntaxe : A B eqp3d --> booleen = true si les points A et B sont identiques
-/eqp3d {
- %% x1 y1 z1 x2 y2 z2
- 4 -1 roll %% x1 y1 x2 y2 z2 z1
- eq { %% x1 y1 x2 y2
- eqp
- } {
- pop pop pop pop false
- } ifelse
-} def
-
-%% syntaxe : A B eqp --> booleen = true si les points A et B sont identiques
-/eqp {
- 3 -1 roll
- eq
- {
- eq
- {true}
- {false}
- ifelse
- }
- {pop pop false}
- ifelse
-} def
-
-%% syntaxe : z z' eqc --> true si z = z', false sinon
-/eqc {
- eqp
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% conversions de types %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### astr2str ###
-%% syntaxe : array str astr2str --> str
-%% convertit le contenu de array en chaines de caracteres puis les
-%% concatene avec str, en inserant un caractere "space" apres chaque
-%% element du tableau array
-/astr2str {
-5 dict begin
- /str exch def
- /table exch def
- /n table length def
- n 0 eq {
- str
- } {
- table 0 n 1 sub getinterval
- table n 1 sub get ( ) cvs
- ( ) append
- str append
- astr2str
- } ifelse
-end
-} def
-
-%%%%% ### numstr2array ###
-%% syntaxe : str numstr2array -> array
-%% ou str est une chaine de nombres entiers separes par des espaces
-%% et array est constitue des elements numeriques entiers de string.
-%% exemple :
-%% (0 12 4 54) --> [0 12 4 54]
-/numstr2array {
-3 dict begin
- /str exch def
- /n str length def
- /j -1 def
- [
- 0 1 n 1 sub {
- /i exch def
- /j j 1 add store
- str i get
- dup 32 eq {
- %% c est un espace
- /j -1 store
- pop
- } {
- j 1 ge {
- exch 10 mul 48 sub add
- } {
- 48 sub
- } ifelse
- } ifelse
- } for
- ]
-end
-} def
-
-%% syntaxe : array numstr2array -> array
-/arraynumstr2arrayarray {
- {numstr2array} apply
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% macros de projection %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### projtext ###
- /initpr@jtext {
-5 dict begin
- dup isbool {
- /mybool exch def
- } {
- /mybool true def
- } ifelse
- dup isarray {
- %% c est un planprojpath
- /type_plan_proj true def
- /table exch def
- /z0 exch def
- /y0 exch def
- /x0 exch def
- 0 0
- } {
- %% c est un solidprojpath
- /type_plan_proj false def
- %% y a-t-il un str2
- dup isstring {
- /str2 exch def
- } {
- /str2 {} def
- } ifelse
- %% y a-t-il un alpha
- 2 copy pop issolid {
- /alpha 0 def
- } {
- /alpha exch def
- } ifelse
- /i exch def
- /solid exch def
- 0 0
- } ifelse
-} def
- /closepr@jtext {
- type_plan_proj {
- x0 y0 z0 table mybool projpath
- } {
- solid i alpha str2 mybool projpath
- } ifelse
- fill
- stroke
-end
-} def
-
-%% syntaxe : str x0 y0 z0 [normal_vect] ultextp3d --> -
-%% syntaxe : str x0 y0 z0 [normal_vect] bool ultextp3d --> -
-%% syntaxe : str1 solid i str2 ultextp3d --> -
-%% syntaxe : str1 solid i str2 bool ultextp3d --> -
-%% syntaxe : str1 solid i alpha str2 bool ultextp3d --> -
-/ultextp3d {initpr@jtext ultext_ closepr@jtext} def
-/cltextp3d {initpr@jtext cltext_ closepr@jtext} def
-/bltextp3d {initpr@jtext bltext_ closepr@jtext} def
-/dltextp3d {initpr@jtext bltext_ closepr@jtext} def
-/ubtextp3d {initpr@jtext ubtext_ closepr@jtext} def
-/cbtextp3d {initpr@jtext cbtext_ closepr@jtext} def
-/bbtextp3d {initpr@jtext bbtext_ closepr@jtext} def
-/dbtextp3d {initpr@jtext bbtext_ closepr@jtext} def
-/uctextp3d {initpr@jtext uctext_ closepr@jtext} def
-/cctextp3d {initpr@jtext cctext_ closepr@jtext} def
-/bctextp3d {initpr@jtext bctext_ closepr@jtext} def
-/dctextp3d {initpr@jtext bctext_ closepr@jtext} def
-/urtextp3d {initpr@jtext urtext_ closepr@jtext} def
-/crtextp3d {initpr@jtext crtext_ closepr@jtext} def
-/brtextp3d {initpr@jtext brtext_ closepr@jtext} def
-/drtextp3d {initpr@jtext brtext_ closepr@jtext} def
-
-%%%%% ### currentppathtransform ###
-%% syntaxe : {f} currentppathtransform --> applique la transformation f
-%% au chemin courant
-/currentppathtransform {
-6 dict begin
- /warp exch def
- %% pour remplacer 'move'
- /warpmove{
- 2 index {
- newpath
- } if
- warp moveto
- pop false
- } def
-
- %% pour remplacer 'lineto'
- /warpline {
- warp lineto
- } bind def
-
- %% pour remplacer 'curveto'
- /warpcurve {
- 6 2 roll warp
- 6 2 roll warp
- 6 2 roll warp
- curveto
- } bind def
-
- true
- { warpmove } { warpline } { warpcurve } { closepath } pathforall
- pop
-end
-} def
-
-%% syntaxe : {f} currentpathtransform --> applique la transformation f
-%% au chemin courant
-/currentpathtransform {
-7 dict begin
- /transform exch def
- /warp {ptojpoint transform} def
- %% pour remplacer 'move'
- /warpmove{
- 2 index {
- newpath
- } if
- warp smoveto
- pop false
- } def
-
- %% pour remplacer 'lineto'
- /warpline {
- warp slineto
- } bind def
-
- %% pour remplacer 'curveto'
- /warpcurve {
- 6 2 roll warp
- 6 2 roll warp
- 6 2 roll warp
- scurveto
- } bind def
-
- true
- { warpmove } { warpline } { warpcurve } { closepath } pathforall
- pop
-end
-} def
-
-%%%%% ### normalvect_to_orthobase ###
-%% syntaxe : [normal_vect] normalvect_to_orthobase
-%% --> imI imJ imK
-/normalvect_to_orthobase {
-4 dict begin
- dup length 3 eq {
- aload pop normalize3d /normal_vect defpoint3d
- normal_vect -1 0 0 eqp3d {
- /imageI {0 -1 0} def
- /imageK {-1 0 0} def
- /imageJ {0 0 1} def
- } {
- %% on calcule l image de la base (I,J,K)
- /imageJ {normal_vect 1 0 0 vectprod3d normalize3d} def
- /imageK {normal_vect} def
- /imageI {imageJ imageK vectprod3d} def
- 1 0 0 imageK angle3d 0 eq {
- 0 1 0 normal_vect vectprod3d /imageI defpoint3d
- /imageJ {0 1 0} def
- normal_vect /imageK defpoint3d
- } if
- } ifelse
- } {
- dup length 6 eq {
- aload pop
- normalize3d /imageK defpoint3d
- normalize3d /imageI defpoint3d
- imageK imageI vectprod3d /imageJ defpoint3d
- } {
- dup length 7 eq {
- aload pop
- /alpha exch 2 div def
- normalize3d /imageK defpoint3d
- normalize3d /imageI defpoint3d
- imageK imageI vectprod3d /imageJ defpoint3d
- %% et ensuite, on fait tourner la base autour de imageK
- imageI alpha cos mulv3d
- imageJ alpha sin mulv3d
- addv3d
-
- imageI alpha sin neg mulv3d
- imageJ alpha cos mulv3d
- addv3d
-
- /imageJ defpoint3d
- /imageI defpoint3d
- } {
- %% length = 4
- aload pop
- /alpha exch def
- normalize3d /normal_vect defpoint3d
-
- normal_vect -1 0 0 eqp3d {
- /imageI {0 -1 0} def
- /imageK {-1 0 0} def
- /imageJ {0 0 1} def
- } {
- %% on calcule l image de la base (I,J,K)
- /imageJ {normal_vect 1 0 0 vectprod3d normalize3d} def
- /imageK {normal_vect} def
- /imageI {imageJ imageK vectprod3d} def
- 1 0 0 imageK angle3d 0 eq {
- 0 1 0 normal_vect vectprod3d /imageI defpoint3d
- /imageJ {0 1 0} def
- normal_vect /imageK defpoint3d
- } if
- } ifelse
- } ifelse
-
- %% et ensuite, on fait tourner la base autour de imageK
- imageI alpha cos mulv3d
- imageJ alpha sin mulv3d
- addv3d
-
- imageI alpha sin neg mulv3d
- imageJ alpha cos mulv3d
- addv3d
-
- /imageJ defpoint3d
- /imageI defpoint3d
- } ifelse
- } ifelse
- imageI
- imageJ
- imageK
-end
-} def
-
-%%%%% ### projpath ###
-%% syntaxe : x y z [normal] projpath --> planprojpath
-%% syntaxe : x y z [normal] bool projpath --> planprojpath
-%% syntaxe : solid i projpath --> solidprojpath
-%% syntaxe : solid i bool projpath --> solidprojpath
-%% syntaxe : solid i str bool projpath --> solidprojpath
-%% syntaxe : solid i alpha str bool projpath --> solidprojpath
-/projpath {
-2 dict begin
- dup isbool {
- /mybool exch def
- } {
- /mybool true def
- } ifelse
- dup isarray {
- mybool planprojpath
- } {
- mybool solidprojpath
- } ifelse
-end
-} def
-
-%% syntaxe : solid i str bool solidprojpath --> -
-%% ou
-%% syntaxe : solid i alpha str bool solidprojpath --> -
-%% projette le chemin courant sur la face i du solide, apres
-%% eventuellement une rotation d angle alpha autour de la normale
-%% bool : pour savoir si on tient compte de la visibilite
-/solidprojpath {
-5 dict begin
- /visibility exch def
- dup isstring {
- /option exch def
- } if
- 2 copy pop
- issolid {
- /alpha 0 def
- } {
- /alpha exch def
- } ifelse
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidprojpath) ==
- } if
- /n solid solidnombrefaces def
- i n 1 sub le {
- visibility not solid i solidfacevisible? or {
- currentdict /option known {
- option cvx exec
- } {
- solid i solidcentreface
- } ifelse
- [
- solid 0 i solidgetsommetface
- solid 1 i solidgetsommetface
- vecteur3d normalize3d
- solid i solidnormaleface alpha
- ] false planprojpath
- } {
- newpath 0 0 smoveto
- } ifelse
- } {
- (Error : indice trop grand dans solidprojpath) ==
- quit
- } ifelse
-end
-} def
-
-%% syntaxe : x y z [normal] bool planprojpath
-/planprojpath {
-6 dict begin
- /visibility exch def
- %% on calcule l image de la base (I,J,K)
- normalvect_to_orthobase
- /imageK defpoint3d
- /imageJ defpoint3d
- /imageI defpoint3d
- /z exch def
- /y exch def
- /x exch def
-
- visibility not x y z imageK planvisible? or {
- {ptojpoint 0
- imageI
- imageJ
- imageK
- transformpoint3d
- x y z addv3d
- 3dto2d jtoppoint} currentppathtransform
- } {
- newpath
- } ifelse
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% fonctions numeriques %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### courbeparam ###
-/setresolution {
- /resolution exch def
-} def
-/resolution 200 def
-
-/courbe_dic 2 dict def
-courbe_dic /X {} put
-courbe_dic /Y {} put
-
-%% syntaxe : tmin tmax C@urbeparam_
- /C@urbeparam_ {
-6 dict begin
- /tmax@ exch def
- /tmin@ exch def
- /t tmin@ def
- /dt tmax@ tmin@ sub resolution 1 sub div def
- tmin@ courbe_dic /X get exec
- pstrickactionR
- tmin@ courbe_dic /Y get exec
- pstrickactionR
- smoveto
- resolution 1 sub
- {
- t courbe_dic /X get exec
- pstrickactionR
- t courbe_dic /Y get exec
- pstrickactionR
- slineto
-
- /t t dt add store %% on incremente
- }
- repeat
- tmax@ courbe_dic /X get exec
- pstrickactionR
- tmax@ courbe_dic /Y get exec
- pstrickactionR
- slineto
-end
-} def
-
-%% syntaxe : tmin tmax {X} {Y} Courbeparam_
-/Courbeparam_ {
- courbe_dic exch /Y exch put
- courbe_dic exch /X exch put
- C@urbeparam_
-} def
-
-%% syntaxe : {X} {Y} courbeparam_
-/courbeparam_ {
- tmin tmax
- 4 -1 roll
- 4 -1 roll
- Courbeparam_
-} def
-
-%% syntaxe : tmin tmax {X} {Y} Courbeparam
-/Courbeparam {
-gsave
-6 dict begin
- dup isstring
- {
- /option exch def
- }
- if
- courbe_dic exch /Y exch put
- courbe_dic exch /X exch put
- /tmax exch def
- /tmin exch def
-
- newpath
- tmin courbe_dic /X get exec
- pstrickactionR
- tmin courbe_dic /Y get exec
- pstrickactionR
- smoveto %% on commence le chemin
- tmin tmax C@urbeparam_
- starfill
-
- stockcurrentcpath
- newarrowpath
- currentdict /option known
- {
- /dt tmax tmin sub resolution 1 sub div def
- tmin dt add courbe_dic /X get exec
- tmin dt add courbe_dic /Y get exec
- tmin courbe_dic /X get exec
- tmin courbe_dic /Y get exec
- arrowpath0
- tmax dt sub courbe_dic /X get exec
- tmax dt sub courbe_dic /Y get exec
- tmax courbe_dic /X get exec
- tmax courbe_dic /Y get exec
- currentdict /dt undef
- arrowpath1
- option
- gere_arrowhead
- }
- if
-
- currentlinewidth 0 eq {} {stroke} ifelse
-
-end
-grestore
-} def
-
-%% syntaxe : {X} {Y} courbeparam
-/courbeparam {
- dup isstring
- {
- tmin tmax
- 5 -1 roll
- 5 -1 roll
- 5 -1 roll
- }
- {
- tmin tmax
- 4 -1 roll
- 4 -1 roll
- }
- ifelse
- Courbeparam
-} def
-
-%% syntaxe : tmin tmax {X} {Y} Courbeparam*
-/Courbeparam* {
-1 dict begin
- /startest {true} def
- Courbeparam
-end
-} def
-
-%% syntaxe : {X} {Y} courbeparam*
-/courbeparam* {
-1 dict begin
- /startest {true} def
- courbeparam
-end
-} def
-
-%%%%% ### courbe ###
-%% syntaxe : {f} courbe
-/courbe {
- dup isstring %% y a-t-il une option de fin de ligne ?
- {
- xmin xmax
- {}
- 5 -1 roll
- 5 -1 roll
- }
- {
- xmin xmax
- {}
- 4 -1 roll
- }
- ifelse
- Courbeparam
-} def
-
-%% syntaxe : mini maxi {f} Courbe
-/Courbe {
- dup isstring {
- {}
- 3 -1 roll
- 3 -1 roll
- } {
- {}
- 2 -1 roll
- } ifelse
- Courbeparam
-} def
-
-%% syntaxe : {f} courbe_
-/courbe_ {
- xmin xmax
- {}
- 4 -1 roll
- Courbeparam_
-} def
-
-%% syntaxe : mini maxi {f} Courbe_
-/Courbe_ {
- {}
- 2 -1 roll
- Courbeparam_
-} def
-
-%% syntaxe : mini maxi {f} Courbe*
-/Courbe* {
-1 dict begin
- /startest {true} def
- Courbe
-end
-} def
-
-%% syntaxe : {f} courbe*
-/courbe* {
-1 dict begin
- /startest {true} def
- courbe
-end
-} def
-
-%%%%% ### courbeR2 ###
-%% syntaxe : tmin tmax C@urbeR2_
- /C@urbeR2_ {
-6 dict begin
- /tmax@ exch def
- /tmin@ exch def
- /t tmin@ def
- /dt tmax@ tmin@ sub resolution 1 sub div def
- tmin@ courbe_dic /X get exec
- pstrickactionR2
- smoveto
- /t t dt add store
- resolution 2 sub
- {
- t courbe_dic /X get exec
- pstrickactionR2
- slineto
- /t t dt add store %% on incremente
- }
- repeat
- tmax@ courbe_dic /X get exec
- pstrickactionR2
- slineto
-end
-} def
-
-%% syntaxe : tmin tmax {X} CourbeR2_
-/CourbeR2_ {
- courbe_dic exch /X exch put
- C@urbeR2_
-} def
-
-%% syntaxe : {X} courbeR2_
-/courbeR2_ {
- tmin tmax
- 3 -1 roll
- 3 -1 roll
- CourbeR2_
-} def
-
-%% syntaxe : tmin tmax {X} CourbeR2
-/CourbeR2+ {
-2 dict begin
- /slineto {} def
- /smoveto {} def
- CourbeR2
-end
-} bind def
-
-/CourbeR2 {
-gsave
-6 dict begin
- dup isstring
- {
- /option exch def
- }
- if
- courbe_dic exch /X exch put
- /tmax exch def
- /tmin exch def
-
- newpath
- tmin tmax C@urbeR2_
- starfill
- currentlinewidth 0 eq {} {stroke} ifelse
-
-end
-grestore
-} def
-
-%% syntaxe : {X} courbeR2
-/courbeR2 {
- tmin tmax
- 3 -1 roll
- CourbeR2
-} def
-
-%% syntaxe : tmin tmax {X} CourbeR2*
-/CourbeR2* {
-1 dict begin
- /startest {true} def
- CourbeR2
-end
-} def
-
-%% syntaxe : {X} {Y} courbeR2*
-/courbeR2* {
-1 dict begin
- /startest {true} def
- courbeR2
-end
-} def
-
-%%%%% ### courbeR3 ###
-%% syntaxe : t1 t2 {f} (option) CourbeR3
-/CourbeR3 {
-2 dict begin
- dup isstring {
- /option exch def
- } if
- /lafonction exch def
- {lafonction 3dto2d}
- currentdict /option known
- {option}
- if
- CourbeR2
-end
-} def
-
-%% syntaxe : {f} (option) CourbeR3
-/courbeR3 {
- tmin tmax 3 -1 roll CourbeR3
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% fonctions et constantes mathematiques %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### math ###
-%%%%%%%%%%% constantes mathematiques %%%%%%%%%%%%%%
-
-/pi 3.14159 def
-/e 2.71828 def
-
-%%%%%%%%%%% fonctions mathematiques %%%%%%%%%%%%%%%
-
-/rd {180 pi div mul} def %% transforme des rd en degres
-/deg {pi mul 180 div} def %% transforme des degres en rd
-/log {ln 10 ln div} def
-/Exp {e exch exp} def
-/Cos {rd cos} def
-/Sin {rd sin} def
-/tan {dup sin exch cos div} def
-/cotan {dup cos exch sin div} def
-/Tan {dup Sin exch Cos div} def
-/Cotan {dup Cos exch Sin div} def
-/coTan {Cotan} def
-/arctan {
-dup 0 ge
- {1 atan}
- {neg 1 atan neg}
-ifelse
-} def
-/Arctan {arctan deg} def
-/arccos {
- dup
- dup mul neg 1 add sqrt
- exch
- atan
-} def
-/Arccos {arccos deg} def
-/arcsin {
- dup 1 eq {
- 90
- } {
- dup
- dup mul neg 1 add sqrt
- atan
- dup 90 lt
- {}
- {360 sub}
- ifelse
- } ifelse
-} def
-/Arcsin {arcsin deg} def
-/cosh {dup Exp exch neg Exp add 2 div} def
-/sinh {dup Exp exch neg Exp sub 2 div} def
-/tanh {dup sinh exch cosh div} def
-/cotanh {dup cosh exch sinh div} def
-/argcosh {dup dup mul 1 sub sqrt add ln} def
-/argsinh {dup dup mul 1 add sqrt add ln} def
-/argtanh {
- setxvar
- x 1 add
- 1 x sub
- div
- ln
- 2 div
-} def
-/factorielle {
- dup 0 eq
- {pop 1}
- {dup 1 sub factorielle mul}
- ifelse
-} def
-/Gauss {
-3 dict begin
- /sigma exch def
- /m exch def
- /x exch def
- x m sub dup mul sigma dup mul 2 mul div neg Exp
- 2 pi mul sigma dup mul mul sqrt div
-end
-} def
-
-%%%%% ### max ###
-/max {
- 2 copy
- lt {exch} if
- pop
-} def
-
-%%%%% ### min ###
-/min {
- 2 copy
- gt {exch} if
- pop
-} def
-
-%%%%% ### setcolor ###
-%% syntaxe : tableau setcolor
-/setcolor {
- dup length 4 eq
- {aload pop setcmykcolor}
- {aload pop setrgbcolor}
- ifelse
-} def
-
-%%%%% ### in ###
-%% cherche si un elt donne appartient au tableau donne
-%% rque : utilise 3 variables locales
-%% syntaxe : elt array in --> index boolean
-/in {
-3 dict begin
- /liste exch def
- /elt exch def
- /i 0 def
- 0 false %% la reponse a priori
- liste length {
- liste i get elt eq {
- pop pop %% en enleve la reponse
- i true %% pour mettre la bonne
- exit
- } if
- /i i 1 add store
- } repeat
-end
-} def
-
-%%%%% ### starfill ###
-%% la procedure pour les objets "star"
-%% si c est "star" on fait le fillstyle, sinon non
-/starfill {
- startest {
- gsave
- clip
- fillstyle
- grestore
- /startest false def
- } if
-} def
-
-%%%%% ### addv ###
-%% syntaxe : u v addv --> u+v
-/addv { %% xA yA xB yB
- 3 1 roll %% xA yB yA xB
- 4 1 roll %% xB xA yB yA
- add 3 1 roll %% yB+yA xB xA
- add exch
-} def
-
-%%%%% ### continu ###
-/continu {
- [] 0 setdash
-} def
-
-%%%%% ### trigospherique ###
-%% passage spherique --> cartesiennes
-%% les formules de passage ont été récupérées ici :
-%% http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_polaires
-%% syntaxe : r theta phi rtp2xyz -> x y z
-/rtp2xyz {
-6 dict begin
- /phi exch def
- /theta exch def
- /r exch def
- /x phi sin theta cos mul r mul def
- /y phi sin theta sin mul r mul def
- /z phi cos r mul def
- x y z
-end
-} def
-
-%% trace d'un arc sur une sphere de centre O
-%% syntaxe : r theta1 phi1 r theta2 phi2 arcspherique
-/arcspherique {
-9 dict begin
- dup isstring {
- /option exch def
- } if
- /phi2 exch def
- /theta2 exch def
- pop
- /phi1 exch def
- /theta1 exch def
- /r exch def
- /n 12 def
-
- 1 theta1 phi1 rtp2xyz /u defpoint3d
- 1 theta2 phi2 rtp2xyz /v defpoint3d
- u v vectprod3d u vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d
-
- /sinalpha u v vectprod3d norme3d def
- /cosalpha u v scalprod3d def
- /alpha sinalpha cosalpha atan def
- /n 12 def
- /pas alpha n div def
-
- gsave
- /t pas neg def
- [
- n 1 add {
- /t t pas add store
- u t cos r mul mulv3d
- w t sin r mul mulv3d
- addv3d
- } repeat
- ]
- currentdict /option known {
- option
- } if
- ligne3d
- grestore
-end
-} def
-
-%% trace d'un arc sur une sphere de centre O
-%% syntaxe : r theta1 phi1 r theta2 phi2 arcspherique
-/arcspherique_ {
-8 dict begin
- /phi2 exch def
- /theta2 exch def
- pop
- /phi1 exch def
- /theta1 exch def
- /r exch def
- /n 12 def
-
- 1 theta1 phi1 rtp2xyz /u defpoint3d
- 1 theta2 phi2 rtp2xyz /v defpoint3d
- u v vectprod3d u vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d
-
- /sinalpha u v vectprod3d norme3d def
- /cosalpha u v scalprod3d def
- /alpha sinalpha cosalpha atan def
- /n 12 def
- /pas alpha n div def
-
- /t pas neg def
- [
- n 1 add {
- /t t pas add store
- u t cos r mul mulv3d
- w t sin r mul mulv3d
- addv3d
- } repeat
- ] ligne3d_
-end
-} def
-
-%% trace d'une geodesique sur une sphere de centre O
-%% syntaxe : r theta1 phi1 r theta2 phi2 geodesique_sphere
-/geodesique_sphere {
-13 dict begin
- /phi2 exch def
- /theta2 exch def
- pop
- /phi1 exch def
- /theta1 exch def
- /r exch def
- /n 360 def
-
- 1 theta1 phi1 rtp2xyz /u defpoint3d
- 1 theta2 phi2 rtp2xyz /v defpoint3d
- u v vectprod3d u vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d
-
- /sinalpha u v vectprod3d norme3d def
- /cosalpha u v scalprod3d def
- /alpha sinalpha cosalpha atan def
- /pas 360 n div def
-
- gsave
- /t pas neg def
- [
- n 1 add {
- /t t pas add store
- u t cos r mul mulv3d
- w t sin r mul mulv3d
- addv3d
- } repeat
- ] ligne3d
- grestore
-end
-} def
-
-
-%% syntaxe : A B C trianglespherique --> trace le rtiangle ABC
-%% (coordonnees spheriques)
-/trianglespherique* {
-1 dict begin
- /startest {true} def
- trianglespherique
-end
-} def
-
-/trianglespherique {
-10 dict begin
- /C defpoint3d
- /B defpoint3d
- /A defpoint3d
- gsave
- newpath
- A rtp2xyz 3dto2d smoveto
- A B arcspherique_
- B C arcspherique_
- C A arcspherique_
- closepath
- starfill
- currentlinewidth 0 eq {} {stroke} ifelse
- grestore
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% operations sur les tableaux %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### duparray ###
-/duparray {
-1 dict begin
- /table exch def
- table
- [ table aload pop ]
-end
-} def
-
-%%%%% ### append ###
-%% syntaxe : string1 string2 append --> concatene les 2 chaines ou fusionne 2 tableaux
-/append {
-3 dict begin
- dup isarray {
- /tab2 exch def
- /tab1 exch def
- [ tab1 aload pop tab2 aload pop ]
- } {
- /str2 exch def
- /str1 exch def
- /result str1 length str2 length add string def
- str1 result copy pop
- result str1 length str2 putinterval
- result
- } ifelse
-end
-} def
-
-%%%%% ### rollparray ###
-%% syntaxe : array n rollparray -> array
-%% opere une rotation de n sur les couplets du tableau array
-/rollparray {
-4 dict begin
- /k exch def
- /table exch def
- /n table length def
- k 0 eq {
- table
- } {
- k 0 ge {
- [ table aload pop 2 {n 1 roll} repeat ]
- k 1 sub
- } {
- [ table aload pop 2 {n -1 roll} repeat ]
- k 1 add
- } ifelse
- rollparray
- } ifelse
-end
-} def
-
-%%%%% ### bubblesort ###
-%% syntaxe : array bubblesort --> array2 trie par ordre croissant
-%% code de Bill Casselman
-%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
-/bubblesort {
-4 dict begin
- /a exch def
- /n a length 1 sub def
- n 0 gt {
- % at this point only the n+1 items in the bottom of a remain to
- % the sorted largest item in that blocks is to be moved up into
- % position n
- n {
- 0 1 n 1 sub {
- /i exch def
- a i get a i 1 add get gt {
- % if a[i] > a[i+1] swap a[i] and a[i+1]
- a i 1 add
- a i get
- a i a i 1 add get
- % set new a[i] = old a[i+1]
- put
- % set new a[i+1] = old a[i]
- put
- } if
- } for
- /n n 1 sub def
- } repeat
- } if
- a
-end
-} def
-
-%% syntaxe : array1 doublebubblesort --> array2 array3, array3 est
-%% trie par ordre croissant et array2 correspond a la position des
-%% indices de depart, ie si array1 = [3 2 4 1], alors array2 = [3 1 0 2]
-%% code de Bill Casselman, modifie par jpv, 15/08/2006
-%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
-/doublebubblesort {
-5 dict begin
- /table exch def
- /n table length 1 sub def
- /indices [ 0 1 n {} for ] def
- n 0 gt {
- % at this point only the n+1 items in the bottom of a remain to
- % the sorted largest item in that blocks is to be moved up into
- % position n
- n {
- 0 1 n 1 sub {
- /i exch def
- table i get table i 1 add get gt {
- % if a[i] > a[i+1] swap a[i] and a[i+1]
- table i 1 add
- table i get
- table i table i 1 add get
- % set new a[i] = old a[i+1]
- put
- % set new a[i+1] = old a[i]
- put
-
- indices i 1 add
- indices i get
- indices i indices i 1 add get
- % set new a[i] = old a[i+1]
- put
- % set new a[i+1] = old a[i]
- put
- } if
- } for
- /n n 1 sub def
- } repeat
- } if
- indices table
-end
-} def
-
-%%%%% ### quicksort ###
-%% src : http://www.math.ubc.ca/~cass/graphics/text/www/code/sort.inc
-%% code de Bill Casselman, modifie par jpv, 18/10/2007
-
-/qsortdict 8 dict def
-
-qsortdict begin
-
-% args: /comp a L R x
-% effect: effects a partition into two pieces [L j] [i R]
-% leaves i j on stack
-
-/partition { 8 dict begin
-/x exch def
-/j exch def
-/i exch def
-/a exch def
-load /comp exch def
-{
- {
- a i get x comp exec not {
- exit
- } if
- /i i 1 add def
- } loop
- {
- x a j get comp exec not {
- exit
- } if
- /j j 1 sub def
- } loop
-
- i j le {
- % swap a[i] a[j]
- a j a i get
- a i a j get
- put put
- indices j indices i get
- indices i indices j get
- put put
- /i i 1 add def
- /j j 1 sub def
- } if
- i j gt {
- exit
- } if
-} loop
-i j
-end } def
-
-% args: /comp a L R
-% effect: sorts a[L .. R] according to comp
-
-/subsort {
-% /c a L R
-[ 3 1 roll ] 3 copy
-% /c a [L R] /c a [L R]
-aload aload pop
-% /c a [L R] /c a L R L R
-add 2 idiv
-% /c a [L R] /c a L R (L+R)/2
-3 index exch get
-% /c a [L R] /c a L R x
-partition
-% /c a [L R] i j
-% if j > L subsort(a, L, j)
-dup
-% /c a [L R] i j j
-3 index 0 get gt {
- % /c a [L R] i j
- 5 copy
- % /c a [L R] i j /c a [L R] i j
- exch pop
- % /c a [L R] i j /c a [L R] j
- exch 0 get exch
- % ... /c a L j
- subsort
-} if
-% /c a [L R] i j
-pop dup
-% /c a [L R] i i
-% if i < R subsort(a, i, R)
-2 index 1 get lt {
- % /c a [L R] i
- exch 1 get
- % /c a i R
- subsort
-}{
- 4 { pop } repeat
-} ifelse
-} def
-
-end
-
-% args: /comp a
-% effect: sorts the array a
-% comp returns truth of x < y for entries in a
-
-/quicksort { qsortdict begin
-dup length 1 gt {
-% /comp a
-dup
-% /comp a a
-length 1 sub
-% /comp a n-1
-0 exch subsort
-} {
-pop pop
-} ifelse
-end } def
-
-% ----------------------------------------
-
-%% fin du code de Bill Casselman
-
-%% syntaxe : array1 doublebubblesort --> array2 array3, array3 est
-%% trie par ordre croissant et array2 correspond a la position des
-%% indices de depart, ie si array1 = [3 2 4 1], alors array2 = [3 1 0 2]
-%% code de Bill Casselman, modifie par jpv, 18/10/2007
-%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
-/doublequicksort {
-qsortdict begin
- /comp exch
- /a exch def
- a dup length /n exch def
- /indices [0 1 n 1 sub {} for ] def
- dup length 1 gt {
- % /comp a
- dup
- % /comp a a
- length 1 sub
- % /comp a n-1
- 0 exch subsort
- } {
- pop pop
- } ifelse
- indices a
-end
-} def
-
-/comp {lt} def
-
-%%%%% ### apply ###
-%% syntaxe : [x1 ... xn] (f) apply --> [f(x1) ... f(xn)]
-/apply {
-3 dict begin
- dup isstring
- {/fonction exch cvx def}
- {/fonction exch def}
- ifelse
- /liste exch def
- /@i 0 def
- [
- liste length {
- liste @i get fonction
- /@i @i 1 add store
- } repeat
- counttomark
- 0 eq
- {pop}
- {]}
- ifelse
-end
-} def
-
-%% syntaxe : [x1 ... xn] (f) papply
-/papply {
-3 dict begin
- dup isstring
- {/fonction exch cvx def}
- {/fonction exch def}
- ifelse
- /liste exch def
- /@i 0 def
- [
- liste length 2 idiv {
- liste @i get
- liste @i 1 add get
- fonction
- /@i @i 2 add store
- } repeat
- counttomark
- 0 eq
- {pop}
- {]}
- ifelse
-end
-} def
-
-%% syntaxe : [x1 ... xn] (f) capply
-/capply {
-3 dict begin
- dup isstring
- {/fonction exch cvx def}
- {/fonction exch def}
- ifelse
- /liste exch def
- /@i 0 def
- [
- liste length 3 idiv {
- liste @i get
- liste @i 1 add get
- liste @i 2 add get
- fonction
- /@i @i 3 add store
- } repeat
- counttomark
- 0 eq
- {pop}
- {]}
- ifelse
-end
-} def
-
-%%%%% ### reverse ###
-%% syntaxe : array reverse --> inverse l ordre des items dans
-%% le tableau
-/reverse {
-3 dict begin
- /le_tableau exch def
- /n le_tableau length def
- /i n 1 sub def
- [
- n {
- le_tableau i get
- /i i 1 sub store
- } repeat
- ]
-end
-} def
-
-%% syntaxe : array_points reversep --> inverse l ordre des points dans
-%% le tableau
-/reversep {
-3 dict begin
- /le_tableau exch def
- /n le_tableau length 2 idiv def
- /i n 1 sub def
- [
- n {
- le_tableau i getp
- /i i 1 sub store
- } repeat
- ]
-end
-} def
-
-%%%%% ### get ###
-%% syntaxe : array_points n getp --> le n-ieme point du tableau de
-%% points array_points
-/getp {
- 2 copy
- 2 mul get
- 3 1 roll
- 2 mul 1 add get
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% matrices %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### linear ###
-%% syntaxe : M i j any --> depose any dans M en a_ij
-/put_ij {
-5 dict begin
- /a exch def
- /j exch def
- /i exch def
- /M exch def
- /L M i get_Li def
- L j a put
- M i L put_Li
-end
-} def
-
-%% syntaxe : M i j get_ij --> le coeff c_ij
-/get_ij {
- 3 1 roll %% j M i
- get_Li %% j L_i
- exch get
-} def
-
-%% syntaxe : M i L put_Li --> remplace dans M la ligne Li par L
-/put_Li {
- put
-} def
-
-%% syntaxe : M i get_Li --> la ligne Li de M
-/get_Li {
- get
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% geometrie 3d (calculs) %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### dupp3d ###
-%% duplique le vecteur 3d
-/dupp3d { %% x y z
- 3 copy
-} def
-/dupv3d {dupp3d} def
-
-%%%%% ### angle3d ###
-%% syntaxe : vect1 vect2 angle3d
-/angle3d {
-4 dict begin
- normalize3d /vect2 defpoint3d
- normalize3d /vect1 defpoint3d
- /cosalpha vect1 vect2 scalprod3d def
- /sinalpha vect1 vect2 vectprod3d norme3d def
- sinalpha cosalpha atan
-end
-} def
-
-%%%%% ### transformpoint3d ###
-%% syntaxe : x y z a11 a21 a31 a12 a22 a32 a13 a23 a33
-%% transformpoint3d -> X Y Z
-/transformpoint3d {
-12 dict begin
- /a33 exch def
- /a23 exch def
- /a13 exch def
- /a32 exch def
- /a22 exch def
- /a12 exch def
- /a31 exch def
- /a21 exch def
- /a11 exch def
- /z exch def
- /y exch def
- /x exch def
- a11 x mul a12 y mul add a13 z mul add
- a21 x mul a22 y mul add a23 z mul add
- a31 x mul a32 y mul add a33 z mul add
-end
-} def
-
-%%%%% ### normalize3d ###
-%% rend le vecteur 3d unitaire. Ne fait rien si u=0
-/unitaire3d { %% x y z
-2 dict begin
- /u defpoint3d
- /norme u norme3d def
- norme 0 eq
- {u}
- {u 1 norme div mulv3d
- } ifelse
-end
-} def
-/normalize3d {unitaire3d} def
-
-%%%%% ### mulv ###
-%% syntaxe : u a mulv --> au
-/mulv { %% xA, yA, a
- dup %% xA, yA, a, a
- 3 1 roll %% xA, a, yA, a
- mul 3 1 roll %% ayA, xA, a
- mul exch
-} def
-
-%%%%% ### geom3d ###
-%% syntaxe : A k1 B k2 barycentre3d -> G, barycentre du systeme
-%% [(A, k1) (B, k2)]
-/barycentre3d {
-4 dict begin
- /k2 exch def
- /B defpoint3d
- /k1 exch def
- /A defpoint3d
- A k1 mulv3d
- B k2 mulv3d
- addv3d
- 1 k1 k2 add div mulv3d
-end
-} def
-
-%% syntaxe : array isobarycentre3d --> G
-/isobarycentre3d {
-2 dict begin
- /table exch def
- /n table length 3 idiv def
- table 0 getp3d
- 1 1 n 1 sub {
- table exch getp3d
- addv3d
- } for
- 1 n div mulv3d
-end
-} def
-
-%% syntaxe : M A alpha hompoint3d -> le point M' tel que AM' = alpha AM
-/hompoint3d {
-3 dict begin
- /alpha exch def
- /A defpoint3d
- /M defpoint3d
- A M vecteur3d alpha mulv3d A addv3d
-end
-} def
-
-%% syntaxe : M A sympoint3d -> le point M' tel que AM' = -AM
-/sympoint3d {
-2 dict begin
- /A defpoint3d
- /M defpoint3d
- A M vecteur3d -1 mulv3d A addv3d
-end
-} def
-
-%% syntaxe : A u translatepoint3d --> B image de A par la translation de vecteur u
-/translatepoint3d {
- addv3d
-} def
-
-/scaleOpoint3d {
-6 dict begin
- /k3 exch def
- /k2 exch def
- /k1 exch def
- /z exch def
- /y exch def
- /x exch def
- k1 x mul
- k2 y mul
- k3 z mul
-end
-} def
-
-% syntaxe : M alpha_x alpha_y alpha_z rotateOpoint3d --> M'
-/rotateOpoint3d {
-21 dict begin
- /RotZ exch def
- /RotY exch def
- /RotX exch def
- /Zpoint exch def
- /Ypoint exch def
- /Xpoint exch def
- /c1 {RotX cos} bind def
- /c2 {RotY cos} bind def
- /c3 {RotZ cos} bind def
- /s1 {RotX sin} bind def
- /s2 {RotY sin} bind def
- /s3 {RotZ sin} bind def
- /M11 {c2 c3 mul} bind def
- /M12 {c3 s1 mul s2 mul c1 s3 mul sub} bind def
- /M13 {c1 c3 mul s2 mul s1 s3 mul add} bind def
- /M21 {c2 s3 mul} bind def
- /M22 {s1 s2 mul s3 mul c1 c3 mul add} bind def
- /M23 {s3 s2 mul c1 mul c3 s1 mul sub} bind def
- /M31 {s2 neg} bind def
- /M32 {s1 c2 mul} bind def
- /M33 {c1 c2 mul} bind def
- M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add
- M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add
- M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add
-end
-} def
-
-%%%%% ### vecteur3d ###
-%% creation du vecteur AB a partir de A et B
-/vecteur3d { %% xA yA zA xB yB zB
-6 dict begin
- /zB exch def
- /yB exch def
- /xB exch def
- /zA exch def
- /yA exch def
- /xA exch def
- xB xA sub
- yB yA sub
- zB zA sub
-end
-}def
-
-%%%%% ### vectprod3d ###
-%% produit vectoriel de deux vecteurs 3d
-/vectprod3d { %% x1 y1 z1 x2 y2 z2
-6 dict begin
- /zp exch def
- /yp exch def
- /xp exch def
- /z exch def
- /y exch def
- /x exch def
- y zp mul z yp mul sub
- z xp mul x zp mul sub
- x yp mul y xp mul sub
-end
-} def
-
-%%%%% ### scalprod3d ###
-%% produit scalaire de deux vecteurs 3d
-/scalprod3d { %% x1 y1 z1 x2 y2 z2
-6 dict begin
- /zp exch def
- /yp exch def
- /xp exch def
- /z exch def
- /y exch def
- /x exch def
- x xp mul y yp mul add z zp mul add
-end
-} def
-
-%%%%% ### papply3d ###
-%% syntaxe : [A1 ... An] (f) papply3d --> [f(A1) ... f(An)]
-/papply3d {
-3 dict begin
- /fonction exch def
- /liste exch def
- /i 0 def
- [
- liste length 3 idiv {
- liste i get
- liste i 1 add get
- liste i 2 add get
- fonction
- /i i 3 add store
- } repeat
- counttomark
- 0 eq
- {pop}
- {]}
- ifelse
-end
-} def
-
-%%%%% ### defpoint3d ###
-%% creation du point A a partir de xA yA yB et du nom /A
-/defpoint3d { %% xA yA zA /nom
-1 dict begin
- /memo exch def
- [ 4 1 roll ] cvx memo exch
-end def
-}def
-
-%%%%% ### distance3d ###
-/distance3d { %% A B
- vecteur3d norme3d
-} def
-
-%%%%% ### get3d ###
-/getp3d { %% [tableau de points 3d] i --> donne le ieme point du tableau
- 2 copy 2 copy
- 3 mul get
- 5 1 roll
- 3 mul 1 add get
- 3 1 roll
- 3 mul 2 add get
-} def
-
-%%%%% ### norme3d ###
-%% norme d un vecteur 3d
-/norme3d { %% x y z
-3 dict begin
- /z exch def
- /y exch def
- /x exch def
- x dup mul y dup mul add z dup mul add sqrt
-end
-} def
-
-%%%%% ### mulv3d ###
-%% (scalaire)*(vecteur 3d) Attention : dans l autre sens !
-/mulv3d { %% x y z lambda
-4 dict begin
- /lambda exch def
- /z exch def
- /y exch def
- /x exch def
- x lambda mul
- y lambda mul
- z lambda mul
-end
-} def
-
-%%%%% ### addv3d ###
-%% addition de deux vecteurs 3d
-/addv3d { %% x1 y1 z1 x2 y2 z2
-6 dict begin
- /zp exch def
- /yp exch def
- /xp exch def
- /z exch def
- /y exch def
- /x exch def
- x xp add
- y yp add
- z zp add
-end
-} def
-
-%%%%% ### milieu3d ###
-/milieu3d { %% A B --> I le milieu de [AB]
- addv3d 0.5 mulv3d
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% geometrie 3d (dessins) %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### point3d ###
-/point3d { %% A
- 3dto2d point
-} def
-
-/points3d { %% tableau de points3d
- tab3dto2d points
-} def
-
-%%%%% ### ligne3d ###
-%% [tableau de points3d] option --> trace la ligne brisee
-/ligne3d {
-1 dict begin
- dup isstring
- {/option exch def}
- if
- tab3dto2d
- currentdict /option known
- {option}
- if
- ligne
-end
-} def
-
-%% [tableau de points3d] option --> trace la ligne brisee
-/ligne3d_ {
-1 dict begin
- dup isstring
- {/option exch def}
- if
- tab3dto2d
- currentdict /option known
- {option}
- if
- ligne_
-end
-} def
-
-%%%%% ### tab3dto2d ###
-%% transforme un tableau de points 3d en tableau de points 2d
-/tab3dto2d {
-2 dict begin
- /T exch def
- /n T length def
- [ T aload pop
- n 1 sub -1 n 3 idiv 2 mul
- { 1 dict begin
- /i exch def
- 3dto2d i 2 roll
- end } for ]
-end
-} def
-
-%%%%% ### polygone3d ###
-/polygone3d { %% tableau de points3d
- tab3dto2d polygone
-} def
-
-/polygone3d* { %% tableau de points3d
- tab3dto2d polygone*
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% gestion du texte %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### pathtext ###
-%% syntaxe : string x y initp@thtext
- /initp@thtext {
-7 dict begin
- /y exch def
- /x exch def
- /str exch def
- str 0 0 show_dim
- /wy exch def
- /wx exch def
- /lly exch def
- /llx exch def
- pop pop pop
- newpath
- x y smoveto
-} def
- /closep@thtext {
- str true charpath
-end
-} def
-
-%% syntaxe : string x y cctext_
-/cctext_ {
- initp@thtext
- llx wx add lly wy add -.5 mulv rmoveto
- closep@thtext
-} def
-
-/brtext_ {
- initp@thtext
- hadjust 0 rmoveto
- llx neg 0 rmoveto
- closep@thtext
-} def
-
-/bbtext_ {
- initp@thtext
- 0 0 rmoveto
- 0 0 rmoveto
- closep@thtext
-} def
-
-/bltext_ {
- initp@thtext
- hadjust neg 0 rmoveto
- wx neg 0 rmoveto
- closep@thtext
-} def
-
-/bctext_ {
- initp@thtext
- 0 0 rmoveto
- wx llx add -.5 mul 0 rmoveto
- closep@thtext
-} def
-
-/ubtext_ {
- initp@thtext
- 0 vadjust rmoveto
- 0 lly neg rmoveto
- closep@thtext
-} def
-
-/urtext_ {
- initp@thtext
- hadjust vadjust rmoveto
- llx neg lly neg rmoveto
- closep@thtext
-} def
-
-/ultext_ {
- initp@thtext
- hadjust neg vadjust rmoveto
- wx neg lly neg rmoveto
- closep@thtext
-} def
-
-/uctext_ {
- initp@thtext
- 0 vadjust rmoveto
- llx wx add -.5 mul lly neg rmoveto
- closep@thtext
-} def
-
-/drtext_ {
- initp@thtext
- hadjust vadjust neg rmoveto
- llx neg wy neg rmoveto
- closep@thtext
-} def
-
-/dbtext_ {
- initp@thtext
- 0 vadjust neg rmoveto
- 0 wy neg rmoveto
- closep@thtext
-} def
-
-/dltext_ {
- initp@thtext
- hadjust neg vadjust neg rmoveto
- wx neg wy neg rmoveto
- closep@thtext
-} def
-
-/dctext_ {
- initp@thtext
- 0 vadjust neg rmoveto
- llx wx add -2 div wy neg rmoveto
- closep@thtext
-} def
-
-/crtext_ {
- initp@thtext
- hadjust 0 rmoveto
- llx neg lly wy add -2 div rmoveto
- closep@thtext
-} def
-
-/cbtext_ {
- initp@thtext
- 0 0 rmoveto
- 0 lly wy add -2 div rmoveto
- closep@thtext
-} def
-
-/cltext_ {
- initp@thtext
- hadjust neg 0 rmoveto
- wx neg lly wy add -2 div rmoveto
- closep@thtext
-} def
-
-/cctext_ {
- initp@thtext
- 0 0 rmoveto
- llx wx add lly wy add -.5 mulv rmoveto
- closep@thtext
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% bibliotheque sur les solides %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### solide ###
-%% solid = [Sommets Faces Colors_Faces InOut_Table]
-/solidgetpointstable {
- 0 get
-} def
-
-/solidgetfaces {
- 1 get
-} def
-
-/solidgetface {
-1 dict begin
- /i exch def
- solidgetfaces i get
-end
-} def
-
-/solidgetfcolors {
- 2 get
-} def
-
-%% syntaxe : solid i solidgetfcolor --> str
-/solidgetfcolor {
-1 dict begin
- /i exch def
- solidgetfcolors i get
-end
-} def
-
-%% syntaxe : solid i str solidputfcolor --> -
-/solidputfcolor {
-2 dict begin
- /str exch def
- /i exch def
- solidgetfcolors i str put
-end
-} def
-
-/solidgetinouttable {
- 3 get
-} def
-
-/solidputpointstable {
- 0 exch put
-} def
-
-/solidputfaces {
- 1 exch put
-} def
-
-/solidputfcolors {
- 2 exch put
-} def
-
-/solidputinouttable {
- 3 exch put
-} def
-
-%% syntaxe : any issolid --> booleen, vrai si any est de type solid
-/issolid {
-1 dict begin
- /candidat exch def
- candidat isarray {
- candidat length 4 eq {
- candidat 0 get isarray
- candidat 1 get isarray and
- candidat 2 get isarray and
- candidat 3 get isarray and
- } {
- false
- } ifelse
- } {
- false
- } ifelse
-end
-} def
-
-/dupsolid {
-5 dict begin
- /solid exch def
- /S solid solidgetpointstable def
- /F solid solidgetfaces def
- /FC solid solidgetfcolors def
- /IO solid solidgetinouttable def
- solid
- [
- S duparray exch pop
- F duparray exch pop
- FC duparray exch pop
- IO duparray exch pop
- ]
-end
-} def
-
-%% syntaxe : solid array solidputinfaces --> -
-/solidputinfaces {
-4 dict begin
- /facesinternes exch def
- /solid exch def
- /n2 facesinternes length def
- /IO solid solidgetinouttable def
- /facesexternes solid solidgetoutfaces def
- /n1 facesexternes length def
- solid
- [facesexternes aload pop facesinternes aload pop]
- solidputfaces
- IO 0 0 put
- IO 1 n1 1 sub put
- IO 2 n1 put
- IO 3 n1 n2 add 1 sub put
-end
-} def
-
-%% syntaxe : solid array solidputoutfaces --> -
-/solidputoutfaces {
-4 dict begin
- /facesexternes exch def
- /solid exch def
- /n1 facesexternes length def
- /IO solid solidgetinouttable def
- /facesinternes solid solidgetinfaces def
- /n2 facesinternes length def
- solid
- [facesexternes aload pop facesinternes aload pop]
- solidputfaces
- IO 0 0 put
- IO 1 n1 1 sub put
- IO 2 n1 put
- IO 3 n1 n2 add 1 sub put
-end
-} def
-
-%% syntaxe : solid array solidputoutfaces --> -
-/solidputoutfaces {
-4 dict begin
- /facesexternes exch def
- /solid exch def
- /n1 facesexternes length def
- /IO solid solidgetinouttable def
- /facesinternes solid solidgetinfaces def
- /n2 facesinternes length def
- solid
- [facesexternes aload pop facesinternes aload pop]
- solidputfaces
- IO 0 0 put
- IO 1 n1 1 sub put
- IO 2 n1 put
- IO 3 n1 n2 add 1 sub put
-end
-} def
-
-/solidnombreinfaces {
-1 dict begin
- /solid exch def
- solid solidwithinfaces {
- /IO solid solidgetinouttable def
- IO 3 get IO 2 get sub 1 add
- } {
- 0
- } ifelse
-end
-} def
-
-/solidnombreoutfaces {
-1 dict begin
- /solid exch def
- /IO solid solidgetinouttable def
- IO 1 get IO 0 get sub 1 add
-end
-} def
-
-%% syntaxe : solid solidgetinfaces --> array
-/solidgetinfaces {
-4 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetinfaces) ==
- quit
- } if
- solid solidwithinfaces {
- /IO solid solidgetinouttable def
- /F solid solidgetfaces def
- /n1 IO 2 get def
- /n2 IO 3 get def
- /n n2 n1 sub 1 add def
- F n1 n getinterval
- } {
- []
- } ifelse
-end
-} def
-
-%% syntaxe : solid solidgetoutfaces --> array
-/solidgetoutfaces {
-4 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetoutfaces) ==
- quit
- } if
- /IO solid solidgetinouttable def
- /F solid solidgetfaces def
- /n1 IO 0 get def
- /n2 IO 1 get def
- /n n2 n1 sub 1 add def
- F n1 n getinterval
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%% /tracelignedeniveau? false def
-%% /hauteurlignedeniveau 1 def
-%% /couleurlignedeniveau {rouge} def
-%% /linewidthlignedeniveau 4 def
-%%
-%% /solidgrid true def
-%% /aretescachees true def
-%% /defaultsolidmode 2 def
-
-%%%%% ### newsolid ###
-%% syntaxe : newsolid --> depose le solide nul sur la pile
-/newsolid {
- [] [] generesolid
-} def
-
-%%%%% ### generesolid ###
-/generesolid {
-2 dict begin
- /F exch def
- /S exch def
- [S F [F length {()} repeat] [0 F length 1 sub -1 -1]]
-end
-} def
-
-%%%%% ### nullsolid ###
-%% syntaxe : solide nullsolid -> booleen, vrai si le solide est nul
-/nullsolid {
-1 dict begin
- /candidat exch def
- candidat issolid not {
- (Error type argument dans "nullsolid") ==
- quit
- } if
- candidat solidgetpointstable length 0 eq {
- true
- } {
- false
- } ifelse
-end
-} def
-
-%%%%% ### solidnombreoutfaces ###
-/solidnombreoutfaces {
-4 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidnombreoutfaces) ==
- quit
- } if
- solid nullsolid {
- 0
- } {
- /IO solid solidgetinouttable def
- IO 1 get
- IO 0 get sub
- 1 add
- } ifelse
-end
-} def
-
-%%%%% ### solidnombreinfaces ###
-/solidnombreinfaces {
-4 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidnombreinfaces) ==
- quit
- } if
- solid solidwithinfaces {
- /IO solid solidgetinouttable def
- IO 3 get
- IO 2 get sub
- 1 add
- } {
- 0
- } ifelse
-end
-} def
-
-%%%%% ### solidtests ###
-%% syntaxe : solid solidwithinfaces --> bool, true si le solide est vide
-/solidwithinfaces {
-2 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidwithinfaces) ==
- quit
- } if
- /table solid solidgetinouttable def
- table 2 get -1 ne {
- true
- } {
- false
- } ifelse
-end
-} def
-
-%%%%% ### solidgetsommet ###
-%% syntaxe : solid i j solidgetsommetface --> sommet i de la face j
-/solidgetsommetface {
-6 dict begin
- /j exch def
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetsommetface) ==
- quit
- } if
- /table_faces solid solidgetfaces def
- /table_sommets solid solidgetpointstable def
- /k table_faces j get i get def
- table_sommets k getp3d
-end
-} def
-
-%% syntaxe : solid i solidgetsommetsface --> array, tableau des
-%% sommets de la face i du solide
-/solidgetsommetsface {
-6 dict begin
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetsommetsface) ==
- quit
- } if
- /table_faces solid solidgetfaces def
- /table_sommets solid solidgetpointstable def
- /table_indices table_faces i get def
- [
- 0 1 table_indices length 1 sub {
- /j exch def
- table_sommets table_indices j get getp3d
- } for
- ]
-end
-} def
-
-%% syntaxe : solid i solidgetsommet --> sommet i du solide
-/solidgetsommet {
-3 dict begin
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetsommet) ==
- quit
- } if
- /table_sommets solid solidgetpointstable def
- table_sommets i getp3d
-end
-} def
-
-%%%%% ### solidcentreface ###
-%% syntaxe : solid i solidcentreface --> M
-/solidcentreface {
- solidgetsommetsface isobarycentre3d
-} def
-
-%%%%% ### solidnombre ###
-/solidnombresommets {
- solidgetpointstable length 3 idiv
-} def
-
-/solidfacenombresommets {
- solidgetface length
-} def
-
-/solidnombrefaces {
- solidgetfaces length
-} def
-
-%%%%% ### solidshowsommets ###
-/solidshowsommets {
-8 dict begin
- dup issolid not {
- %% on a un argument
- /option exch def
- } if
- /sol exch def
- /n sol solidnombresommets def
- /m sol solidnombrefaces def
- currentdict /option known not {
- /option [0 1 n 1 sub {} for] def
- } if
- 0 1 option length 1 sub {
- /k exch def
- option k get /i exch def %% indice du sommet examine
- sol i solidgetsommet point3d
- } for
-end
-} def
-
-%%%%% ### solidnumsommets ###
-/solidnumsommets {
-8 dict begin
- Font findfont 10 scalefont setfont
- dup issolid not {
- %% on a un argument
- /option exch def
- } if
- /sol exch def
- /n sol solidnombresommets def
- /m sol solidnombrefaces def
- currentdict /option known not {
- /option [0 1 n 1 sub {} for] def
- } if
- /result [
- n {false} repeat
- ] def
- 0 1 option length 1 sub {
- /k exch def
- option k get /i exch def %% indice du sommet examine
- 0 1 m 1 sub {
- /j exch def %% indice de la face examinee
- i sol j solidgetface in exch pop {
- %% le sommet i est dans la face j
- exit
- } if
- } for
- %% le sommet i est dans la face j
- sol j solidcentreface /G defpoint3d
- sol i solidgetsommet /S defpoint3d
- i ( ) cvs
- G S vecteur3d normalize3d
- 15 dup ptojpoint pop
- mulv3d
- S addv3d
- 3dto2d cctext
- } for
-end
-} def
-
-%%%%% ### gestionsolidmode ###
-%% table = [ [vars] [mode0] [mode1] [mode2] [mode3] [mode4] ]
-/gestionsolidmode {
-5 dict begin
- /table exch def
- dup xcheck {
- /mode exch def
- } {
- dup isarray {
- /tableaffectation exch def
- /mode -1 def
- } {
- /mode defaultsolidmode def
- } ifelse
- } ifelse
- /vars table 0 get def
- /nbvars vars length def
- mode 0 ge {
- /tableaffectation table mode 1 add 5 min get def
- } if
- 0 1 nbvars 1 sub {
- /i exch def
- vars i get
- tableaffectation i get
- } for
- nbvars
-end
- {def} repeat
-} def
-
-%%%%% ### solidfuz ###
-%% syntaxe : solid1 solid2 solidfuz -> solid
-/solidfuz {
-5 dict begin
- /solid2 exch def
- /solid1 exch def
- /S1 solid1 solidgetpointstable def
- /S2 solid2 solidgetpointstable def
- /n S1 length 3 idiv def
-
- %% les sommets
- /S S1 S2 append def
-
- %% les faces internes et leurs couleurs
- /FI1 solid1 solidgetinfaces def
- /FIC1 solid1 solidgetincolors def
- solid2 solidnombreinfaces 0 eq {
- /FI2 [] def
- /FIC2 [] def
- } {
- /FI2 solid2 solidgetinfaces {{n add} apply} apply def
- /FIC2 solid2 solidgetincolors def
- } ifelse
- /FI [FI1 aload pop FI2 aload pop] def
- /FIC [FIC1 aload pop FIC2 aload pop] def
-
- %% les faces externes et leurs couleurs
- /FO1 solid1 solidgetoutfaces def
- /FOC1 solid1 solidgetoutcolors def
- /FO2 solid2 solidgetoutfaces {{n add} apply} apply def
- /FOC2 solid2 solidgetoutcolors def
- /FO [FO1 aload pop FO2 aload pop] def
- /FOC [FOC1 aload pop FOC2 aload pop] def
-
- /F [FO aload pop FI aload pop] def
- /FC [FOC aload pop FIC aload pop] def
- /IO [0 FO length 1 sub dup 1 add dup FI length add 1 sub] def
-
- S F generesolid
- dup FC solidputfcolors
- dup IO solidputinouttable
-end
-} def
-
-%%%%% ### solidnormaleface ###
-%% syntaxe : solid i solidnormaleface --> u, vecteur normale a la
-%% face d indice i du solide
-/solidnormaleface {
-4 dict begin
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetsommetface) ==
- quit
- } if
-%% solid 0 i solidgetsommetface /G defpoint3d
-%% G
-%% solid 1 i solidgetsommetface
-%% vecteur3d
-%% G
-%% solid 2 i solidgetsommetface
-%% vecteur3d
-
- /n solid i solidfacenombresommets def
- solid i solidcentreface /G defpoint3d
- %% debug %% G 3dto2d point
- G
- solid 0 i solidgetsommetface
- /A defpoint3d
- % gsave bleu A point3d grestore
- A
- vecteur3d normalize3d
- G
- solid 1 i solidgetsommetface
- /A defpoint3d
- % gsave orange A point3d grestore
- A
- vecteur3d normalize3d
- vectprod3d
- /resultat defpoint3d
- resultat normalize3d
-end
-} def
-
-%%%%% ### solidtransform ###
-%% syntaxe : solid1 {f} solidtransform --> solid2, solid2 est le
-%% transforme de solid1 par la transformation f : R^3 -> R^3
-/solidtransform {
-3 dict begin
- /f exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidtransform) ==
- quit
- } if
- /les_sommets
- solid solidgetpointstable {f} papply3d
- def
- solid les_sommets solidputpointstable
- solid
-end
-} def
-
-%%%%% ### solidputcolor ###
-%% syntaxe : solid i string solidputfcolor
-/solidputfcolor {
-3 dict begin
- /str exch def
- /i exch def
- /solid exch def
- /FC solid solidgetfcolors def
- i FC length lt {
- FC i str put
- } if
-end
-} def
-
-%% syntaxe : solid solidgetincolors --> array
-/solidgetincolors {
-3 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetincolors) ==
- quit
- } if
- solid solidwithinfaces {
- /fcol solid solidgetfcolors def
- /IO solid solidgetinouttable def
- /n1 IO 2 get def
- /n2 IO 3 get def
- /n n2 n1 sub 1 add def
- fcol n1 n getinterval
- } {
- []
- } ifelse
-end
-} def
-
-%% syntaxe : solid solidgetoutcolors --> array
-/solidgetoutcolors {
-3 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetoutcolors) ==
- quit
- } if
- /fcol solid solidgetfcolors def
- /IO solid solidgetinouttable def
- /n1 IO 0 get def
- /n2 IO 1 get def
- /n n2 n1 sub 1 add def
- fcol n1 n getinterval
-end
-} def
-
-%% syntaxe : solid array solidputincolors --> -
-/solidputincolors {
-4 dict begin
- /newcolorstable exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidputincolors) ==
- quit
- } if
- /n newcolorstable length def
- n solid solidnombreinfaces ne {
- (Error : mauvaise longueur de tableau dans solidputincolors) ==
- quit
- } if
- n 0 ne {
- /FC solid solidgetfcolors def
- /IO solid solidgetinouttable def
- /n1 IO 2 get def
- FC n1 newcolorstable putinterval
- } if
-end
-} def
-
-%% syntaxe : solid array solidputoutcolors --> -
-/solidputoutcolors {
-4 dict begin
- /newcolorstable exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidputoutcolors) ==
- quit
- } if
- /n newcolorstable length def
- n solid solidnombreoutfaces ne {
- (Error : mauvaise longueur de tableau dans solidputoutcolors) ==
- quit
- } if
- n 0 ne {
- /FC solid solidgetfcolors def
- /IO solid solidgetinouttable def
- /n1 IO 0 get def
- FC n1 newcolorstable putinterval
- } if
-end
-} def
-
-%% syntaxe : solid str outputcolors
-/outputcolors {
-5 dict begin
- /color exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans inoutputcolors) ==
- quit
- } if
- /n solid solidnombreoutfaces def
- solid [ n {color} repeat ] solidputoutcolors
-end
-} def
-
-%% syntaxe : solid str inputcolors
-/inputcolors {
-5 dict begin
- /color exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans inoutputcolors) ==
- quit
- } if
- /n solid solidnombreinfaces def
- solid [ n {color} repeat ] solidputincolors
-end
-} def
-
-%% syntaxe : solid str1 str2 inoutputcolors
-/inoutputcolors {
-5 dict begin
- /colout exch def
- /colin exch def
- /solid exch def
- solid colin inputcolors
- solid colout outputcolors
-end
-} def
-
-%%%%% ### solidputhuecolors ###
-%% syntaxe : solid table solidputhuecolors --> -
-/solidputhuecolors {
-1 dict begin
- 2 copy pop
- solidgetinouttable /IO exch def
- IO 0 get
- IO 1 get
- s@lidputhuec@l@rs
-end
-} def
-
-/solidputinhuecolors {
-2 dict begin
- /table exch def
- /solid exch def
- solid solidgetinouttable /IO exch def
- solid solidwithinfaces {
- solid table
- IO 2 get
- IO 3 get
- s@lidputhuec@l@rs
- } if
-end
-} def
-
-/solidputinouthuecolors {
-1 dict begin
- 2 copy pop
- solidgetinouttable /IO exch def
- IO 0 get
- IO 3 get IO 1 get max
- s@lidputhuec@l@rs
-end
-} def
-
-%% syntaxe : solid table n1 n2 s@lidputhuec@l@rs --> -
-%% affecte les couleurs des faces d indice n1 a n2 du solid solid, par
-%% un degrade defini par la table.
- /s@lidputhuec@l@rs {
-9 dict begin
- /n2 exch def
- /n1 exch def
- /table exch def
- /solid exch def
- /n n2 n1 sub def
-
- table length 2 eq {
- /a0 table 0 get def
- /a1 table 1 get def
- a1 isstring {
- /lacouleurdepart {
- gsave
- [a0 cvx exec] length 0 eq {
- a0 cvx exec currentrgbcolor
- } {
- a0 cvx exec
- } ifelse
- grestore
- } def
- /lacouleurarrivee {
- gsave
- [a1 cvx exec] length 0 eq {
- a1 cvx exec currentrgbcolor
- } {
- a1 cvx exec
- } ifelse
- grestore
- } def
- /table [lacouleurdepart lacouleurarrivee] def
- } {
- /A {a0 i a1 a0 sub mul n 1 sub div add} def
- /B {1} def
- /C {1} def
- /D {} def
- /espacedecouleurs (sethsbcolor) def
- } ifelse
- } if
-
- table length 4 eq {
- /a0 table 0 get def
- /a1 table 1 get def
- /A {a0 i a1 a0 sub mul n 1 sub div add} def
- /B table 2 get def
- /C table 3 get def
- /D {} def
- /espacedecouleurs (sethsbcolor) def
- } if
-
- table length 6 eq {
- /a0 table 0 get def
- /b0 table 1 get def
- /c0 table 2 get def
- /a1 table 3 get def
- /b1 table 4 get def
- /c1 table 5 get def
- /A {a0 i a1 a0 sub mul n 1 sub div add} def
- /B {b0 i b1 b0 sub mul n 1 sub div add} def
- /C {c0 i c1 c0 sub mul n 1 sub div add} def
- /D {} def
- /espacedecouleurs (setrgbcolor) def
- } if
-
- table length 7 eq {
- /a0 table 0 get def
- /b0 table 1 get def
- /c0 table 2 get def
- /a1 table 3 get def
- /b1 table 4 get def
- /c1 table 5 get def
- /A {a0 i a1 a0 sub mul n 1 sub div add} def
- /B {b0 i b1 b0 sub mul n 1 sub div add} def
- /C {c0 i c1 c0 sub mul n 1 sub div add} def
- /D {} def
- /espacedecouleurs (sethsbcolor) def
- } if
-
- table length 8 eq {
- /a0 table 0 get def
- /b0 table 1 get def
- /c0 table 2 get def
- /d0 table 3 get def
- /a1 table 4 get def
- /b1 table 5 get def
- /c1 table 6 get def
- /d1 table 7 get def
- /A {a0 i a1 a0 sub mul n 1 sub div add} def
- /B {b0 i b1 b0 sub mul n 1 sub div add} def
- /C {c0 i c1 c0 sub mul n 1 sub div add} def
- /D {d0 i d1 d0 sub mul n 1 sub div add} def
- /espacedecouleurs (setcmykcolor) def
- } if
-
- n1 1 n2 {
- /i exch def
- solid i
- [A B C D] espacedecouleurs astr2str
- solidputfcolor
- } for
-
-end
-} def
-
-%%%%% ### solidrmface ###
-%% syntaxe : solid i solidrmface -> -
-/solidrmface {
-5 dict begin
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidrmface) ==
- quit
- } if
- %% on enleve la face
- /F solid solidgetfaces def
- F length 1 sub i lt {
- (Error : indice trop grand dans solidrmface) ==
- quit
- } if
- [
- 0 1 F length 1 sub {
- /j exch def
- i j ne {
- F j get
- } if
- } for
- ]
- /NF exch def
- solid NF solidputfaces
- %% on enleve la couleur correspondante
- /FC solid solidgetfcolors def
- [
- 0 1 FC length 1 sub {
- /j exch def
- i j ne {
- FC j get
- } if
- } for
- ]
- /NFC exch def
- solid NFC solidputfcolors
- %% on ajuste la table inout
- /IO solid solidgetinouttable def
- solid i solidisoutface {
- IO 1 IO 1 get 1 sub put
- solid solidwithinfaces {
- IO 2 IO 2 get 1 sub put
- IO 3 IO 3 get 1 sub put
- } if
- } if
- solid i solidisinface {
- IO 1 IO 1 get 1 sub put
- IO 2 IO 2 get 1 sub put
- IO 3 IO 3 get 1 sub put
- } if
- solid IO solidputinouttable
-end
-} def
-
-%% syntaxe : solid table solidrmfaces --> -
-/solidrmfaces {
-2 dict begin
- /table exch bubblesort reverse def
- /solid exch def
- table {solid exch solidrmface} apply
-end
-} def
-
-%%%%% ### videsolid ###
-%% syntaxe : solid videsolid -> -
-/videsolid {
-5 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans videsolid) ==
- quit
- } if
- solid solidwithinfaces not {
- /IO solid solidgetinouttable def
- /FE solid solidgetfaces def
- /n FE length def
- IO 2 n put
- IO 3 2 n mul 1 sub put
- %% on inverse chaque face
- /FI FE {reverse} apply def
- solid FE FI append solidputfaces
- %% et on rajoute autant de couleurs vides que de faces
- /FEC solid solidgetfcolors def
- /FIC [FI length {()} repeat] def
- solid FEC FIC append solidputfcolors
- solid IO solidputinouttable
- } if
-end
-} def
-
-%%%%% ### solidnumfaces ###
-%% syntaxe : solid array solidnumfaces
-%% syntaxe : solid array bool solidnumfaces
-%% array, le tableau des indices des faces a numeroter, est optionnel
-%% si bool=true, on ne numerote que les faces visibles
-/solidnumfaces {
-5 dict begin
- dup isbool {
- /bool exch def
- } {
- /bool true def
- } ifelse
- setTimes
- dup issolid not {
- %% on a un argument
- /option exch def
- } if
- /sol exch def
- /n sol solidnombrefaces def
- currentdict /option known not {
- /option [0 1 n 1 sub {} for] def
- } if
-
- 0 1 option length 1 sub {
- /i exch def
- /j option i get def
- j ( ) cvs sol j bool cctextp3d
- } for
-end
-} def
-
-%%%%% ### creusesolid ###
-%% syntaxe : solid creusesolid -> -
-/creusesolid {
-5 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans creusesolid) ==
- quit
- } if
- %% on enleve le fond et le chapeau
- solid 1 solidrmface
- solid 0 solidrmface
- %% on inverse chaque face
- solid videsolid
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% dessin des solides %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### solidisinface ###
-%% syntaxe : solid i solidisinface --> bool
-%% true si i est l indice d une face interne, false sinon
-/solidisinface {
-4 dict begin
- /i exch def
- solidgetinouttable /IO exch def
- /n1 IO 2 get def
- /n2 IO 3 get def
- n1 i le
- i n2 le and
-end
-} def
-
-%%%%% ### solidisoutface ###
-%% syntaxe : solid i solidisoutface --> bool
-%% true si i est l indice d une face externe, false sinon
-/solidisoutface {
-4 dict begin
- /i exch def
- solidgetinouttable /IO exch def
- /n1 IO 0 get def
- /n2 IO 1 get def
- n1 i le
- i n2 le and
-end
-} def
-
-%%%%% ### planvisible ###
-%% syntaxe : A k planvisible? --> true si le plan est visible
-/planvisible? {
-4 dict begin
- /normale_plan defpoint3d
- /origine defpoint3d
- /ligne_de_vue {
- origine
- GetCamPos
- vecteur3d
- } def
- ligne_de_vue normale_plan scalprod3d 0 gt
-end
-} def
-
-%%%%% ### drawsolid ###
-%% syntaxe : solid i solidfacevisible? --> true si la face est visible
-/solidfacevisible? {
-4 dict begin
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans solidgetsommetface) ==
- quit
- } if
- solid i solidgetface length 2 le {
- true
- } {
- /ligne_de_vue {
- solid i solidcentreface
- GetCamPos
- vecteur3d
- } def
-
- /normale_face {
- solid i solidnormaleface
- } def
- ligne_de_vue normale_face scalprod3d 0 gt
- } ifelse
-end
-} def
-
-%% syntaxe : solid i affectecouleursolid_facei --> si la couleur de
-%% la face i est definie, affecte fillstyle a cette couleur
-/affectecouleursolid_facei {
-3 dict begin
- /i exch def
- /solid exch def
- solid solidgetfcolors /FC exch def
- FC length 1 sub i ge {
- FC i get length 1 ge {
- /fillstyle FC i get ( fill) append cvx
- true
- } {
- false
- } ifelse
- } {
- false
- } ifelse
-end
-{def} if
-} def
-
-%% syntaxe : A solid i dessinefacecachee
-/dessinefacecachee {
-6 dict begin
- /i exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans dessinefacecachee) ==
- quit
- } if
- /A exch def
-
- /F solid solidgetfaces def
- /S solid solidgetpointstable def
-
- solid i solidfacevisible? not {
- %% face cachee => on prend chacune des aretes de la face et on
- %% regarde si elle est deja dessinee.
- 4 dict begin
- /n F i get length def %% nb de sommets de la face
- 0 1 n 1 sub {
- /k exch def
- /k1 F i k get_ij def %% indice sommet1
- /k2 F i k 1 add n mod get_ij def %% indice sommet2
- A k1 k2 get_ij not {
- gsave
- currentlinewidth .5 mul setlinewidth
- pointilles
- [S k1 getp3d
- S k2 getp3d] ligne3d
- A k1 k2 true put_ij
- A k2 k1 true put_ij
- grestore
- } if
- } for
- end
- } if
-end
-} def
-
-%% syntaxe : A solid i dessinefacevisible
-/dessinefacevisible {
-7 dict begin
- /i exch def
- /solid exch def
- /A exch def
- solid issolid not {
- (Error : mauvais type d argument dans dessinefacevisible) ==
- quit
- } if
- /F solid solidgetfaces def
- /S solid solidgetpointstable def
-
- solid i solidfacevisible? {
- /n F i get length def %% nb de sommets de la face
-
- startest {
- %% choix de la couleur
- /lightcolor where {
- pop
- /coeff
- lightintensity
- solid i solidnormaleface normalize3d
- solid i solidcentreface lightsrc vecteur3d normalize3d
- scalprod3d mul
- 0 max 1 min
- def
- /fillstyle {
- lightcolor {coeff mul} apply setcolor fill
- } def
- solidgrid not {
- lightcolor {coeff mul} apply setcolor
- } if
- } {
- /lightsrc where {
- pop
- /coeff
- lightintensity
- solid i solidnormaleface normalize3d
- solid i solidcentreface lightsrc vecteur3d normalize3d
- scalprod3d mul
- 0 max 1 min
- def
- /lacouleur [
- gsave
- solid solidgetfcolors i get cvx exec currentrgbcolor
- grestore
- ] def
- /fillstyle {
- lacouleur {coeff mul} apply setcolor fill
- } def
- solidgrid not {
- lacouleur {coeff mul} apply setcolor
- } if
- } {
- % solid F i get length affectecouleursolid_ncotes
- solid i affectecouleursolid_facei
- } ifelse
-
- } ifelse
- } if
-
- /face_a_dessiner [ %% face visible : F [i]
- 0 1 n 1 sub {
- /j exch def
- solid j i solidgetsommetface
- } for
- ] def
- face_a_dessiner polygone3d
- /lignedeniveau [] def
-
- %% trace de la ligne de niveau
- tracelignedeniveau? {
- gsave
- linewidthlignedeniveau setlinewidth
- couleurlignedeniveau
- 0 1 n 1 sub {
- /j exch def
- face_a_dessiner j getp3d
- face_a_dessiner j 1 add n mod getp3d
- hauteurlignedeniveau segment_inter_planz {
- 1 dict begin
- /table exch def
- /lignedeniveau [
- lignedeniveau aload pop
- table 0 getp3d
- table length 4 ge {
- table 1 getp3d
- } if
- ] store
- end
- } if
- } for
- lignedeniveau length 4 ge
- {lignedeniveau ligne3d}
- if
- grestore
- } if
-
- %% on marque les aretes
- 0 1 n 1 sub {
- /j exch def
- /k1 F i j get_ij def %% indice sommet1
- /k2 F i j 1 add n mod get_ij def %% indice sommet2
- A k1 k2 true put_ij
- A k2 k1 true put_ij
- } for
- } if
-end
-} def
-
-/drawsolid* {
-1 dict begin
- /startest {true} def
- drawsolid
-end
-} def
-
-/peintrealgorithme false def
-
-/drawsolid** {
-2 dict begin
- /aretescachees false def
- /peintrealgorithme true def
- drawsolid*
-end
-} def
-
-%% syntaxe : solid drawsolid
-/drawsolid {
-7 dict begin
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans drawsolid) ==
- quit
- } if
- solid nullsolid not {
- solid solidgetfaces
- /F exch def
- solid solidgetpointstable
- /S exch def
- /n S length 3 idiv def
- %% tableau des aretes
- /A [
- n {
- [n {false} repeat]
- } repeat
- ] def
-
- peintrealgorithme {
- %% tri des indices des faces par distance decroissante
- [
- 0 1 F length 1 sub {
- /i exch def
- solid i solidcentreface
- GetCamPos
- distance3d
- } for
- ] doublequicksort pop reverse
- } {
- [
- 0 1 F length 1 sub {
- } for
- ]
- } ifelse
- /ordre exch def
-
- 0 1 F length 1 sub {
- /k exch def
- /i ordre k get def
- gsave
- A solid i dessinefacevisible
- grestore
- } for
- aretescachees {
- 0 1 F length 1 sub {
- /k exch def
- /i ordre k get def
- A solid i dessinefacecachee
- } for
- } if
-%% %% si on veut repasser les traits des faces visibles
-%% 0 1 F length 1 sub {
-%% /k exch def
-%% /i ordre k get def
-%% gsave
-%% 1 dict begin
-%% /startest false def
-%% A solid i dessinefacevisible
-%% end
-%% grestore
-%% } for
- } if
-end
-} def
-
-%%%%% ### segment_inter_planz ###
-%% syntaxe : A B k segment_inter_planz --> array true ou false
-/segment_inter_planz {
-4 dict begin
- /k exch def
- /B defpoint3d
- /A defpoint3d
- A /zA exch def pop pop
- B /zB exch def pop pop
- zA k sub zB k sub mul dup 0 gt {
- %% pas d intersection
- pop
- false
- } {
- 0 eq {
- %% intersection en A ou en B
- [
- zA k eq {A} if
- zB k eq {B} if
- ] true
- } {
- %% intersection entre A et B
- [
- A B vecteur3d
- k zA sub zB zA sub div mulv3d
- A addv3d
- ] true
- } ifelse
- } ifelse
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% operations sur des solides particuliers %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### tronquecube ###
-%% syntaxe : solid n tronque_cube --> solid (tronque)
-/tronque_cube {
-6 dict begin
- /d exch def
- /solid exch def
- solid issolid not {
- (Error : mauvais type d argument dans tronque_cube) ==
- quit
- } if
- solid solidgetpointstable
- /S exch def
- /co [
- 3 4 1 % 1 3 4 % voisins du sommet 0
- 0 5 2 % 0 2 5 % de 1
- 1 6 3 % 1 3 6 % de 2
- 2 7 0 % 0 2 7 % de 3
- 7 0 5 % 0 5 7 % de 4
- 4 1 6 % 1 4 6 % de 5
- 5 2 7 % 2 5 7 % de 6
- 6 3 4 % 3 4 6 % de 7
- ] def
-
- /dd {d 1 sub} bind def
- /i 0 def
- /les_sommets [ % les coordonnees des sommets du cube tronque
- 0 3 21 {
- /j exch def
- %% sommet d indice i = A1
- solid i solidgetsommet /A1 defpoint3d
-
- %% k = indice du sommet voisin no 1
- co j get /k exch def
- %% sommet d indice k = A2
- solid k solidgetsommet /A2 defpoint3d
- %% barycentre {(A1, d) (A2, 1)}
- A1 d A2 1 barycentre3d
-
- %% k = indice du sommet voisin no 2
- co j 1 add get /k exch def
- %% sommet d indice k = A2
- solid k solidgetsommet /A2 defpoint3d
- %% barycentre {(A1, d) (A2, 1)}
- A1 d A2 1 barycentre3d
-
- %% k = indice du sommet voisin no 2
- co j 2 add get /k exch def
- %% sommet d indice k = A2
- solid k solidgetsommet /A2 defpoint3d
- %% barycentre {(A1, d) (A2, 1)}
- A1 d A2 1 barycentre3d
-
- /i i 1 add store
- } for
- ] def
-
- /les_faces [
- [11 10 22 23 12 13 1 0]
- [2 1 13 14 15 16 4 3]
- [8 7 19 20 21 22 10 9]
- [14 12 23 21 20 18 17 15]
- [3 5 6 8 9 11 0 2]
- [5 4 16 17 18 19 7 6]
- [0 1 2]
- [3 4 5]
- [6 7 8]
- [9 10 11]
- [12 14 13]
- [15 17 16]
- [18 20 19]
- [21 23 22]
- ] def
-
- solid les_sommets solidputpointstable
- solid les_faces solidputfaces
- solid dup solidgetfcolors [8 {()} repeat] append solidputfcolors
- solid
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% quelques solides precalcules %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%% ### newface ###
-%% syntaxe : array newmonoface -> solid
-%% ou array = tableau de points 2d
-/newmonoface {
-4 dict begin
- /table exch def
- /n table length 2 idiv def
- /S table {0} papply def
-
- /F [
- [0 1 n 1 sub {} for]
- ] def
- S F generesolid
-end
-} def
-
-%% syntaxe : array newbiface -> solid
-%% ou array = tableau de points 2d
-/newbiface {
- newmonoface
- dup videsolid
-} def
-
-%%%%% ### newpolreg ###
-%% syntaxe : r n newpolreg --> solid
-/newpolreg {
-5 dict begin
- /n exch def
- /r exch def
- /S [
- 0 360 n div 360 360 n div sub {
- /theta exch def
- theta cos r mul
- theta sin r mul
- 0
- } for
- ] def
- /F [
- [0 1 n 1 sub {} for]
- ] def
-
- S F generesolid
- dup videsolid
-end
-} def
-
-%%%%% ### newgrille ###
-%% syntaxe : xmin xmax ymin ymax [dx dy] newgrille -> solid
-%% syntaxe : xmin xmax ymin ymax [nx ny] newgrille -> solid
-%% syntaxe : xmin xmax ymin ymax {mode} newgrille -> solid
-%% syntaxe : xmin xmax ymin ymax newgrille -> solid
-/newgrille {
-10 dict begin
- [[/nx /ny] [1 1] [1. 1.] [1. 1.] [1. 1.] [.5 .5]] gestionsolidmode
- %% ny nb d etages en y
- %% nx nb d etages en x
- /biface false def
- [nx ny] {0} newsurfaceparametree
-end
-} def
-
-/newsurface {
- true newsurfaceparametree
-} def
-
-/biface true def
-
-/newsurfaceparametree {
-10 dict begin
- dup isbool {
- pop /surfz true def
- } {
- /surfz false def
- } ifelse
- /f_surface exch def
- [[/nx /ny] [2 2] [4 4] [1. 1.] [1. 1.] [.25 .25]] gestionsolidmode
- %% ny nb d etages en y
- %% nx nb d etages en x
- /ymax exch def
- /ymin exch def
- /xmax exch def
- /xmin exch def
-
- nx isinteger not {
- %% alors nx est un dx
- /nx xmax xmin sub nx div cvi store
- } if
- ny isinteger not {
- %% alors ny est un dy
- /ny ymax ymin sub ny div cvi store
- } if
- /dy ymax ymin sub ny div def %% le pas sur y
- /dx xmax xmin sub nx div def %% le pas sur x
-
- /S [
- 0 1 nx {
- /i exch def
- 0 1 ny {
- /j exch def
- /u xmin i dx mul add def
- /v ymin j dy mul add def
- u v
- surfz {2 copy} if
- f_surface
- pstrickactionR3
- } for
- } for
- ] def
-
- /F [
- 0 1 nx 1 sub {
- /i exch def
- 0 1 ny 1 sub {
- /j exch def
- [
- j 1 add i ny 1 add mul add
- j i ny 1 add mul add
- j ny 1 add add i ny 1 add mul add
- j ny 2 add add i ny 1 add mul add
- ]
- } for
- } for
-%% 0 1 0 {%nx 1 sub {
-%% /i exch def
-%% 0 1 0 {%ny 2 sub {
-%% /j exch def
-%% [
-%% j 1 add %% i ny mul add
-%% j %% i ny mul add
-%% ny 1 add j add %% i ny mul add
-%% ny 2 add j add %% i ny mul add
-%% ]
-%% } for
-%% } for
- ] def
- S F generesolid
- biface {dup videsolid} if
-end
-} def
-
-%%%%% ### newgrillecirculaire ###
-%% syntaxe : r option newgrillecirculaire -> solid
-/newgrillecirculaire {
-6 dict begin
- [[/K /N] [6 6] [6 8] [10 8] [16 12] [16 36]] gestionsolidmode
-
- %% N = nb de meridiens (diviseur de 360 = 2^4 * 3^2 * 5)
- %% K = nb d horizontales (diviseur de 160 = 2^5 * 5)
-
- /r exch def
- /F [
- %% 1er etage
- 1 1 N {
- /i exch def
- [0 i i N mod 1 add]
- } for
- %% etages suivants
- 0 1 K 2 sub {
- /j exch def
- 1 1 N {
- /i exch def
- [i j N mul add
- i N add j N mul add
- i N mod N add 1 add j N mul add
- i N mod 1 add j N mul add]
- } for
- } for
- ] def
-
- %% tableau des sommets
- /S [
- 0 0 0
- 1 1 K {
- /j exch def
- 1 1 N {
- /i exch def
- /theta i 360 mul N div def
- theta cos r j mul K div mul
- theta sin r j mul K div mul
- 2 copy exch atan 90 div
- } for
- } for
- ] def
-
- S F generesolid
-end
-} def
-
-%%%%% ### newruban ###
-%% syntaxe : array h u [n] newruban -> solid d axe (O, u), de maillage vertical n
-%% syntaxe : array h u newruban -> solid d axe (O, u),
-%% syntaxe : array h newruban -> solid d axe (O, k),
-%% ou array tableau de points 2d
-/newruban {
-7 dict begin
- %% N = nb d etages
- [[/N] [1] [1] [1] [3] [4]] gestionsolidmode
- 2 copy pop isarray {
- /u {0 0 1} def
- } {
- /u defpoint3d
- } ifelse
- u 0 eq {
- (Error : 3eme composante nulle dans le vecteur pour newruban) ==
- quit
- } if
- pop pop
- /h exch def
- /table exch def
- %% n = indice du dernier point
- /n table length 2 idiv 1 sub def
- %% vecteur de translation
- u
- h u norme3d div
- mulv3d /v defpoint3d
-
- %% tableau des sommets
- /S [
- 0 1 N {
- /j exch def
- 0 1 n {
- /i exch def
- table i getp
- 0
- v N j sub N div mulv addv3d
- } for
- } for
- ] def
-
- /F [
- %% faces etage
- 1 1 N {
- /j exch def
- 1 1 n {
- /i exch def
- [i j 1 sub n 1 add mul add
- i 1 sub j 1 sub n 1 add mul add
- n 1 add i add 1 sub j 1 sub n 1 add mul add
- n 1 add i add j 1 sub n 1 add mul add]
- } for
- } for
- ] def
-
- S F generesolid
- dup videsolid
-end
-} def
-
-%%%%% ### newicosaedre ###
-/newicosaedre {
-3 dict begin
- /a exch def
- /S [
- 0.8944271 0 0.4472137
- 0.2763932 0.8506507 0.4472137
- -0.7236067 0.5257311 0.4472137
- -0.7236067 -0.5257311 0.4472137
- 0.2763932 -0.8506507 0.4472137
- 0 0 1
- 0 0 -1
- -0.8944271 0 -0.4472137
- -0.2763932 -0.8506507 -0.4472137
- 0.7236067 -0.5257311 -0.4472137
- 0.7236067 0.5257311 -0.4472137
- -0.2763932 0.8506507 -0.4472137
- ] {a mulv3d} papply3d def
-
- /F [
- [0 1 5] %% 1 2 6 ]
- [1 2 5] %% 2 3 6 ]
- [2 3 5] %% 3 4 6 ]
- [3 4 5] %% 4 5 6 ]
- [4 0 5] %% 5 1 6 ]
- [9 0 4] %% 10 1 5 ]
- [0 9 10] %% 1 10 11]
- [10 1 0] %% 11 2 1 ]
- [1 10 11] %% 2 11 12]
- [11 2 1] %% 12 3 2 ]
- [2 11 7] %% 3 12 8 ]
- [2 7 3] %% 3 8 4 ]
- [3 7 8] %% 4 8 9 ]
- [3 8 4] %% 4 9 5 ]
- [4 8 9] %% 5 9 10 ]
- [6 7 11] %% 7 8 12 ]
- [6 8 7] %% 7 9 8 ]
- [6 9 8] %% 7 10 9 ]
- [6 10 9] %% 7 11 10]
- [6 11 10] %% 7 12 11]
- ] def
-
- S F generesolid
-end
-} def
-
-%%%%% ### newdodecaedre ###
-/newdodecaedre {
-3 dict begin
- /a exch def
- /S [
- 0 0.607062 0.7946545
- -0.5773503 0.1875925 0.7946545
- -0.3568221 -0.4911235 0.7946545
- 0.3568221 -0.4911235 0.7946545
- 0.5773503 0.1875925 0.7946545
- 0 0.982247 0.1875925
- -0.9341724 0.303531 0.1875925
- -0.5773503 -0.7946645 0.1875925
- 0.5773503 -0.7946645 0.1875925
- 0.9341724 0.303531 0.1875925
- 0 -0.982247 -0.1875925
- 0.9341724 -0.303531 -0.1875925
- 0.5773503 0.7946545 -0.1875925
- -0.5773503 0.7946545 -0.1875925
- -0.9341724 -0.303531 -0.1875925
- -0.5773503 -0.1875925 -0.7946545
- -0.3568221 0.4911235 -0.7946545
- 0.3568221 0.4911235 -0.7946545
- 0.5773503 -0.1875925 -0.7946545
- 0 -0.607062 -0.7946545
- ] {a mulv3d} papply3d def
-
- /F [
- [0 1 2 3 4]
- [4 3 8 11 9]
- [4 9 12 5 0]
- [0 5 13 6 1]
- [1 6 14 7 2]
- [2 7 10 8 3]
- [10 19 18 11 8]
- [11 18 17 12 9]
- [12 17 16 13 5]
- [13 16 15 14 6]
- [14 15 19 10 7]
- [15 16 17 18 19]
- ] def
- S F generesolid
-end
-} def
-
-%%%%% ### newoctaedre ###
-/newoctaedre {
-3 dict begin
- /a exch def
- %%Sommets
- /S [
- 0 0 1
- 1 0 0
- 0 1 0
- -1 0 0
- 0 -1 0
- 0 0 -1
- ] {a mulv3d} papply3d def
-
- /F [
- [0 4 1]
- [1 2 0]
- [0 2 3]
- [3 4 0]
- [1 5 2]
- [2 5 3]
- [3 5 4]
- [4 5 1]
- ] def
-
- S F generesolid
-end
-} def
-
-%%%%% ### newtetraedre ###
-/newtetraedre {
-3 dict begin
- /r exch def
- %%Tetraedre
- /S [
- 0 0 1
- -0.4714045 -0.8164965 -1 3 div
- 0.942809 0 -1 3 div
- -0.4714045 0.8164965 -1 3 div
- ] {r mulv3d} papply3d def
-
- /F [
- [0 1 2]
- [0 2 3]
- [0 3 1]
- [1 3 2]
- ] def
-
- S F generesolid
-end
-} def
-
-%%%%% ### newcube ###
-/newcube {
-3 dict begin
- [[/n] [1] [1] [1] [3] [4]] gestionsolidmode
- /a exch 2 div def
-
- n 1 le {
- /F [
- [0 1 2 3]
- [0 4 5 1]
- [1 5 6 2]
- [2 6 7 3]
- [0 3 7 4]
- [4 7 6 5]
- ] def
-
- %% tableau des sommets
- /S [
- 1 1 1 %% 0
- -1 1 1 %% 1
- -1 -1 1 %% 2
- 1 -1 1 %% 3
- 1 1 -1 %% 4
- -1 1 -1 %% 5
- -1 -1 -1 %% 6
- 1 -1 -1 %% 7
- ] {a mulv3d} papply3d def
- S F generesolid
- } {
- /dl 2 n div def
- /N n dup mul n add 4 mul def
- /n1 n 1 sub dup mul def %% nb sommets centre d une face
-
- %% tableau des sommets
- /S1 [
- 0 1 n 1 sub {
- /j exch def
- 0 1 n {
- /i exch def
- -1 i dl mul add
- -1 j dl mul add
- 1
- } for
- } for
- ] def
-
- /S2 S1 {-90 0 0 rotateOpoint3d} papply3d def
- /S3 S2 {-90 0 0 rotateOpoint3d} papply3d def
- /S4 S3 {-90 0 0 rotateOpoint3d} papply3d def
-
- /S5 [
- 1 1 n 1 sub {
- /j exch def
- 1 1 n 1 sub {
- /i exch def
- 1
- -1 i dl mul add
- -1 j dl mul add
- } for
- } for
- ] def
-
- /S6 [
- 1 1 n 1 sub {
- /j exch def
- 1 1 n 1 sub {
- /i exch def
- -1
- -1 i dl mul add
- -1 j dl mul add
- } for
- } for
- ] def
-
- %% tableau des faces
- /F1 [
- 0 1 n 1 sub {
- /j exch def
- 0 1 n 1 sub {
- /i exch def
- [
- i n 1 add j mul add
- dup 1 add
- dup n 1 add add
- dup 1 sub
- ]
- } for
- } for
- ] def
-
- %% syntaxe : i sommettourgauche --> l indice du i-eme sommet du tour
- %% de la face gauche (en commencant par l indice 0). ATTENTION :
- %% utilise la variable globale n = nb d etages
- /sommettourgauche {
- 1 dict begin
- /i exch def
- i 4 n mul ge {
- i
- (Error: indice trop grand dans sommettourgauche) ==
- exit
- } if
- n n 1 add i mul add
- end
- } def
-
- %% syntaxe : i sommetcentregauche --> l indice du i-eme sommet du centre
- %% de la face gauche (en commencant par l indice 0). ATTENTION :
- %% utilise les variables globales n = nb d etages, et N = nb sommets
- %% des 4 1eres faces
- /sommetcentregauche {
- 1 dict begin
- /i exch def
- i n 1 sub dup mul ge {
- i
- (Error: indice trop grand dans sommetcentregauche) ==
- exit
- } if
- N i add
- end
- } def
-
- /F5 [
- %%%%% la face gauche %%%%%
- %% le coin superieur gauche
- [
- 1 sommettourgauche
- 0 sommettourgauche
- n 4 mul 1 sub sommettourgauche
- n1 n 1 sub sub sommetcentregauche
- ]
-
- %% la bande superieure (i from 1 to n-2)
- 1 1 n 2 sub {
- /i exch def
- [
- i 1 add sommettourgauche
- i sommettourgauche
- n1 n sub i add sommetcentregauche
- n1 n sub i 1 add add sommetcentregauche
- ]
- } for
-
- %% le coin superieur droit
- [
- n sommettourgauche
- n 1 sub sommettourgauche
- n1 1 sub sommetcentregauche
- n 1 add sommettourgauche
- ]
-
- %% la descente gauche
- %% j from 1 to n-2
- 1 1 n 2 sub {
- /j exch def
- [
- n1 n 1 sub j mul sub sommetcentregauche
- n 4 mul j sub sommettourgauche
- n 4 mul j 1 add sub sommettourgauche
- n1 n 1 sub j 1 add mul sub sommetcentregauche
- ]
- } for
-
- %% les bandes centrales (j from 1 to n-2 et i from 1 to n-2)
- 1 1 n 2 sub {
- /j exch def
- 1 1 n 2 sub {
- /i exch def
- [
- n1 i n 1 sub j 1 sub mul add sub sommetcentregauche
- n1 i 1 add n 1 sub j 1 sub mul add sub sommetcentregauche
- n1 i 1 add n 1 sub j mul add sub sommetcentregauche
- n1 i n 1 sub j mul add sub sommetcentregauche
- ]
- } for
- } for
-
- %% la descente droite
- 1 1 n 2 sub {
- /j exch def
- [
- n j add sommettourgauche
- n1 1 sub j 1 sub n 1 sub mul sub sommetcentregauche
- n1 1 sub j n 1 sub mul sub sommetcentregauche
- n j 1 add add sommettourgauche
- ]
- } for
-
- %% le coin inferieur gauche
- [
- 0 sommetcentregauche
- n 3 mul 1 add sommettourgauche
- n 3 mul sommettourgauche
- n 3 mul 1 sub sommettourgauche
- ]
-
- %% la bande inferieure (i from 1 to n-2)
- 1 1 n 2 sub {
- /i exch def
- [
- i sommetcentregauche
- i 1 sub sommetcentregauche
- n 3 mul i sub sommettourgauche
- n 3 mul i sub 1 sub sommettourgauche
- ]
- } for
-
- %% le coin inferieur droit
- [
- n 2 mul 1 sub sommettourgauche
- n 2 sub sommetcentregauche
- n 2 mul 1 add sommettourgauche
- n 2 mul sommettourgauche
- ]
- ] def
-
- %% syntaxe : i sommettourdroit --> l indice du i-eme sommet du tour
- %% de la face droit (en commencant par l indice 0). ATTENTION :
- %% utilise la variable globale n = nb d etages
- /sommettourdroit {
- 1 dict begin
- /i exch def
- i 4 n mul ge {
- i
- (Error: indice trop grand dans sommettourdroit) ==
- exit
- } if
- n 1 add i mul
- end
- } def
-
- %% syntaxe : i sommetcentredroit --> l indice du i-eme sommet du centre
- %% de la face droit (en commencant par l indice 0). ATTENTION :
- %% utilise les variables globales n = nb d etages, et N = nb sommets
- %% des 4 1eres faces
- /sommetcentredroit {
- 1 dict begin
- /i exch def
- i n 1 sub dup mul ge {
- i
- (Error: indice trop grand dans sommetcentredroit) ==
- exit
- } if
- N n1 add i add
- end
- } def
-
- /F6 [
- %% coin superieur droit
- [
- 0 sommettourdroit
- 1 sommettourdroit
- n1 n 1 sub sub sommetcentredroit
- 4 n mul 1 sub sommettourdroit
- ]
- %% coin superieur gauche
- [
- n 1 sub sommettourdroit
- n sommettourdroit
- n 1 add sommettourdroit
- n1 1 sub sommetcentredroit
- ]
- %% coin inferieur gauche
- [
- n 2 sub sommetcentredroit
- 2 n mul 1 sub sommettourdroit
- 2 n mul sommettourdroit
- 2 n mul 1 add sommettourdroit
- ]
- %% coin inferieur droit
- [
- 3 n mul 1 add sommettourdroit
- 0 sommetcentredroit
- 3 n mul 1 sub sommettourdroit
- 3 n mul sommettourdroit
- ]
- %% bande superieure
- 1 1 n 2 sub {
- /i exch def
- [
- i sommettourdroit
- i 1 add sommettourdroit
- n 1 sub n 2 sub mul i add sommetcentredroit
- n 1 sub n 2 sub mul i 1 sub add sommetcentredroit
- ]
- } for
- %% bande inferieure
- 1 1 n 2 sub {
- /i exch def
- [
- i 1 sub sommetcentredroit
- i sommetcentredroit
- 3 n mul 1 sub i sub sommettourdroit
- 3 n mul i sub sommettourdroit
- ]
- } for
- %% descente gauche
- 1 1 n 2 sub {
- /i exch def
- [
- n1 1 sub i 1 sub n 1 sub mul sub sommetcentredroit
- n i add sommettourdroit
- n i 1 add add sommettourdroit
- n1 1 sub i n 1 sub mul sub sommetcentredroit
- ]
- } for
- %% descente droite
- 1 1 n 2 sub {
- /i exch def
- [
- 4 n mul i sub sommettourdroit
- n 1 sub n 1 sub i sub mul sommetcentredroit
- n 1 sub n 2 sub i sub mul sommetcentredroit
- 4 n mul i sub 1 sub sommettourdroit
- ]
- } for
- %% bandes interieures
- 1 1 n 2 sub {
- /j exch def
- 1 1 n 2 sub {
- /i exch def
- [
- n 1 sub j mul i 1 sub add sommetcentredroit
- n 1 sub j mul i add sommetcentredroit
- n 1 sub j 1 sub mul i add sommetcentredroit
- n 1 sub j 1 sub mul i 1 sub add sommetcentredroit
- ]
- } for
- } for
-
- ] def
-
- /F2 F1 {{n dup mul n add add} apply} apply def
- /F3 F2 {{n dup mul n add add} apply} apply def
- /F4 F3 {{n dup mul n add add} apply} apply def
-
-
- S1 S2 append S3 append S4 append S5 append S6 append {a mulv3d} papply3d
- F1 F2 append F3 append F4 append {{N mod} apply} apply F5 append F6 append
- generesolid
- } ifelse
-end
-} def
-
-%%%%% ### newparallelepiped ###
-% 14 octobre 2006
-/newparallelepiped {
-2 dict begin
- /c exch 2 div def
- /b exch 2 div def
- /a exch 2 div def
- /F [
- [0 1 2 3]
- [0 4 5 1]
- [1 5 6 2]
- [2 6 7 3]
- [0 3 7 4]
- [4 7 6 5]
- ] def
-
- %% tableau des sommets
- /S [
- a b c %% 0
- a neg b c %% 1
- a neg b neg c %% 2
- a b neg c %% 3
- a b c neg %% 4
- a neg b c neg %% 5
- a neg b neg c neg %% 6
- a b neg c neg %% 7
- ] def
- S F generesolid
-} def
-
-%%%%% ### newcylindre ###
-%% syntaxe : z0 r0 z1 newcylindre -> solide
-/newcylindre {
- dup xcheck {
- 2 index exch
- } {
- dup isarray {
- 2 index exch
- } {
- 1 index
- } ifelse
- } ifelse
- newtronccone
-} def
-
-%% syntaxe : z0 r0 z1 newcylindrecreux -> solide
-/newcylindrecreux {
- newcylindre
- dup creusesolid
-} def
-
-%%%%% ### newtronccone ###
-%% syntaxe : z0 r0 z1 r1 newtronccone -> solid
-/newtronccone {
-11 dict begin
- [[/n /N] [1 6] [1 8] [1 10] [3 12] [5 18]] gestionsolidmode
-
- /r1 exch def
- /z1 exch def
- /r0 exch def
- /z0 exch def
- /dz z1 z0 sub n div def
- /dr r1 r0 sub n div def
-
- /FE [
- [0 1 N 1 sub {} for]
- [n 1 add N mul 1 sub -1 n N mul {} for]
-
- 0 1 n 1 sub {
- /k exch def
- k N mul 1 add 1 k 1 add N mul 1 sub {
- /i exch def
- [i i 1 sub N i add 1 sub N i add]
- } for
- [k N mul k 1 add N mul 1 sub k 2 add N mul 1 sub k 1 add N mul]
- } for
-
- ] def
-
- %% tableau des sommets
- /S [
- n -1 0 {
- /k exch def
- 0 1 N 1 sub {
- /i exch def
- 360 N idiv i mul cos r0 dr k mul add mul
- 360 N idiv i mul sin r0 dr k mul add mul
- z0 dz k mul add
- } for
- } for
- ] def
- S FE generesolid
-end
-} def
-
-%% syntaxe : z0 r0 z1 r1 newtroncconecreux -> solid
-/newtroncconecreux {
- newtronccone
- dup creusesolid
-} def
-
-%%%%% ### newcone ###
-%% syntaxe : z0 r0 z1 newcone -> solid
-/newcone {
-11 dict begin
- [ [/n /N] [1 6] [1 8] [1 10] [3 12] [5 18] ] gestionsolidmode
-
- /z1 exch def
- /r0 exch def
- /z0 exch def
- /dz z1 z0 sub n div def
- /dr r0 n div def
-
- /F [
- %% la base
- [N 1 sub -1 0 {} for]
- %% le dernier etage
- n 1 sub N mul 1 add 1 n N mul 1 sub {
- /i exch def
- [i 1 sub i n N mul]
- } for
- [n N mul 1 sub n 1 sub N mul n N mul]
- %% les autres etages
- 0 1 n 2 sub {
- /j exch def
- 0 N j mul add 1 N N j mul add 2 sub {
- /i exch def
- [i i 1 add dup N add dup 1 sub]
- } for
- [N N j mul add 1 sub N j mul dup N add dup N add 1 sub]
- } for
- ] def
-
- %% tableau des sommets
- /S [
- %% etage no j (in [1; n])
- 0 1 n 1 sub {
- /j exch def
- 0 1 N 1 sub {
- /i exch def
- 360 N idiv i mul cos r0 dr j mul sub mul
- 360 N idiv i mul sin r0 dr j mul sub mul
- z0 dz j mul add
- } for
- } for
- 0 0 z1
- ] def
- S F generesolid
-end
-} def
-
-%% syntaxe : z0 r0 z1 newconecreux -> solid
-/newconecreux {
- newcone
- dup 0 solidrmface
- dup videsolid
-} def
-
-%%%%% ### newtore ###
-%% syntaxe : r R newtore -> solid
-/newtore {
-10 dict begin
- [[/n1 /n2] [4 5] [6 10] [8 12] [9 18] [18 36]] gestionsolidmode
- /n2 n2 3 max store
- /n1 n1 2 max store
- /R exch def
- /r exch def
- /S [
- 0 1 n1 1 sub {
- /i exch def
- 360 n1 div i mul cos r mul R add
- 360 n1 div i mul sin r mul
- } for
- ]
- def
- S [n2] newanneau
-end
-} def
-
-%%%%% ### newprisme ###
-/newprismedroit {
- [[/N] [1] [1] [1] [3] [6]] gestionsolidmode
- 0 0 1 [N] newprisme
-} def
-
-%% syntaxe : array N z0 z1 u newprisme -> solid d axe (O, u),
-%% ou array tableau de points 2d
-/newprisme {
-7 dict begin
- [[/N] [1] [1] [1] [3] [6]] gestionsolidmode
- dup 0 eq {
- (Error : 3eme composante nulle dans le vecteur pour newprisme) ==
- quit
- } if
- /u defpoint3d
- /z1 exch def
- /z0 exch def
- %% N = nb d etages
- /table exch def
- %% n = indice du dernier point
- /n table length 2 idiv 1 sub def
- %% vecteur de translation
- u
- z1 z0 sub u norme3d div
- mulv3d /v defpoint3d
-
- %% tableau des sommets
- /S [
- 0 1 N {
- /j exch def
- 0 1 n {
- /i exch def
- table i getp
- z0
- v N j sub N div mulv addv3d
- } for
- } for
- ] def
-
- /F [
- %% face superieure
- [0 1 n {} for]
- %% base
- [N 1 add n 1 add mul 1 sub -1 N n 1 add mul {} for]
- %% faces etage
- 1 1 N {
- /j exch def
- 1 1 n {
- /i exch def
- [i j 1 sub n 1 add mul add
- i 1 sub j 1 sub n 1 add mul add
- n 1 add i add 1 sub j 1 sub n 1 add mul add
- n 1 add i add j 1 sub n 1 add mul add]
- } for
- [0 j 1 sub n 1 add mul add
- n j 1 sub n 1 add mul add
- 2 n mul 1 add j 1 sub n 1 add mul add
- n 1 add j 1 sub n 1 add mul add]
- } for
- ] def
-
- S F generesolid
-end
-} def
-
-%%%%% ### newsphere ###
-%% syntaxe : r option newsphere -> solid
-/newsphere {
-2 dict begin
- [[/K /N] [6 6] [8 8] [10 12] [16 12] [16 36]] gestionsolidmode
- -90 90 [K N] newcalottesphere
-end
-} def
-
-%% syntaxe : r phi theta option newcalottesphere -> solid
-/newcalottesphere {
-6 dict begin
- [[/K /N] [6 6] [8 8] [10 12] [16 12] [16 36]] gestionsolidmode
-
- %% test de beta (ex-theta)
- dup 90 eq {
- /beta exch def
- /idebut 1 def
- } {
- /beta exch 80 min -80 max def
- /idebut 0 def
- } ifelse
- %% test de alpha (ex-phi)
- dup -90 eq {
- /alpha exch def
- } {
- /alpha exch beta min -80 max def
- } ifelse
- /r exch def
- beta 90 eq {
- alpha -90 eq {
- /ifin K def
- /db alpha beta sub K 1 add div def
- } {
- /ifin K def
- /db alpha beta sub K div def
- } ifelse
- } {
- alpha -90 eq {
- /ifin K 1 sub def
- /db alpha beta sub K div def
- } {
- /ifin K 1 sub def
- /db alpha beta sub K 1 sub div def
- } ifelse
- } ifelse
-
- %% nombre de sommets -2
- /nb N K mul def
-
- %% tableau des sommets
- /S [
- idebut 1 ifin {
- /j exch def
- /phi beta j db mul add def
- phi cos r mul /r_tmp exch def
- 0 1 N 1 sub {
- /i exch def
- 360 N idiv i mul cos r_tmp mul
- 360 N idiv i mul sin r_tmp mul
- phi sin r mul
- } for
- } for
- 0 0 r neg
- 0 0 r
- ] def
-
- /F [
- %% calotte inferieure
- alpha -90 eq {
- 1 1 N 1 sub {
- /i exch def
- [
- nb
- nb i sub
- nb i 1 add sub
- ]
- } for
- [nb nb N sub nb 1 sub]
- } {
- [nb 1 sub -1 nb N sub {} for ]
- } ifelse
-
- %% calotte superieure
- beta 90 eq {
- 0 1 N 1 sub {
- /i exch def
- [i i 1 add N mod N K mul 1 add]
- } for
- } {
- [0 1 N 1 sub {} for]
- } ifelse
-
- 1 1 K 1 sub {
- /j exch def
- [
- j N mul
- j N mul 1 add
- j 1 sub N mul 1 add
- j 1 sub N mul
- ]
- N 2 sub {dup {1 add} apply} repeat
- [
- j 1 add N mul 1 sub
- j N mul
- j 1 sub N mul
- j N mul 1 sub
- ]
- } for
- ] def
-
- S F generesolid
-end
-} def
-
-%% syntaxe : r phi theta option newcalottespherecreuse -> solid
-/newcalottespherecreuse {
-6 dict begin
- [[/K /N] [6 6] [8 8] [10 12] [16 12] [16 36]] gestionsolidmode
-
- %% test de beta (ex-theta)
- dup 90 eq {
- /beta exch def
- /idebut 1 def
- } {
- /beta exch 80 min -80 max def
- /idebut 0 def
- } ifelse
- %% test de alpha (ex-phi)
- dup -90 eq {
- /alpha exch def
- } {
- /alpha exch beta min -80 max def
- } ifelse
- /r exch def
- beta 90 eq {
- alpha -90 eq {
- /ifin K def
- /db alpha beta sub K 1 add div def
- } {
- /ifin K def
- /db alpha beta sub K div def
- } ifelse
- } {
- alpha -90 eq {
- /ifin K 1 sub def
- /db alpha beta sub K div def
- } {
- /ifin K 1 sub def
- /db alpha beta sub K 1 sub div def
- } ifelse
- } ifelse
-
- %% nombre de sommets -2
- /nb N K mul def
-
- %% tableau des sommets
- /S [
- idebut 1 ifin {
- /j exch def
- /phi beta j db mul add def
- phi cos r mul /r_tmp exch def
- 0 1 N 1 sub {
- /i exch def
- 360 N idiv i mul cos r_tmp mul
- 360 N idiv i mul sin r_tmp mul
- phi sin r mul
- } for
- } for
- 0 0 r neg
- 0 0 r
- ] def
-
- /F [
- %% calotte inferieure
- alpha -90 eq {
- 1 1 N 1 sub {
- /i exch def
- [
- nb
- nb i sub
- nb i 1 add sub
- ]
- } for
- [nb nb N sub nb 1 sub]
- } {
-% [nb 1 sub -1 nb N sub {} for ]
- } ifelse
-
- %% calotte superieure
- beta 90 eq {
- 0 1 N 1 sub {
- /i exch def
- [i i 1 add N mod N K mul 1 add]
- } for
- } {
-% [0 1 N 1 sub {} for]
- } ifelse
-
- 1 1 K 1 sub {
- /j exch def
- [
- j N mul
- j N mul 1 add
- j 1 sub N mul 1 add
- j 1 sub N mul
- ]
- N 2 sub {dup {1 add} apply} repeat
- [
- j 1 add N mul 1 sub
- j N mul
- j 1 sub N mul
- j N mul 1 sub
- ]
- } for
- ] def
-
- S F generesolid
- dup videsolid
-end
-} def
-
-%%%%% ### newanneau ###
-%% syntaxe : array n newanneau --> solid
-%% syntaxe : array {mode} newanneau --> solid
-%% ou array est un tableau de points de R^2 et n un nombre entier positif
-/newanneau {
-10 dict begin
- dup isnum {
- /n exch def
- [n]
- } if
- [[/n2] [6] [12] [24] [32] [36]] gestionsolidmode
- /n2 n2 3 max store
- %% on plonge la section dans R^3 par projection sur yOz
- /S1 exch {0 3 1 roll} papply def
- %% nombre de sommets
- /n1 S1 length 3 idiv def
-
- /S S1
- n2 {
- duparray
- {0 0 360 n2 div rotateOpoint3d} papply3d
- } repeat
- n2 {append} repeat
- def
-
- /F [
- 0 1 n2 1 sub {
- /j exch def
- n1 j mul 1 j 1 add n1 mul 2 sub {
- /i exch def
- [i 1 add i dup n1 add i n1 1 add add]
- } for
- [n1 j mul j 1 add n1 mul 1 sub j 2 add n1 mul 1 sub j 1 add n1 mul]
- } for
- ] def
-
- S F generesolid
-end
-} def
-
-%%%%% ### newvecteur ###
-%% syntaxe : x y z newvecteur
-/newvecteur {
-4 dict begin
- /A defpoint3d
- %%Sommets
- /S [0 0 0 A] def
- /F [
- [0 1]
- ] def
- S F generesolid
-%% /axe exch def
- [ A ]
- normalvect_to_orthobase
- /imK defpoint3d
- /imJ defpoint3d
- /imI defpoint3d
-
- A norme3d /z exch .3 sub def
- 0 .1 .3 [1 8] newcone
- dup (noir) outputcolors
- {0 0 z translatepoint3d} solidtransform
- {imI imJ imK transformpoint3d} solidtransform
- solidfuz
-end
-} def
-
-%%%%% ### newobjfile ###
-/newobjfile {
-3 dict begin
- /objfilename exch def
- /v {} def
- /ok true def
- /f {
- ok {
- %% 1ere fois
- ] %% ferme les sommets
- [ [ %% ouvre les faces
- /ok false store
- } {
- %% les autres fois
- ] %% ferme la face
- [ %% ouvre la nouvelle
- } ifelse
- } def
- [ 0 0 0
- objfilename run
- ]]
- /F exch def
- /S exch def
-
- S F generesolid
-% dup videsolid
-end
-} def
-
-%%%%% ### fin insertion ###
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% %%%%
-%%%% fin insertion librairie jps %%%%
-%%%% %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% gestion de chaine de caracteres %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-/Times-Roman findfont
-dup length dict begin
- {
- 1 index /FID ne
- {def}
- {pop pop}
- ifelse
- } forall
- /Encoding ISOLatin1Encoding def
- currentdict
-end
-/Times-Roman-ISOLatin1 exch definefont pop
-
-/setTimesRoman {
- /Times-Roman-ISOLatin1 findfont
- fontsize scalefont
- setfont
-} def
-
-/setTimes {
- setTimesRoman
-} def
-
-%% syntaxe : string x y cctext
-/cctext {
-5 dict begin
- /y exch def
- /x exch def
- /str exch def
- str stringwidth
- /wy exch def
- /wx exch def
- gsave
- x y smoveto
- wx -2 div wy -2 div rmoveto
- str show
- grestore
-end
-} def
-
-%% syntaxe : str x y show_dim --> str x y llx lly wx wy
-%% attention, doit laisser la pile intacte
-/show_dim {
- 3 copy pop pop
- newpath
- 0 0 moveto
- true charpath flattenpath pathbbox
- closepath
- newpath
-} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% procedures pour PSTricks %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% procedures pour \psSolid %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-/all (all) def
-
-/draw {drawsolid} def
-/draw* {drawsolid*} def
-/draw** {drawsolid**} def
-/none {pop} def
-
-/gere_pstricks_color_inout {
- gsave
- dup [fillincolor] (setrgbcolor) astr2str
- [fillcolor] (setrgbcolor) astr2str inoutputcolors
- grestore
-} def
-
-/gere_pstricks_color_out {
- gsave
- dup [fillcolor] (setrgbcolor) astr2str outputcolors
- grestore
-} def
-
-/gere_pstricks_opt {
-% /CourbeR2 {CourbeR2+} def
- linecolor
- solidlinewidth setlinewidth
- RotX 0 ne RotY 0 ne or RotZ 0 ne or {
- {RotX RotY RotZ rotateOpoint3d} solidtransform
- } if
- CX 0 ne CY 0 ne or CZ 0 ne or {
- {CX CY CZ translatepoint3d} solidtransform
- } if
- /rmfaces rmfaces bubblesort reverse store
- 0 1 rmfaces length 1 sub {
- /i exch def
- dup rmfaces i get solidrmface
- } for
- solidhollow {
- dup videsolid
- } if
- activationgestioncouleurs {
- dup solidwithinfaces {
- gere_pstricks_color_inout
- } {
- gere_pstricks_color_out
- } ifelse
- } if
-
- 0 1 fcol length 2 idiv 1 sub {
- /i exch def
- dup fcol 2 i mul get fcol 2 i mul 1 add get solidputfcolor
- } for
- tx@Dict /pst-transformoption known {
- dup {pst-transformoption} solidtransform
- } if
- solidinouthue length 0 gt {
- dup solidinouthue solidputinouthuecolors
- } {
- solidhue length 0 gt {
- dup solidhue solidputhuecolors
- } if
- solidinhue length 0 gt {
- dup solidinhue solidputinhuecolors
- } if
- } ifelse
- dup action
- noir
- solidnumf length 0 ne {
- solidnumf 0 get isstring {
- dup projectionsifacevisible solidnumfaces
- } {
- dup solidnumf projectionsifacevisible solidnumfaces
- } ifelse
- } if
- solidshow length 0 ne {
- solidshow 0 get isstring {
- dup solidshowsommets
- } {
- dup solidshow solidshowsommets
- } ifelse
- } if
- solidnum length 0 ne {
- solidnum 0 get isstring {
- dup solidnumsommets
- } {
- dup solidnum solidnumsommets
- } ifelse
- } {
- %% pop
- } ifelse
- tx@Dict /solidname known {
- solidname exch bind def
- tx@Dict /solidname undef
- } {
- pop
- } ifelse
-} def
-
-/pst-octahedron {
- a newoctaedre
- gere_pstricks_opt
-} def
-
-/pst-dodecahedron {
- a newdodecaedre
- gere_pstricks_opt
-} def
-
-/pst-icosahedron {
- a newicosaedre
- gere_pstricks_opt
-} def
-
-/pst-cube {
- a
- ngrid length 1 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newcube
-%% solidhollow {
-%% dup videsolid
-%% } if
- gere_pstricks_opt
-} def
-
-/pst-parallelepiped {
- a b c
- newparallelepiped
- gere_pstricks_opt
-} def
-
-/pst-tetrahedron {
- r newtetraedre
- gere_pstricks_opt
-} def
-
-/pst-tore {
- r0 r1
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newtore
- gere_pstricks_opt
-} def
-
-/pst-sphere {
- % rayon
- % mode
- % r {Mode} newsphere
- r
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newsphere
- gere_pstricks_opt
-} def
-
-/pst-cylindre {
- % rayon
- % mode
- 0 r h
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newcylindre
- solidhollow {
- dup creusesolid
- } if
- gere_pstricks_opt
-} def
-
-/pst-cylindrecreux {
- % rayon
- % mode
- 0 r h
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newcylindre
- dup creusesolid
- gere_pstricks_opt
-} def
-
-/pst-cone {
- % rayon
- % mode
- 0 r h
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- solidhollow {
- newconecreux
- } {
- newcone
- } ifelse
- gere_pstricks_opt
-} def
-
-/pst-tronccone {
- % rayon
- % mode
- 0 r0 h r1
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- solidhollow {
- newtroncconecreux
- } {
- newtronccone
- } ifelse
- gere_pstricks_opt
-} def
-
-/pst-troncconecreux {
- % rayon
- % mode
- 0 r0 h r1
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newtroncconecreux
- gere_pstricks_opt
-} def
-
-/pst-conecreux {
- % rayon
- % mode
- 0 r h
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newconecreux
- gere_pstricks_opt
-} def
-
-/pst-anneau {
- [ section ]
- ngrid length 1 ge {
- [ngrid 0 get]
- } {
- [24]
- } ifelse
- newanneau
- gere_pstricks_opt
-} def
-
-
-/pst-prisme {
- % tableau des points de la base
- % h hauteur du prisme
- % axe : vecteur direction de l axe
- base decal rollparray
- 0 h axe
- ngrid length 1 ge {
- [ngrid 0 get]
- } if
- newprisme
- solidhollow {
- dup creusesolid
- } if
- gere_pstricks_opt
-} def
-
-/pst-prismecreux {
- % tableau des points de la base
- % h hauteur du prisme
- % axe : vecteur direction de l axe
- base
- 0 h axe
- ngrid length 1 ge {
- [ngrid 0 get]
- } if
- newprisme
- dup creusesolid
- gere_pstricks_opt
-} def
-
-/pst-grille {
- base aload pop
- ngrid length 2 ge {
- [ngrid 0 get ngrid 1 get]
- } {
- ngrid length 1 eq {
- [ngrid 0 get dup]
- } if
- } ifelse
- newgrille
- gere_pstricks_opt
-} def
-
-%% syntaxe : array N h u newruban -> solid d axe (O, u),
-/pst-ruban {
- % tableau des points de la base
- % h hauteur du prisme
- % axe : vecteur direction de l axe
- base
- h axe
- ngrid length 1 ge {
- [ngrid 0 get]
- } if
- newruban
- gere_pstricks_opt
-} def
-
-%% syntaxe : r phi option newcalottesphere -> solid
-/pst-calottesphere {
- % rayon
- % mode
- % r phi theta option newcalottesphere
- r
- phi theta
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- solidhollow {
- newcalottespherecreuse
- } {
- newcalottesphere
- } ifelse
- gere_pstricks_opt
-} def
-
-%% syntaxe : r phi option newcalottesphere -> solid
-/pst-calottespherecreuse {
- % rayon
- % mode
- % r phi theta option newcalottespherecreuse
- r
- phi theta
- ngrid length 2 eq {
- ngrid
- } {
- {Mode}
- } ifelse
- newcalottespherecreuse
- gere_pstricks_opt
-} def
-
-/pointtest{2 2 2} def
-
-/pst-face {
- % tableau des points de la base
- % h hauteur du prisme
- % axe : vecteur direction de l axe
- base
- solidbiface {
- newbiface
- } {
- newmonoface
- } ifelse
- gere_pstricks_opt
-} def
-
-/pst-surface {
- base
- base aload pop
- ngrid length 2 ge {
- [ngrid 0 get ngrid 1 get]
- } {
- ngrid length 1 eq {
- [ngrid 0 get dup]
- } ifelse
- } ifelse
- {f} newsurface
- solidbiface {
- dup videsolid
- } if
- gere_pstricks_opt
-} def
-
-/pst-polygoneregulier {
- r ngrid 0 get
- newpolreg
- solidbiface {
- } {
- dup 1 solidrmface
- } ifelse
- gere_pstricks_opt
-} def
-
-/pst-fusion {
-1 dict begin
- /activationgestioncouleurs false def
- /n base length def
- base aload pop n 1 sub {solidfuz} repeat
- gere_pstricks_opt
-end
-} def
-
-/pst-new {
- sommets faces
- generesolid
-%% solidhollow {
-%% dup videsolid
-%% } if
- gere_pstricks_opt
-} def
-
-/pst-courbe {
- solidlinewidth setlinewidth
- range aload pop {function} CourbeR3
-} def
-
-/pst-surfaceparametree {
- base aload pop
- ngrid length 2 ge {
- [ngrid 0 get ngrid 1 get]
- } {
- ngrid length 1 eq {
- [ngrid 0 get dup]
- } if
- } ifelse
- { function } newsurfaceparametree
- dup videsolid
- gere_pstricks_opt
-} def
-
-/pst-vecteur {
-gsave
- solidlinewidth setlinewidth
- 1 setlinejoin
- 1 setlinecap
- linecolor
- linestyle
- args newvecteur
- dup
- [linecolor currentrgbcolor] ( ) astr2str (setrgbcolor) append
- outputcolors
- gere_pstricks_opt
-grestore
-} def
-
-/pst-ligne {
- newpath
- base 0 get
- base 1 get
- base 2 get
- 3dto2d smoveto
- base ligne3d_
-} def
-
-/pst-objfile {
- solidfilename newobjfile
-% dup {1 1 div mulv3d} solidtransform
-%% solidhollow {
-%% dup videsolid
-%% } if
- gere_pstricks_opt
-} def
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% procedures pour \psProjection %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-/gere_pstricks_proj_opt {
- /solidprojname where {
- /solidprojname get noface phi
- xorigine 0 eq
- yorigine 0 eq and
- zorigine 0 eq and
- xorigine isinteger not and
- yorigine isinteger not and
- yorigine isinteger not and {
- } {
- [xorigine yorigine zorigine] ( ) astr2str
- } ifelse
- projectionsifacevisible solidprojpath
- } {
- xorigine yorigine zorigine [ normale ] projectionsifacevisible planprojpath
- } ifelse
-} def
-
-/proj-pst-chemin {
- solidlinewidth setlinewidth
- newpath
- path
- linecolor
- gere_pstricks_proj_opt
-} def
-
-/proj-pst-courbeR2 {
- solidlinewidth setlinewidth
- newpath
- linecolor
- range aload pop { function } CourbeR2_
- gere_pstricks_proj_opt
-} def
-
-/proj-pst-courbe {
- solidlinewidth setlinewidth
- newpath
- linecolor
- range aload pop {} { function } Courbeparam_
- gere_pstricks_proj_opt
-} def
-
-/proj-pst-texte {
-2 dict begin
- setTimes
- solidlinewidth setlinewidth
- newpath
- linecolor
- texte 0 0
- pos (text_) append cvx exec
- gere_pstricks_proj_opt
-fill
-end
-} def
-
-/pst-trigospherique {
-3 dict begin
-gsave
- solidlinewidth setlinewidth
- linecolor
- linestyle
- args definition
-grestore
-end
-} def
-
-% END solides.pro