diff options
author | Karl Berry <karl@freefriends.org> | 2008-08-02 23:12:12 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-08-02 23:12:12 +0000 |
commit | e64ffb6f004c76b6552fa48978e1ab5a97cdf4db (patch) | |
tree | ec554d0aeea6c375082c170705b704735cdfd9e0 /Master/texmf-dist/tex/generic/pst-solides3d | |
parent | 4b522fc9f9bf01716bc73a2f3d23f505bccee883 (diff) |
pst-solides3d 4.10 (rename from pst-solide3d) (2aug08)
git-svn-id: svn://tug.org/texlive/trunk@10017 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-solides3d')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-solides3d/pst-solides3d.tex | 1076 |
1 files changed, 1076 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-solides3d/pst-solides3d.tex b/Master/texmf-dist/tex/generic/pst-solides3d/pst-solides3d.tex new file mode 100644 index 00000000000..799492dc8ca --- /dev/null +++ b/Master/texmf-dist/tex/generic/pst-solides3d/pst-solides3d.tex @@ -0,0 +1,1076 @@ +%% COPYRIGHT 2008 by Manuel Luque, Arnaud Schmittbuhl, +%% Jean-Paul Vignault, Herbert Voss. +%% 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. +%% etex detection by looking for the \ifcsname macro +\expandafter\ifx\csname ifcsname\endcsname\relax + \newlinechar`\^^J + \message{^^J*****************************************} + \message{etex is needed to work with pst-solides3d} + \message{*****************************************} + \catcode`\ =11\relax + \Compile With etex Please +\fi +\csname PSTSOLIDESIIIDLoaded\endcsname +\let\PSTSOLIDESIIIDLoaded\endinput +% Requires PSTricks, pst-xkey and pst-node packages +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +\ifx\PSTnodesLoaded\endinput\else\input pst-node \fi +\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi +\ifx\MultidoLoaded\endinput\else\input multido.tex \fi +% JPV & ML & AS & HV +\def\fileversion{4.10} +\def\filedate{2008/07/24} +\message{`PSTSOLIDESIIID' v\fileversion, \filedate} +% +\pstheader{solides.pro} + +\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax +\pst@addfams{pst-solides3d} +\SpecialCoor +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Definition des differentes variables pour PSTricks +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%% variables numeriques %%%%%%%%%%%%%%%%% +% +% point de vue et rotations de l'objet +% distance de l'ecran a l'observateur +% +\define@key[psset]{pst-solides3d}{viewpoint}{\def\pst@solides@viewpoint{#1}}% position de l'observateur +\psset[pst-solides3d]{viewpoint=10 10 10}% coordonnees cartesiennes +\define@key[psset]{pst-solides3d}{Decran}{\def\pst@solides@Decran{#1}}% distance de l'ecran +\define@key[psset]{pst-solides3d}{RotX}{\def\psk@solides@RotX{#1}}% rotation autour de Ox en degres +\define@key[psset]{pst-solides3d}{RotY}{\def\psk@solides@RotY{#1}}% rotation autour de Oy en degres +\define@key[psset]{pst-solides3d}{RotZ}{\def\psk@solides@RotZ{#1}}% rotation autour de Oz en degres +\psset[pst-solides3d]{RotZ=0,RotX=0,RotY=0,Decran=50}% valeurs par defaut +% parametres propres a chaque objet +\define@key[psset]{pst-solides3d}{resolution}{\def\pst@solides@resolution{#1}} % nb points par courbe +\define@key[psset]{pst-solides3d}{no}{\def\pst@solides@no{#1}} % numero face du solide +\define@key[psset]{pst-solides3d}{phi}{\def\pst@solides@phi{#1}} % angle calotte sphere +\define@key[psset]{pst-solides3d}{theta}{\def\pst@solides@theta{#1}} % angle calotte sphere +\define@key[psset]{pst-solides3d}{r0}{\def\pst@solides@rO{#1}} % rayon interieur tore +\define@key[psset]{pst-solides3d}{r1}{\def\pst@solides@rI{#1}} % rayon moyen tore +\define@key[psset]{pst-solides3d}{R}{\def\pst@solides@R{#1}} % rayon moyen tore +\define@key[psset]{pst-solides3d}{r}{\def\pst@solides@r{#1}} % rayon de la sphere circonscrite +\define@key[psset]{pst-solides3d}{a}{\def\pst@solides@a{#1}} % arete du cube (1 du parallelepipede) +\define@key[psset]{pst-solides3d}{b}{\def\pst@solides@b{#1}} % arete 2 du parallelepipede +\define@key[psset]{pst-solides3d}{c}{\def\pst@solides@c{#1}} % arete 3 du parallelepipede +\define@key[psset]{pst-solides3d}{h}{\def\pst@solides@h{#1}} % hauteur du cylindre, du cone, du prisme +\define@key[psset]{pst-solides3d}{chanfreincoeff}{\def\pst@solides@chanfreincoeff{#1}} % coeff de chanfreinage +\define@key[psset]{pst-solides3d}{trunccoeff}{\def\pst@solides@trunccoeff{#1}} % coeff de troncature +\define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage +\define@key[psset]{pst-solides3d}{dualregcoeff}{\def\pst@solides@dualregcoeff{#1}} % coeff de dual +\define@key[psset]{pst-solides3d}{intersectiontype}{\def\pst@solides@intersectiontype{#1}} % +% +%% les affectations par defaut +\psset[pst-solides3d]{R=4,r1=4,r0=1.5,r=2,no=0,a=4,b=a,c=a,h=6,phi=0,theta=90,resolution=36,% +trunccoeff=.25,chanfreincoeff=.8,affinagecoeff=.8,dualregcoeff=1,intersectiontype=-1} +% +%%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%% +% +\define@key[psset]{pst-solides3d}{base}{\def\pst@solides@base{#1}} % base du prisme +\psset[pst-solides3d]{base=-1 -1 1 -1 0 1}% coordonnees d'un triangle, base triangulaire par defaut +\define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme +\psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme +\define@key[psset]{pst-solides3d}{plansection}{\def\pst@solides@plansection{#1}} % le plan de section +\psset[pst-solides3d]{plansection=}% pas de section par defaut +\define@key[psset]{pst-solides3d}{plansepare}{\def\pst@solides@plansepare{#1}} % le plan de separation +\psset[pst-solides3d]{plansepare=}% pas de separation par defaut +\define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}% +\psset[pst-solides3d]{intersectionlinewidth=1}% +\define@key[psset]{pst-solides3d}{intersectioncolor}{\def\pst@solides@intersectioncolor{#1}}% +\psset[pst-solides3d]{intersectioncolor=(rouge)}% +\define@key[psset]{pst-solides3d}{intersectionplan}{\def\pst@solides@intersectionplan{#1}}% +\psset[pst-solides3d]{intersectionplan=[0 0 1 0]}% +\define@key[psset]{pst-solides3d}{definition}{\def\pst@solides@definition{#1}} % +\psset[pst-solides3d]{definition=}% +\define@key[psset]{pst-solides3d}{args}{\def\pst@solides@args{#1}} % +\psset[pst-solides3d]{args=}% +\define@key[psset]{pst-solides3d}{transform}{\def\pst@solides@transform{#1}} % +\psset[pst-solides3d]{transform=}% + +\def\Section{% + R h 2 div neg % sommet 1 + R h 2 div % sommet 2 + r h 2 div % sommet 3 + r h 2 div neg % sommet 4 + } +\define@key[psset]{pst-solides3d}{section}{\def\pst@solides@section{#1}} % section de l'objet de revolution +\psset[pst-solides3d]{section=\Section}% coordonnees des sommets de la section + +%% decalage pourle prisme +\define@key[psset]{pst-solides3d}{decal}{\def\pst@solides@decal{#1}} +\psset[pst-solides3d]{decal=-2}% decalage par defaut + +% teinte des faces exterieures de l'objet a partir de PSTricks +% donnee par filcollor +% teinte des faces interieures de l'objet a partir de PSTricks +\define@key[psset]{pst-solides3d}{incolor}{\pst@getcolor{#1}\psincolor} +\psset[pst-solides3d]{incolor=green} +% +%% couleurs definies par l'utilisateur +\define@key[psset]{pst-solides3d}{color1}{\pst@getcolor{#1}\pscolora} +\psset[pst-solides3d]{color1=cyan} +% +\define@key[psset]{pst-solides3d}{color2}{\pst@getcolor{#1}\pscolorb} +\psset[pst-solides3d]{color2=magenta} +% +\define@key[psset]{pst-solides3d}{color3}{\pst@getcolor{#1}\pscolorc} +\psset[pst-solides3d]{color3=blue} +% +\define@key[psset]{pst-solides3d}{color4}{\pst@getcolor{#1}\pscolord} +\psset[pst-solides3d]{color4=red} +% +% resolution du trace +\newcount\test@mode +\define@key[psset]{pst-solides3d}{mode}{% resolution : mode=0,1,2, 3,4 ou 5 + \test@mode=#1\relax% + \ifnum\test@mode>4% + \typeout{mode must be 0,1,2,3 or 4 and not `\the\test@mode'. Value 4 forced.}\test@mode=4% + \fi% +\edef\pst@solides@mode{\the\test@mode}}% +\psset[pst-solides3d]{mode=2}% +% +%%%%%%%%%%%%%%%%% variables booleennes %%%%%%%%%%%%%%%%% +% +%\define@boolkey[psset]{pst-solides3d}[Pst@]{SphericalCoor}[true]{% +% \ifPst@SphericalCoor +% \def\pst@solides@viewpoint{ 17.320509 45 35.264389 }% +% \fi} +%\psset{SphericalCoor=false} +% +\define@boolkey[psset]{pst-solides3d}[Pst@]{isolatin}[false]{} +\psset{isolatin=true} +\define@boolkey[psset]{pst-solides3d}[Pst@]{affinagerm}[false]{} +\psset{affinagerm=true} +\define@boolkey[psset]{pst-solides3d}[Pst@]{chanfrein}[true]{} +\psset{chanfrein=false} +\define@boolkey[psset]{pst-solides3d}[Pst@]{grid}[false]{} +\psset{grid=true} +\define@boolkey[psset]{pst-solides3d}[Pst@]{dualreg}[true]{} +\psset{dualreg=false} +\define@boolkey[psset]{pst-solides3d}[Pst@]{geode}[true]{} +\psset{geode=false} +\define@boolkey[psset]{pst-solides3d}[Pst@]{hollow}[true]{} +\psset{hollow=false} +\define@boolkey[psset]{pst-solides3d}[Pst@]{biface}[true]{} +\psset{biface=true}% +\define@boolkey[psset]{pst-solides3d}[Pst@]{axesboxed}[true]{} +\psset{axesboxed=false}% +\define@boolkey[psset]{pst-solides3d}[Pst@]{planmarks}[true]{} +\psset{planmarks=false}% +\define@boolkey[psset]{pst-solides3d}[Pst@]{plangrid}[true]{} +\psset{plangrid=false}% +\define@boolkey[psset]{pst-solides3d}[Pst@]{showbase}[true]{} +\psset{showbase=false}% +\define@boolkey[psset]{pst-solides3d}[Pst@]{showBase}[true]{} +\psset{showBase=false}% +\define@boolkey[psset]{pst-solides3d}[Pst@]{deactivatecolor}[true]{} +\psset{deactivatecolor=false}% + +%% faces a enlever +\define@key[psset]{pst-solides3d}{rm}{\def\pst@solides@CoordinatesRm{#1}} +\psset[pst-solides3d]{rm=}% pas de faces par defaut +%% nom de la variable de sauvegarde du solide considere +\define@key[psset]{pst-solides3d}{name}{\def\pst@solides@name{#1}} +\psset[pst-solides3d]{name=}% pas de nom par defaut +%% nom de la variable de sauvegarde du solide sur lequel on doit projeter +\define@key[psset]{pst-solides3d}{solidname}{\def\pst@solides@solidname{#1}} +\psset[pst-solides3d]{solidname=}% pas de nom par defaut +%% nom du fichier externe +\define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}} +\psset[pst-solides3d]{file=}% pas de fichier par defaut +%% nom de l'objet de type plan +\define@key[psset]{pst-solides3d}{planname}{\def\pst@solides@planname{#1}} +\psset[pst-solides3d]{planname=}% pas de nom par defaut +%% nom de l'objet a charger (load) +\define@key[psset]{pst-solides3d}{load}{\def\pst@solides@load{#1}} +\psset[pst-solides3d]{load=}% pas de load par defaut +%% couleur face pour affinage +\define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}} +\psset[pst-solides3d]{fcolor=}% pas de couleur par defaut +%% couleurs de faces isolees +\define@key[psset]{pst-solides3d}{fcol}{\def\pst@solides@fcol{#1}} +\psset[pst-solides3d]{fcol=}% pas de faces par defaut +%% les degrades ``hue'' +\define@key[psset]{pst-solides3d}{hue}{\def\pst@solides@hue{#1}} +\psset[pst-solides3d]{hue=}% pas de degrade externe par defaut +\define@key[psset]{pst-solides3d}{inhue}{\def\pst@solides@inhue{#1}} +\psset[pst-solides3d]{inhue=}% pas de degrade interne par defaut +\define@key[psset]{pst-solides3d}{inouthue}{\def\pst@solides@inouthue{#1}} +\psset[pst-solides3d]{inouthue=}% pas de degrade total par defaut +%% definition des faces et des sommets d'un nouveau solide +\define@key[psset]{pst-solides3d}{sommets}{\def\pst@solides@sommets{#1}} +\psset[pst-solides3d]{sommets=}% pas de sommet par defaut +%% \define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}} +%% \psset[pst-solides3d]{faces=}% pas de face par defaut +\define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}} +\psset[pst-solides3d]{faces={}}% valeurs par defaut +%% numerotation des faces +\define@key[psset]{pst-solides3d}{numfaces}{\def\pst@solides@numfaces{#1}} +\psset[pst-solides3d]{numfaces=}% pas de numerotation par defaut +%% troncature des sommets +\define@key[psset]{pst-solides3d}{trunc}{\def\pst@solides@trunc{#1}} +\psset[pst-solides3d]{trunc=}% pas de troncature par defaut +%% affinage des faces +\define@key[psset]{pst-solides3d}{affinage}{\def\pst@solides@affinage{#1}} +\psset[pst-solides3d]{affinage=}% pas de affinage par defaut +%% numerotation des sommets +\define@key[psset]{pst-solides3d}{num}{\def\pst@solides@num{#1}} +\psset[pst-solides3d]{num=}% pas de numerotation defaut +%% pointage des sommets +\define@key[psset]{pst-solides3d}{show}{\def\pst@solides@show{#1}} +\psset[pst-solides3d]{show=}% pas de pointage par defaut +%% maillage de l'utilisateur +\define@key[psset]{pst-solides3d}{ngrid}{\def\pst@solides@ngrid{#1}} +\psset[pst-solides3d]{ngrid=}% pas de faces par defaut + +% source de la lumiere : +\define@key[psset]{pst-solides3d}{lightsrc}{\def\pst@solides@CoordinatesLight{#1}} +\psset[pst-solides3d]{lightsrc=}% pas de coordonnees par defaut +% intensite de la lumiere +\define@key[psset]{pst-solides3d}{lightintensity}{\def\pst@solides@lightintensity{#1}} +\psset[pst-solides3d]{lightintensity=2} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Code \@for (Stolen from LaTeX file: latex.ltx) +%% thanks to Herbert Voss +\expandafter\ifx\csname @latexerr\endcsname\relax% do we have LaTeX? + \immediate\write17{We are running tex and have to define some LaTeX commands ...} + \def\@fornoop#1\@@#2#3{} + \long\def\@for#1:=#2\do#3{% + \expandafter\def\expandafter\@fortmp\expandafter{#2}% + \ifx\@fortmp\@empty \else + \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi} + \long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else + #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi} + \long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \expandafter\@fornoop \else + #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}% +\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Reservation des noms de macros +% #1=type de reservation (action, object...) associee a une liste qui +% doit forcement etre du type pst@solides@list@#1 +\def\pst@solides@reservednames#1{% +\edef\@tempa{\csname pst@solides@list@#1\endcsname} +\@for \name:=\@tempa\do{% + \expandafter\def\csname pst@solides@#1@\name\endcsname{}% +}} +% type de dessin +\def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid,writeoff} +%% Reservation de macros correspondants aux actions +\pst@solides@reservednames{action} +\define@key[psset]{pst-solides3d}{action}{% + \ifcsname pst@solides@action@#1\endcsname + \def\pst@solides@action{#1}% + \else + \@pstrickserr{This action is not authorized, the procedure draw** is + chosen by default}{}% + \fi} +% type par defaut = faces vues remplies +\psset[pst-solides3d]{action=draw**}% +% +% choix de la police et de la taille des caracteres en cm !! +\define@key[psset]{pst-solides3d}{PSfont}{\def\pst@solides@PSfont{/#1 }} +\define@key[psset]{pst-solides3d}{fontsize}{\def\pst@solides@fontsize{#1 }} +\psset[pst-solides3d]{PSfont=Times-Roman,fontsize=10} + +% nature de l'objet +\def\pst@solides@list@object{% +tore,cube,tetrahedron,octahedron,icosahedron,dodecahedron,sphere,% +cylindre,cylindrecreux,cone,conecreux,tronccone,troncconecreux,% +grille,prisme,anneau,parallelepiped,prismecreux,ruban,calottesphere,face,% +Surface,surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% +surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,% +plan,offfile,geode,load,plantype,point,pie,droite,polygone,cercle,rightangle} +% +%% Reservation de macros correspondants aux objects +\pst@solides@reservednames{object} +\define@key[psset]{pst-solides3d}{object}{% + \ifcsname pst@solides@object@#1\endcsname + \def\psk@solides@object{pst-#1}% + \else + \@pstrickserr{The solid #1 is not defined, the solid by default is + drawn}{}% + \fi} +%% Ajout de solides la liste des objets +\def\addtosolideslistobject#1{% +% ajouter les nouveaux objets la liste +\expandafter\def\expandafter\pst@solides@list@object\expandafter% + {\pst@solides@list@object,#1}% +% Reserver le nom des nouveaux objets + \edef\@tempa{#1}% + \@for \name:=\@tempa\do{% + \expandafter\def\csname pst@solides@object@\name\endcsname{}% + }} +% solide par defaut +\psset[pst-solides3d]{object=tore}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% pour le quadrillage 3d +\define@key[psset]{pst-solides3d}{spotX}{\def\pst@solides@@spotX{#1}}% +\define@key[psset]{pst-solides3d}{spotY}{\def\pst@solides@@spotY{#1}}% +\define@key[psset]{pst-solides3d}{spotZ}{\def\pst@solides@@spotZ{#1}}% +\define@key[psset]{pst-solides3d}{QZ}{\def\pst@solides@@QZ{#1}}% +\define@key[psset]{pst-solides3d}{Zmin}{\def\pst@solides@@Zmin{#1 }}% +\define@key[psset]{pst-solides3d}{Zmax}{\def\pst@solides@@Zmax{#1 }}% +\psset[pst-solides3d]{spotX=dr,spotY=dl,spotZ=l,QZ=0,Zmin=-4,Zmax=4} +% spotX, Y, Z vaut de 0 a 360 degres pour placer les valeurs correctement +% QZ translation du quadrillage suivant l'axe Oz + +\define@key[psset]{pst-solides3d}{stepX}{\pst@getint{#1}\psk@solides@stepX} +\define@key[psset]{pst-solides3d}{stepY}{\pst@getint{#1}\psk@solides@stepY} +\define@key[psset]{pst-solides3d}{stepZ}{\pst@getint{#1}\psk@solides@stepZ} +\define@key[psset]{pst-solides3d}{ticklength}{\pst@checknum{#1}\psk@solides@ticklength} +%\define@key[psset]{pst-solides3d}{Dx}{\pst@checknum{#1}\psk@solides@Dx } +%\define@key[psset]{pst-solides3d}{Dy}{\pst@checknum{#1}\psk@solides@Dy } +%\define@key[psset]{pst-solides3d}{Dz}{\pst@checknum{#1}\psk@solides@Dz } +\psset[pst-solides3d]{stepX=1,stepY=1,stepZ=1,ticklength=0.2}% the step for the axes labels + +\def\gridIIID{\pst@object{gridIIID}} +%% usage : \gridIIID[options](x_min,x_max)(y_min,y_max) +\def\gridIIID@i(#1,#2)(#3,#4){% + \@ifnextchar[{\gridIIID@ii(#1,#2)(#3,#4)}{\gridIIID@ii(#1,#2)(#3,#4)[2,2,3]}} +\def\gridIIID@ii(#1,#2)(#3,#4)[#5,#6,#7]{% + \pst@killglue% + \begingroup% + \use@par% + \psSolid[object=parallelepiped, + intersectiontype=-1, + a={#2 #1 sub},b={#4 #3 sub}, + c={\pst@solides@@Zmax \pst@solides@@Zmin sub}, + action=draw](0,0,\pst@solides@@Zmax \pst@solides@@Zmin add 2 div )% + \ifnum#1<0 \pst@cnta=-#1 \def\pst@minus{-}\else\pst@cnta=#1 \def\pst@minus{}\fi + \divide\pst@cnta by \psk@solides@stepX + \multido{\ix=\psk@solides@stepX+\psk@solides@stepX}{\pst@cnta}{% + \psPoint(\pst@minus\ix,#4,\pst@solides@@Zmin){X1}% + \psPoint(\pst@minus\ix,#4 \psk@solides@ticklength\space add,\pst@solides@@Zmin){X2}% + \psline(X1)(X2)% + \uput[\pst@solides@@spotX](X1){\small\pst@minus\ix}}% + \ifnum#2<0 \pst@cnta=-#2 \def\pst@minus{-}\else\pst@cnta=#2 \def\pst@minus{}\fi + \divide\pst@cnta by \psk@solides@stepX% + \advance\pst@cnta by \@ne + \multido{\ix=0+\psk@solides@stepX}{\the\pst@cnta}{% + \psPoint(\pst@minus\ix,#4,\pst@solides@@Zmin){X1} + \psPoint(\pst@minus\ix,#4 \psk@solides@ticklength\space add,\pst@solides@@Zmin){X2} + \psline(X1)(X2) + \uput[\pst@solides@@spotX](X1){\small\pst@minus\ix}} +% + \ifnum#3<0 \pst@cnta=-#3 \def\pst@minus{-}\else\pst@cnta=#3 \def\pst@minus{}\fi + \divide\pst@cnta by \psk@solides@stepY + \multido{\iy=\psk@solides@stepY+\psk@solides@stepY}{\pst@cnta}{% + \psPoint(#2,\pst@minus\iy,\pst@solides@@Zmin){Y1} + \psPoint(#2 \psk@solides@ticklength\space add,\pst@minus\iy,\pst@solides@@Zmin){Y2} + \psline(Y1)(Y2) + \uput[\pst@solides@@spotY](Y1){\small\pst@minus\iy}} + \ifnum#4<0 \pst@cnta=-#4 \def\pst@minus{-}\else\pst@cnta=#4 \def\pst@minus{}\fi + \divide\pst@cnta by \psk@solides@stepY + \advance\pst@cnta by \@ne + \multido{\iy=0+\psk@solides@stepY}{\pst@cnta}{% + \psPoint(#2,\pst@minus\iy,\pst@solides@@Zmin){Y1} + \psPoint(#2 \psk@solides@ticklength\space add,\pst@minus\iy,\pst@solides@@Zmin){Y2} + \psline(Y1)(Y2) + \uput[\pst@solides@@spotY](Y1){\small\pst@minus\iy}} +% + \pst@cnta=\pst@solides@@Zmin \pst@cntb=\pst@solides@@Zmax + \ifnum\pst@cnta=\pst@cntb\else% same z values? + \pst@cnta=\pst@solides@@Zmin + \ifnum\pst@cnta<0 \pst@cnta=-\pst@cnta \def\pst@minus{-} + \else\def\pst@minus{}\fi% + \divide\pst@cnta by \psk@solides@stepZ + \multido{\iz=\psk@solides@stepZ+\psk@solides@stepZ}{\pst@cnta}{% + \psPoint(#2,#3,\pst@minus\iz){Z1} + \psPoint(#2,#3 \psk@solides@ticklength\space sub,\pst@minus\iz){Z2} + \psline(Z1)(Z2) + \uput[\pst@solides@@spotZ](Z1){\small\pst@minus\iz}} + \pst@cnta=\pst@solides@@Zmax % + \ifnum\pst@cnta<0 \pst@cnta=-\pst@pst@cnta \def\pst@minus{-} + \else\def\pst@minus{}\fi% + \divide\pst@cnta by \psk@solides@stepZ + \advance\pst@cnta by \@ne + \multido{\iz=0+\psk@solides@stepZ}{\pst@cnta}{% + \psPoint(#2,#3,\pst@minus\iz){Z1} + \psPoint(#2,#3 \psk@solides@ticklength\space sub,\pst@minus\iz){Z2} + \psline(Z1)(Z2) + \uput[\pst@solides@@spotZ](Z1){\small\pst@minus\iz}} + \fi +% + \psPoint(0,0,\pst@solides@@Zmax #7 add){Z'} + \psPoint(#2 #5 add,0,0){X'} + \psPoint(0,#4 #6 add, 0){Y'} + \psPoint(0,0,\pst@solides@@Zmax){Z} + \psPoint(#2,0,0){X} + \psPoint(0,#4,0){Y} + \psPoint(0,0,0){O} + \uput[\pst@solides@@spotY](X'){$x$} + \uput[\pst@solides@@spotX](Y'){$y$} + \uput[u](Z'){$z$} + \ifPst@showOrigin + \psline[linestyle=dashed](O)(X) + \psline[linestyle=dashed](O)(Y) + \psline[linestyle=dashed](O)(Z) + \fi +%\psset{linewidth=2\pslinewidth} + \psline{->}(Z)(Z')\psline{->}(Y)(Y')\psline{->}(X)(X') + \endgroup% + \ignorespaces% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% code insere dans le .ps +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +\pst@def{optionssolides}<% +/PSfont {\pst@solides@PSfont} def +/pst@fill { \psk@opacityalpha .setopacityalpha fill } def +/strokeopacity \psk@opacityalpha def +/fillopacity \psk@opacityalpha def +/xunit {\pst@number\psunit } def +%% /cm {\pst@number\psunit mul} def +%% /cm_1 {\pst@number\psunit div} def +/decal \pst@solides@decal\space def % decalage +/viewpointXYZ {\pst@solides@viewpoint} def +/Decran \pst@solides@Decran\space def % distance de l'ecran +% +/RotX \psk@solides@RotX\space def +/RotY \psk@solides@RotY\space def +/RotZ \psk@solides@RotZ\space def +% +/fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def +% +/projectionsifacevisible \ifPst@visibility true \else false \fi def +% +/R \pst@solides@R\space def % pour le tore +/r1 \pst@solides@rI\space def % pour le tore +/r0 \pst@solides@rO\space def % pour le tore +/resolution \pst@solides@resolution\space def % pour le nb de points par courbe +/phi \pst@solides@phi\space def % pour la calotte spherique +/theta \pst@solides@theta\space def % pour la calotte spherique +/r \pst@solides@r\space def % rayon sphere circonscrite +/a \pst@solides@a\space def % arete du cube (1 du parallelepipede) +/b \pst@solides@b\space def % arete 2 du parallelepipede +/c \pst@solides@c\space def % arete 3 du parallelepipede +/h \pst@solides@h\space def % hauteur du cylindre, du cone, du prisme +/trunccoeff \pst@solides@trunccoeff\space def % coeff de troncature +/chanfreincoeff \pst@solides@chanfreincoeff\space def % coeff de chanfreinage +/affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage +/dualregcoeff \pst@solides@dualregcoeff\space def % coeff de dual +/solidintersectiontype \pst@solides@intersectiontype\space def % type d'intersection +/section {\pst@solides@section} def % section de l'objet de revolution +/base [ \pst@solides@base ] def +/solidintersectionlinewidth [ \pst@solides@intersectionlinewidth ] def +/solidintersectioncolor [ \pst@solides@intersectioncolor ] def +/solidintersectionplan [ \pst@solides@intersectionplan ] def +/axe { \pst@solides@axe } def +/plansection [ \pst@solides@plansection ] def +\ifx\pst@solides@function\@empty\else + /function (\pst@solides@function) def +\fi +% +/definition (\pst@solides@definition) def +/args { \pst@solides@args} def +/Mode \pst@solides@mode\space def % resolution du trace +/lightintensity \pst@solides@lightintensity\space def % intensite de la lumiere +% +/solidlinewidth {\pst@number\pslinewidth} def +/linecolor {\pst@usecolor\pslinecolor} def +/linestyle {\pslinestyle} def +/fillcolor {\pst@usecolor\psfillcolor currentrgbcolor} def +/fillincolor {\pst@usecolor\psincolor currentrgbcolor} def +% +/color1 {\pst@usecolor\pscolora } def +/color2 {\pst@usecolor\pscolorb } def +/color3 {\pst@usecolor\pscolorc } def +/color4 {\pst@usecolor\pscolord } def +% +/range [ \pst@solides@range ] def +/action (\pst@solides@action) def +/texte (\pst@solides@text) def +/pos (\pst@solides@pos) def +/proj-fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def +% +\ifx\pst@solides@CoordinatesLight\@empty\else + /lightsrc {\pst@solides@CoordinatesLight} def +\fi +% +/rmfaces [\pst@solides@CoordinatesRm] def +% +\ifx\pst@solides@plansepare\@empty\else + /plansepare {\pst@solides@plansepare} def +\fi +% +\ifx\pst@solides@transform\@empty\else + /pst-transformoption { \pst@solides@transform} def +\fi +% +\ifx\pst@solides@name\@empty\else + /solidname (\pst@solides@name) def +\fi +\ifx\pst@solides@file\@empty\else + /solidfilename (\pst@solides@file) def +\fi +% +\ifx\pst@solides@planname\@empty\else + /solidplanname (\pst@solides@planname) def +\fi +% +\ifx\pst@solides@load\@empty\else + /solidloadname {\pst@solides@load} def +\fi +% +\ifx\pst@solides@fcolor\@empty\else + /solidfcolor (\pst@solides@fcolor) def +\fi +% +/fcol [\pst@solides@fcol] def +/solidhue [\pst@solides@hue] def +/solidinouthue [\pst@solides@inouthue] def +/solidinhue [\pst@solides@inhue] def +/origin {\pst@solides@origin} def +% +%% +%% /solidhue \ifPst@hue true \else false \fi def +% +/sommets [\pst@solides@sommets] def +/faces [\pst@solides@faces] def +/solidshow [\pst@solides@show] def +/solidnum [\pst@solides@num] def +/solidnumf [\pst@solides@numfaces] def +/solidtrunc [\pst@solides@trunc] def +/solidaffinage [\pst@solides@affinage] def +/ngrid [\pst@solides@ngrid] def +% +/isolatin \ifPst@isolatin true \else false \fi def +/affinagerm \ifPst@affinagerm true \else false \fi def +/chanfrein \ifPst@chanfrein true \else false \fi def +/solidgrid \ifPst@grid true \else false \fi def +/solidplanmarks \ifPst@planmarks true \else false \fi def +/solidplangrid \ifPst@plangrid true \else false \fi def +/solidshowbase3d \ifPst@showBase true \else false \fi def +/activationgestioncouleurs \ifPst@deactivatecolor false \else true \fi def +/solidshowbase \ifPst@showbase true \else false \fi def +/soliddualreg \ifPst@dualreg true \else false \fi def +/solidgeode \ifPst@geode true \else false \fi def +/solidhollow \ifPst@hollow true \else false \fi def +/solidbiface \ifPst@biface true \else false \fi def +% +%% +%% /solidnum \ifPst@num true \else false \fi def +% +%\ifPst@SphericalCoor +% viewpointXYZ /PHI ED /THETA ED /Dobs ED +% % CoefficientsMT +% %% pour la 3D conventionnelle +% %% Dony : graphisme scientifique : page 187 +% %% Editeur : Masson +% /XpointVue {Dobs Cos1Cos2 mul} bind def +% /YpointVue {Dobs Sin1Cos2 mul} bind def +% /ZpointVue {Dobs Sin2 mul} bind def +% XpointVue YpointVue ZpointVue /viewpoint defpoint3d +%\else +viewpointXYZ /ZpointVue ED /YpointVue ED /XpointVue ED +/THETA {YpointVue XpointVue atan} bind def +/PHI {ZpointVue XpointVue dup mul YpointVue dup mul add sqrt atan} bind def +/Dobs {XpointVue dup mul YpointVue dup mul add ZpointVue dup mul add sqrt} bind def +% CoefficientsMT +XpointVue YpointVue ZpointVue /viewpoint defpoint3d +%\fi +> + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro \psSolid +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@boolkey[psset]{pst-solides3d}[Pst@]{solidmemory}[true]{} +\psset{solidmemory=false}% +% +\def\composeSolid{\use@pscode} +\let\endpspictureS@lid\endpspicture% redefine \endpspicture (hv) +\def\endpspicture{\ifPst@solidmemory\use@pscode\fi\endpspictureS@lid} + +\def\psSolid{\def\pst@par{}\pst@object{psSolid}} +\def\psSolid@i{\@ifnextchar({\psSolid@ii}{\psSolid@ii(0.,0.,0.)}} +\def\psSolid@ii(#1,#2,#3){% + \ifPst@solidmemory\begingroup\use@par\else\begin@ClosedObj\fi + \addto@pscode{ + 1 setlinejoin + \tx@optionssolides + SolidesDict begin + #1 #2 #3 + /CZ exch def + /CY exch def + /CX exch def + % nature du solide + \psk@solides@object\space + end + }% fin du code ps + \ifPst@solidmemory\endgroup\else\end@ClosedObj\fi + \ignorespaces} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro \codejps +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\codejps#1{{% +\define@key[psset]{pst-solides3d}{object}{\def\psk@solides@object{#1}} +\psSolid[object={#1} exec](0,0,0)}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro \psTransformPoint +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% transformation d'un point +% \pstransformIIID[RotX=,...](x y z)(CX,CY,CZ) +% Rotation d'un point(x y z) +% autour des axes Ox, Oy et Oz +% suivie +% de la translation au point (CX,CY,CZ) +\def\psTransformPoint{\def\pst@par{}\pst@object{psTransformPoint}} +\def\psTransformPoint@i(#1)(#2,#3,#4)#5{{% coordonnees cartesiennes + \begin@SpecialObj +\pnode(! + \tx@optionssolides + SolidesDict begin + #1 RotX RotY RotZ rotateOpoint3d + #2 #3 #4 translatepoint3d + 3dto2d cm_1 exch cm_1 exch + end){#5}% + \end@SpecialObj + }\ignorespaces} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro \psPoint +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% placer un point en particulier +% \psPoint[options du point de vue](x y z) +\def\psPoint{\def\pst@par{}\pst@object{psPoint}} +\def\psPoint@i(#1,#2,#3)#4{{% coordonnees cartesiennes + \begin@SpecialObj + \pnode(! + \tx@optionssolides + SolidesDict begin + #1 #2 #3 + 3dto2d cm_1 exch cm_1 exch + end){#4}% + \end@SpecialObj}\ignorespaces% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Vecteur normal a un plan +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\Normale{\pst@object{Normale}} +\def\Normale@i(#1,#2,#3){% +% #1 rayon +% #2 longitude +% #3 latitude +\pst@killglue% +\begingroup% +\use@par% +\pstVerb{/latitude #3 def + /longitude #2 def + /Rayon #1 def + /xP Rayon #2 cos #3 cos mul mul def + /yP Rayon #2 sin #3 cos mul mul def + /zP Rayon #3 sin mul def}% +\psSolid[object=vecteur,RotZ=#2,RotY=-#3, + args=1.7 0 0](xP,yP,zP) +\endgroup% +\ignorespaces} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% les axes IIId +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% axisemph +%% thanks to Herbert Voss +\define@boolkey[psset]{pst-solides3d}[Pst@]{showOrigin}[true]{} +\define@boolkey[psset]{pst-solides3d}[Pst@]{mathLabel}[true]{} +\psset[pst-solides3d]{showOrigin,mathLabel}% + +\def\pst@solides@axisnames@i#1,#2,#3,#4\@nil{% + \def\pst@solides@axesIIID@xname{#1} + \def\pst@solides@axesIIID@yname{#2} + \def\pst@solides@axesIIID@zname{#3}} + +\define@key[psset]{pst-solides3d}{axisnames}{% + \expandafter\pst@solides@axisnames@i#1,,,\@nil}% +\psset[pst-solides3d]{axisnames={x,y,z}} + +\define@key[psset]{pst-solides3d}{axisemph}{% + \def\pst@solides@axesIIID@emph{#1}} +\psset[pst-solides3d]{axisemph=} + +\def\axesIIID{\pst@object{axesIIID}} +\def\axesIIID@i(#1,#2,#3){% +\@ifnextchar({\axesIIID@ii(#1,#2,#3)}{\axesIIID@ii(0,0,0)(#1,#2,#3)}} +\def\axesIIID@ii(#1,#2,#3)(#4,#5,#6){% axes 3d + \pst@killglue% + \begingroup% + \addbefore@par{arrows=->}% + \use@par% + \psPoint(0,0,0){O} + \psPoint(#1,0,0){X} + \psPoint(0,#2,0){Y} + \psPoint(0,0,#3){Z} + \psPoint(#4,0,0){X'} + \psPoint(0,#5,0){Y'} + \psPoint(0,0,#6){Z'} + \psPoint(#4 \pst@number\pslabelsep \pst@number\psunit div add,0, 0) + {Xname} + \psPoint(0, #5 \pst@number\pslabelsep \pst@number\psunit div add, 0) + {Yname} + \psPoint(0, 0, #6 \pst@number\pslabelsep \pst@number\psunit div add) + {Zname} + \ifPst@showOrigin + \psline[linestyle=dashed,arrows=-](O)(X) + \psline[linestyle=dashed,arrows=-](O)(Y) + \psline[linestyle=dashed,arrows=-](O)(Z) + \fi + \psline(X)(X') + \psline(Y)(Y') + \psline(Z)(Z') + \rput(Xname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph + \pst@solides@axesIIID@xname\ifPst@mathLabel$\fi} + \rput(Yname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph + \pst@solides@axesIIID@yname\ifPst@mathLabel$\fi} + \rput(Zname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph + \pst@solides@axesIIID@zname\ifPst@mathLabel$\fi} + \endgroup% + \ignorespaces% +} + + +% pour assurer la compatibilite avec PSTricks-add +\define@boolkey[psset]{pst-solides3d}[Pst@]{algebraic}[true]{} +\psset[pst-solides3d]{algebraic=false}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro \psSurface +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\psSurface{\pst@object{psSurface}} +\def\psSurface@i(#1,#2)(#3,#4)#5{{% +%% \def\hue{0 1 #3 #1 sub \pst@solides@dx\space div +%% #4 #2 sub \pst@solides@dy\space div mul +%% {/iF ED iF [1 iF #3 #1 sub \pst@solides@dx\space div +%% #4 #2 sub \pst@solides@dy\space div +%% mul div sub 0.75 1] (sethsbcolor) astr2str} for} +\ifPst@solidmemory\use@par\else\begin@ClosedObj\fi + \addto@pscode{% + 1 setlinejoin + \tx@optionssolides + SolidesDict begin +/CX 0 def /CY 0 def /CZ 0 def +/base [ #1 #3 #2 #4 ] def + \ifPst@algebraic +/fonction + (#5) tx@AlgToPs begin AlgToPs end cvx def + \else +/fonction { #5 } def + \fi +/f {2 dict begin + /y exch def + /x exch def + fonction +end } def + pst-Surface + end +}% fin du code ps + \ifPst@axesboxed + \gridIIID(#1,#3)(#2,#4) + \fi +\ifPst@solidmemory + \else +\end@ClosedObj% +\fi +}} +% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro \defFunction +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\defFunction{\@ifnextchar[{\defFunction@i}{\defFunction@i[]}} +\def\defFunction@i[#1]#2(#3)#4#5#6{% + \pst@killglue +% \psset{solidmemory} +% \global\Pst@solidmemorytrue + \begingroup + \psset{#1} + \defFunction@ii{#3}\edef\@tempa{\the\toks@}% + \ifPst@algebraic + \toks@={}% + \def\@tempb{#4}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi + \def\@tempb{#5}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi + \def\@tempb{#6}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi + \pstVerb{ +% \codejps{ + /#2 { 3 dict begin \@tempa \the\toks@ + gere_pst-deffunction end } def }% 20080625 + \else + \pstVerb{ +% \codejps{ + /#2 { 3 dict begin \the\toks@ #4 #5 #6 + gere_pst-deffunction end } def }% 20080625 + \fi% + \endgroup} +% +\def\defFunction@ii#1{\defFunction@iii#1,,,\end} +\def\defFunction@iii#1,#2,#3,#4\end{% + \toks@={}% + \def\arg@ii{#1}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi + \def\arg@ii{#2}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi + \def\arg@ii{#3}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi + \edef\@tmpPSDefns{\the\toks@ mark }% 20080625 + \global\toks@=\expandafter{\@tmpPSDefns}}% 20080625 +\def\store@toks@before#1{% + \edef\@tmpPSDefns{/#1 exch def \the\toks@}% + \global\toks@=\expandafter{\@tmpPSDefns}% +} +\def\store@toks@after#1{% + \edef\@tmpPSDefns{\the\toks@ (#1) tx@AlgToPs begin AlgToPs end cvx }% + \global\toks@=\expandafter{\@tmpPSDefns}% +} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% la macro de projection +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% creation des variables pour PSTricks +\define@boolkey[psset]{pst-solides3d}[Pst@]{visibility}[false]{} +\psset{visibility=true} +\define@key[psset]{pst-solides3d}{normal}{\def\pst@solides@normal{#1}} +\psset[pst-solides3d]{normal=0 0 1} +% origine du plan +\define@key[psset]{pst-solides3d}{origine}{\def\pst@solides@origin{#1}} % origine du plan +\psset[pst-solides3d]{origine=0 0 0 }% +%% le range pour les fonctions numeriques +\define@key[psset]{pst-solides3d}{range}{\def\pst@solides@range{#1}} +\psset[pst-solides3d]{range=-5 5}% le range par defaut +%% le chemin a projeter +\define@key[psset]{pst-solides3d}{path}{\def\pst@solides@path{#1}}% +\psset[pst-solides3d]{path=newpath 0 0 moveto}% valeur par defaut +%% fonctions utilisees +\define@key[psset]{pst-solides3d}{function}{\def\pst@solides@function{#1}}% +\psset[pst-solides3d]{function=}% pas de valeur par defaut +% rotation du texte dans son plan +\define@key[psset]{pst-solides3d}{RotationAngleText}{\def\pst@solides@RotationAngleText{#1}} % origine du plan +\psset[pst-solides3d]{RotationAngleText=0 }% +% texte a projeter +\define@key[psset]{pst-solides3d}{text}{\def\pst@solides@text{#1}} +\psset[pst-solides3d]{text=}% pas de texte par defaut +% plan de projection +\define@key[psset]{pst-solides3d}{plan}{\def\pst@solides@plan{#1}} +\psset[pst-solides3d]{plan=}% pas de plan par defaut +% position du texte a projeter +\define@key[psset]{pst-solides3d}{pos}{\def\pst@solides@pos{#1}} +\psset[pst-solides3d]{pos=cc}% centre par defaut + +%% transcription et inclusion des variables dans le fichier postscript +\pst@def{psProjection}<% +/projectionsifacevisible \ifPst@visibility true \else false \fi def +/isolatin \ifPst@isolatin true \else false \fi def +/solidlinewidth {\pst@number\pslinewidth} def +/PSfont {\pst@solides@PSfont} def +/normale {\pst@solides@normal} bind def +/fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def +/origin {\pst@solides@origin} def +/RotationAngleText {\pst@solides@RotationAngleText} def +/range [ \pst@solides@range ] def +/path { \pst@solides@path } def +/function { \pst@solides@function } def +/texte (\pst@solides@text) def +/pos (\pst@solides@pos) def +/proj-definition (\pst@solides@definition) def +/proj-args { \pst@solides@args} def +/proj-action (\pst@solides@action) def +\ifx\pst@solides@name\@empty + \else +/projname (\pst@solides@name) def +\fi +\ifx\pst@solides@plan\@empty + \else +/planprojpst \pst@solides@plan \space def +\fi +\ifx\pst@solides@solidname\@empty + \else +/solidprojname {\pst@solides@solidname\space} def +\fi +/noface \pst@solides@no\space def % no de la face du solide +/resolution \pst@solides@resolution\space def % pour le nb de points par courbe +> + +%\makeatletter +%% la macro de projection +\def\psProjection{\def\pst@par{}\pst@object{psProjection}} +\def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0,0)}} +\def\psProjection@ii(#1){\expandafter\psProjection@iii#1,,\@nil} +\def\psProjection@iii#1,#2,#3\@nil{{% + \addbefore@par{pos=cc,range=0 360}% + \def\pst@tempA{#2}% + \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi% + \addto@pscode{% + \tx@optionssolides + SolidesDict begin + \tx@psProjection + /CX 0 def + /CY 0 def + /CZ 0 def + #1/xorigine exch def + \ifx\pst@tempA\@empty + /yorigine xorigine def + /xorigine exch def\space\else + \pst@tempA\space /yorigine exch def + \fi + % nature du solide : texte, chemin, courbe + proj-\psk@solides@object\space + end + }%<- fin du code ps + \psk@fillstyle + \pst@stroke + \addto@pscode{newpath}% + \ifPst@solidmemory\else\end@ClosedObj\fi +}}% +%\makeatother + + +%% 27/06/08 %% %% la macro de projection +%% 27/06/08 %% \def\psProjection{\def\pst@par{}\pst@object{psProjection}} +%% 27/06/08 %% \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.,0.)}} +%% 27/06/08 %% \def\psProjection@ii(#1,#2,#3){{% +%% 27/06/08 %% \use@par +%% 27/06/08 %% \ifPst@solidmemory +%% 27/06/08 %% \else +%% 27/06/08 %% \begin@ClosedObj +%% 27/06/08 %% \fi +%% 27/06/08 %% \addto@pscode{% +%% 27/06/08 %% \tx@optionssolides +%% 27/06/08 %% SolidesDict begin +%% 27/06/08 %% \tx@psProjection +%% 27/06/08 %% /CX 0 def +%% 27/06/08 %% /CY 0 def +%% 27/06/08 %% /CZ 0 def +%% 27/06/08 %% /xorigine #1 def +%% 27/06/08 %% /yorigine #2 def +%% 27/06/08 %% /zorigine #3 def +%% 27/06/08 %% % nature du solide : texte, chemin, courbe +%% 27/06/08 %% proj-\psk@solides@object\space +%% 27/06/08 %% end +%% 27/06/08 %% }%<- fin du code ps +%% 27/06/08 %% \psk@fillstyle +%% 27/06/08 %% \pst@stroke +%% 27/06/08 %% \ifPst@solidmemory +%% 27/06/08 %% \else +%% 27/06/08 %% \end@ClosedObj +%% 27/06/08 %% \fi +%% 27/06/08 %% }} + +%% 28/06/08 %% \makeatletter +%% 28/06/08 %% %% la macro de projection +%% 28/06/08 %% \def\psProjection{\def\pst@par{}\pst@object{psProjection}} +%% 28/06/08 %% \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.)}} +%% 28/06/08 %% \def\psProjection@ii(#1,#2){{% +%% 28/06/08 %% \def\@tempb{#2}% +%% 28/06/08 %% \use@par +%% 28/06/08 %% \ifPst@solidmemory +%% 28/06/08 %% \else +%% 28/06/08 %% \begin@ClosedObj +%% 28/06/08 %% \fi +%% 28/06/08 %% \addto@pscode{% +%% 28/06/08 %% \tx@optionssolides +%% 28/06/08 %% SolidesDict begin +%% 28/06/08 %% \tx@psProjection +%% 28/06/08 %% /CX 0 def +%% 28/06/08 %% /CY 0 def +%% 28/06/08 %% /CZ 0 def +%% 28/06/08 %% \ifx\@tempb\@empty +%% 28/06/08 %% #1 /yorigine exch def /xorigine exch def +%% 28/06/08 %% \else +%% 28/06/08 %% #1 #2 /yorigine exch def /xorigine exch def +%% 28/06/08 %% \fi +%% 28/06/08 %% % nature du solide : texte, chemin, courbe +%% 28/06/08 %% proj-\psk@solides@object\space +%% 28/06/08 %% end +%% 28/06/08 %% }%<- fin du code ps +%% 28/06/08 %% \psk@fillstyle +%% 28/06/08 %% \pst@stroke +%% 28/06/08 %% \ifPst@solidmemory +%% 28/06/08 %% \else +%% 28/06/08 %% \end@ClosedObj +%% 28/06/08 %% \fi +%% 28/06/08 %% }} +%% 28/06/08 %% \makeatother + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% \psLineIIID est +%% adapt de la macro \pstThreeDLine du package pst-3dplot (H.Voss) +%% http://tug.ctan.org/tex-archive/graphics/pstricks/contrib/pst-3dplot +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\cartesianIIID@coor#1,#2,#3,#4\@nil{\edef\pst@coor{#1 #2 #3 }} +\def\NormalIIIDCoor{% + \def\pst@@getcoor##1{\pst@expandafter\cartesianIIID@coor{##1}, ,\@nil}% + \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% +}% + +\def\psLineIIID{\NormalIIIDCoor\pst@object{lineIIID}} +\def\lineIIID@i{% + \pst@killglue% + \pst@getarrows{% + \begin@OpenObj% + \pst@getcoors[\lineIIID@ii% + }% +} +\def\lineIIID@ii{% + \addto@pscode{% + \tx@optionssolides + SolidesDict begin + counttomark + /n exch def /n3 n 3 div cvi def + n3 { + n -3 roll + 3dto2d + xunit mul exch xunit mul exch + /n n 1 sub def + } repeat + end + \pst@cp\space \psline@iii\space \tx@Line + }% + \end@OpenObj% + \ignorespaces% + \SpecialCoor% +} + +\def\psPolygonIIID{\NormalIIIDCoor\pst@object{polygonIIID}} +\def\polygonIIID@i{% + \pst@killglue% + \pst@getarrows{% + \begin@ClosedObj% + \pst@getcoors[\polygonIIID@ii% + }% +} +\def\polygonIIID@ii{% + \addto@pscode{% + \tx@optionssolides + SolidesDict begin + counttomark + /n exch def /n3 n 3 div cvi def + n3 { + n -3 roll + 3dto2d + xunit mul exch xunit mul exch + /n n 1 sub def + } repeat + end + \pst@cp\space \psline@iii\space \tx@Polygon + }% + \end@ClosedObj% + \ignorespaces% + \SpecialCoor% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\catcode`\@=\PstAtCode\relax + + +\endinput |