\section{Sectioning a solid with a plane}

\subsection{Drawing the \Index{intersection} between a plane and a solid}

\subsubsection{The parameters}

The option \texttt{intersectionplan=\{[a b c d]\}} allows the user
to draw the intersection between a plane and a solid. The numbers
between the braces are the coefficients of the affine plane with
equation: $ax+by+cz+d=0$. It is possible to draw the intersection
between a solid and more than one plane by placing the appropriate
parameters in order, as in the following example.

The drawing is activated with \texttt{\texttt{\Lkeyword{intersectiontype}=0}} or any
value $\geq0$.

The colour of the intersection line is chosen with the option
\texttt{\Lkeyword{intersectioncolor}=(bleu) (rouge) etc.}. In the same order,
the thickness of the appropriate line
\texttt{\Lkeyword{intersectionlinewidth}=1 2 etc.} (dimensions in picas) is
set up.


The hidden parts, drawn with dashed lines, will be shown with
\Lkeyword{action}=\Lkeyval{draw}.

\begin{LTXexample}[width=7cm]
\begin{pspicture}(-3,-2)(3,7.5)
\psset{viewpoint=50 20 20 rtp2xyz,Decran=50}
\psset{lightsrc=viewpoint} 
\psSolid[object=cylindre,
   ngrid=1 24,
   r=2,
   fillcolor=yellow!25,
   intersectiontype=0,
   intersectionplan={
      [0 0 1 -1]
      [0 0 1 -2]
      [0 0 1 -3]
      [0.894 0 0.447 -1.8]},
   intersectioncolor=(bleu) (rouge) (vert) (rose),
   intersectionlinewidth=1 1.5 1.8 2.2]
\axesIIID(2,2,6)(3,3,7)
\end{pspicture}
\end{LTXexample}

\subsection{Slicing a solid}

\subsubsection{Slicing a filled solid}

The object under consideration is a cylinder. The plane that
slices the object is defined by:

 \begin{verbatim}
  plansepare={[a b c d]}
 \end{verbatim}

The two parts are not drawn, but memorised with the name
\texttt{\Lkeyword{name}=partiescylindre}:

 \begin{verbatim}
\psset{solidmemory}
\psSolid[object=cylindre,
   r=2,h=6
   ngrid=6 24,
   plansepare={[0.707 0 0.707 0]},
   name=partiescylindre,
   action=none](0,0,-3)
 \end{verbatim}


Then they are displayed separately using their respective index
numbers. The numbering of the two parts is determined by the
direction of the normal to the \Index{slicing} plane: 0 if above the
normal, 1 if below. For both parts, the sliced face carries the
number 0. If there are several sliced faces, as may happen in the
case of a torus, they are numbered 0, 1 etc.


 \begin{verbatim}
\psSolid[object=load,
   load=partiescylindre1,
   fillcolor={[rgb]{0.7 1 0.7 }},
   fcol=0 (1 1 0.7 setrgbcolor)]
\psSolid[object=load,
   load=partiescylindre0,RotZ=60,
   fillcolor={[rgb]{0.7 1 0.7 }},
   fcol=0 (1 1 0.7 setrgbcolor)](0,4,0)
 \end{verbatim}

\begin{center}
\begin{pspicture}(-4,-5)(7,4)
\psframe(-4,-5)(7,4)
\psset{viewpoint=50 -40 10 rtp2xyz,Decran=50,linecolor=darkgray}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,action=draw,
   base=-3 5 -3 5,
   linecolor=red](0,0,-3)
\psset{solidmemory}
\psSolid[object=cylindre,
   r=2,h=6,
   ngrid=6 24,
   plansepare={[0.707 0 0.707 0]},
   name=partiescylindre,
   action=none](0,0,-3)
\psSolid[object=load,
   load=partiescylindre1,
   fillcolor={[rgb]{0.7 1 0.7 }},
   fcol=0 (1 1 0.7 setrgbcolor)]
\psSolid[object=load,
   load=partiescylindre0,RotZ=90,
   fillcolor={[rgb]{0.7 1 0.7 }},
   fcol=0 (1 1 0.7 setrgbcolor)](0,4,0)
\psSolid[object=plan,action=draw,
   definition=equation,
   args={[0.707 0 0.707 0] 90},
   base=-2 2 -3 3,planmarks,showBase]
\axesIIID(0,0,0)(2.5,2.5,3.5)
\end{pspicture}
\end{center}

\subsubsection{Slicing a \Index{hollow solid}}

The options \verb+rm=0,hollow+ allow us to not only remove a
face \verb+rm=0+ but also to see inside it \Lkeyword{hollow}.

\begin{center}
\begin{pspicture}(-4,-5)(7,4)
\psframe(-4,-5)(7,4)
\psset{viewpoint=50 -40 10 rtp2xyz,Decran=50,linecolor=darkgray}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,action=draw,
   base=-3 5 -3 5,
   linecolor=red](0,0,-3)
\psset{solidmemory}
\psSolid[object=cylindre,
   r=2,h=6,
   ngrid=6 24,
   plansepare={[0.707 0 0.707 0.5]},
   name=partiescylindre,
   action=none](0,0,-3)
\psSolid[object=load,
   load=partiescylindre1,
   fillcolor={[rgb]{0.7 1 0.7 }},
   rm=0,hollow,
   incolor={[rgb]{1 1 0.7}}]
\psSolid[object=load,
   load=partiescylindre0,RotZ=90,
   fillcolor={[rgb]{0.7 1 0.7 }},
   rm=0,hollow,
   incolor={[rgb]{1 1 0.7}}](0,4,0)
\psSolid[object=plan,action=draw,
   definition=equation,
   args={[0.707 0 0.707 0.5] 90},
   base=-2 2 -3 3,planmarks,showBase]
\composeSolid
\end{pspicture}
\end{center}


\subsection{\Index{Slice} of a \Index{pyramid}}

\subsubsection{Highlighting the \Index{contour lines} and first slice}

This pyramid is generated as \texttt{\Lkeyword{object}=\Lkeyval{new}} by giving a list
of the coordinates of the vertices, and the vertices of each face.

\begin{verbatim}
   sommets=
      0 -2 0 %% 0
      -2 0 0 %% 1
      0 4 0  %% 2
      4 0 0  %% 3
      0 0 5, %% 4
   faces={
    [3 2 1 0]
    [4 0 3]
    [4 3 2]
    [4 2 1]
    [4 1 0]
}
\end{verbatim}

In the first diagram, the slicing lines are highlighted.

 \begin{verbatim}
   intersectiontype=0,
   intersectionplan={[0 0 1 -1] [0 0 1 -2]},
   intersectionlinewidth=1 2,
   intersectioncolor=(bleu) (rouge)
 \end{verbatim}

Then we cut off the upper part, and draw the slicing plane as
well.

 \begin{verbatim}
\psSolid[object=new,
   sommets=
      0 -2 0 %% 0
      -2 0 0 %% 1
      0 4 0  %% 2
      4 0 0  %% 3
      0 0 5, %% 4
  faces={
     [3 2 1 0]
     [4 0 3]
     [4 3 2]
     [4 2 1]
     [4 1 0]},
   plansepare={[0 0 1 -2]},
   name=firstSlice,
   action=none]
\psSolid[object=load,action=draw*,
        load=firstSlice1]
\psSolid[object=plan,
       definition=equation,
       args={[0 0 1 -2]},
       base=-3 5 -3 5,action=draw]
 \end{verbatim}

To avoid having to repeatedly type the vertices and faces of the
pyramid, we save these data to the files:
\begin{itemize}
  \item \texttt{Pyramid-couleurs.dat}
  \item \texttt{Pyramid-faces.dat}
  \item \texttt{Pyramid-sommets.dat}
  \item \texttt{Pyramid-io.dat}
\end{itemize}
thanks to the command \Lkeyword{action}=\Lkeyval{writesolid}:

 \begin{verbatim}
\psSolid[object=new,
   sommets=
      0 -2 0 %% 0
      -2 0 0 %% 1
      0 4 0  %% 2
      4 0 0  %% 3
      0 0 5, %% 4
  faces={
     [3 2 1 0]
     [4 0 3]
     [4 3 2]
     [4 2 1]
     [4 1 0]
},filename=data/Pyramid,fillcolor=yellow!50,
  action=writesolid]
 \end{verbatim}

All these lines of code could then be removed and, thereafter, we
would recall the data with the command:

 \begin{verbatim}
\psSolid[object=datfile,
         filename=data/Pyramid]
 \end{verbatim}

\begin{center}
\psset{unit=0.75}
\begin{pspicture}(-5,-2)(5,7)
%\psframe(-5,-2)(5,7)
\psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-3 5 -3 5,
   linecolor=gray]
%% create the pyramid with base area in xy-plane
\psSolid[object=new,
   sommets=
      0 -2 0 %% 0
      -2 0 0 %% 1
      0 4 0  %% 2
      4 0 0  %% 3
      0 0 5, %% 4
faces={
   [3 2 1 0]
   [4 0 3]
   [4 3 2]
   [4 2 1]
   [4 1 0]
}, action=draw*,
   intersectiontype=0,
   intersectionplan={[0 0 1 -1]
                     [0 0 1 -2]},
   intersectionlinewidth=1 2,
   intersectioncolor=(bleu) (rouge)]
\axesIIID[linecolor=blue](4,4,5)(5,5,6)
\end{pspicture}
\hfill
\begin{pspicture}(-5,-2)(5,7)
%\psframe(-5,-2)(5,7)
\psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-3 5 -3 5,
   linecolor=gray]
\psset{solidmemory}
%% create the pyramid with base area in xy-plane
\psSolid[object=new,
   sommets=
      0 -2 0 %% 0
      -2 0 0 %% 1
      0 4 0  %% 2
      4 0 0  %% 3
      0 0 5, %% 4
faces={
   [3 2 1 0]
   [4 0 3]
   [4 3 2]
   [4 2 1]
   [4 1 0]
},
   plansepare={[0 0 1 -2]},
   name=firstSlice,
   action=none]
\psSolid[object=load,action=draw*,
        load=firstSlice1]
\psSolid[object=plan,
       definition=equation,
       args={[0 0 1 -2]},
       base=-3 5 -3 5,action=draw]
\axesIIID[linecolor=blue](4,4,2)(5,5,6)
\end{pspicture}
\end{center}

\subsubsection{The second \Index{slice} and its insertion within the \Index{pyramid}}

Having removed the upper part \texttt{firstSlice0} (which no
longer appears), we slice the frustum of the pyramid
\texttt{firstSlice1}, and keep the upper part of this as
\texttt{secondSlice0}, then we record it and insert it into a wire
frame model of the pyramid:


 \begin{verbatim}
\psset{solidmemory}
\psSolid[object=datfile,
         filename=data/Pyramid,
   plansepare={[0 0 1 -2]},
   name=firstSlice,
   action=none]
\psSolid[object=load,
        load=firstSlice1,
        action=none,
        plansepare={[0 0 1 -1]},
        name=secondSlice]
\psSolid[object=load,action=draw*,
        load=secondSlice0]
\psSolid[object=load,
       load=secondSlice0,
       filename=data/slicePyramid,
      action=writesolid]
\psSolid[object=datfile,fillcolor=yellow!50,
         filename=data/slicePyramid]
 \end{verbatim}


\begin{center}
\psset{unit=0.75}
\begin{pspicture}(-5,-2)(4,7)
%\psframe(-4,-2)(4,7)
\psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-3 5 -3 5,
   linecolor=gray]
\psset{solidmemory}
%% create the pyramid with base area in xy-plane
%\psSolid[object=new,
%   sommets=
%      0 -2 0 %% 0
%      -2 0 0 %% 1
%      0 4 0  %% 2
%      4 0 0  %% 3
%      0 0 5, %% 4
%  faces={
%     [3 2 1 0]
%     [4 0 3]
%     [4 3 2]
%     [4 2 1]
%     [4 1 0]
%},filename=data/Pyramid,fillcolor=yellow!50,
%  action=writesolid]
\psSolid[object=datfile,
         filename=data/Pyramid,
   plansepare={[0 0 1 -2]},
   name=firstSlice,
   action=none]
\psSolid[object=plan,
   definition=equation,
   args={[0 0 1 -1]},action=draw,
   base=-3 5 -3 5]
\psSolid[object=load,
        load=firstSlice1,
        action=none,
        plansepare={[0 0 1 -1]},
        name=secondSlice]
%\psSolid[object=load,action=draw*,
%        load=secondSlice0]
%\psSolid[object=load,
%       load=secondSlice0,
%       filename=data/slicePyramid,
%      action=writesolid]
\psSolid[object=datfile,fillcolor=yellow!50,
         filename=data/slicePyramid]
\psSolid[object=plan,
       definition=equation,
       args={[0 0 1 -2]},
       base=-3 5 -3 5,action=draw]
\axesIIID[linecolor=blue](0,0,2)(5,5,6)
\end{pspicture}
\hfill
\begin{pspicture}(-4,-2)(6,7)
\psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-3 5 -3 5,
   linecolor=gray]
\psSolid[object=datfile,fillcolor=yellow!50,
         filename=data/slicePyramid]
\psSolid[object=datfile,
         filename=data/Pyramid,action=draw]
\axesIIID[linecolor=blue](4,4,2)(5,5,6)
\end{pspicture}
\end{center}

\subsection{Slicing an \Index{octahedron} with a plane parallel to one of its faces}

\subsubsection{The view inside}

Recall that there are options \verb+rm=0,hollow+ that allow us,
on the one hand, to remove a face \verb+rm=0+ and, on the other,
to look inside \Lkeyword{hollow}.

In the following example, we shall start by generating the
required objects without drawing them (\texttt{\Lkeyword{action}=\Lkeyval{none}}).

We construct the octahedron, giving the center of the face with
index $1$ the name $G$, then define the point $H$ which satisfies
$\overrightarrow{OH} = 0.8\,\overrightarrow{OG}$. After that we
define $P$ to be the plane through $H$ parallel to the face of the
octahedron with index $1$. Finally, we slice the octahedron using
the plane $P$.

\begin{LTXexample}[width=7.5cm]
\begin{pspicture}(-3.5,-3)(4.5,5)
\psset{viewpoint=100 5 10 rtp2xyz,Decran=80,
   lightsrc=viewpoint,solidmemory,action=none}
\psSolid[object=octahedron,
   a=4,name=my_octahedron,]
\psSolid[object=point,
   definition=solidcentreface,
   args=my_octahedron 1,
   name=G,]
\psSolid[object=point,
   definition=mulv3d,
   args=G .8,
   name=H,]
\psSolid[object=plan,
   definition=solidface,
   args=my_octahedron 1,
   base=-4 4 -4 4,
   name=P,](H,,)
\psSolid[object=load,
   load=my_octahedron,
   plansepare=P,
   name=part]
\psSolid[object=load,load=part1,
         rm=0,hollow,action=draw**,
         fillcolor={[rgb]{0.7 1 0.7}},
         incolor={[rgb]{1 1 0.7}},]
\psSolid[object=plan,args=P,
       action=draw,showBase]
\psSolid[object=line,
   args=0 0 0 H,
   linestyle=dashed,]
\psProjection[object=point,plan=P,args=0 0,
    fontsize=20,pos=cl,text=H,phi=90,]
\axesIIID[linecolor=blue,linewidth=0.4pt](0,0,0)(4,4,4)
\end{pspicture}
\end{LTXexample}

\subsubsection{Regarding the solid as filled}

The option \verb+fcol=0 (YellowOrange)+ allows us to colour the
face with index 0.

\begin{LTXexample}[width=7.5cm]
\begin{pspicture}(-3.5,-3)(4.5,5)
\psset{viewpoint=100 5 10 rtp2xyz,Decran=80,
   lightsrc=viewpoint,solidmemory,action=none}
\psSolid[object=octahedron,
   a=4,name=my_octahedron,]
\psSolid[object=point,
   definition=solidcentreface,
   args=my_octahedron 1,
   name=G,]
\psSolid[object=point,
   definition=mulv3d,
   args=G .8,
   name=H,]
\psSolid[object=plan,
   definition=solidface,
   args=my_octahedron 1,
   base=-4 4 -4 4,
   name=P,](H,,)
\psSolid[object=load,
   load=my_octahedron,
   plansepare=P,
   name=part]
\psSolid[object=load,
   load=part1,
   fcol=0 (YellowOrange),
   action=draw**,
   fillcolor={[rgb]{0.7 1 0.7}},]
\psSolid[object=plan,args=P,
       action=draw,showBase]
\psSolid[object=line,
   args=0 0 0 H,
   linestyle=dashed,]
\psProjection[object=point,plan=P,args=0 0,
    fontsize=20,pos=cl,text=H,phi=90,]
\axesIIID[linecolor=blue,linewidth=0.4pt](0,0,0)(4,4,4)
\end{pspicture}
\end{LTXexample}

\subsubsection{The two parts of a sliced solid}

You will recall that the direction of the normal of the slicing
plane determines the numbering of the two parts: 0 if above the
normal, 1 if below. For both parts, the sliced face carries the
number 0. If there are several sliced faces, as in the case of the
torus, they are numbered 0, 1 etc.

Using two steps, we memorise both parts of the sliced solid:

 \begin{verbatim}
\psSolid[object=load,
   load=my_octahedron,
   plansepare=P,
   name=part]
 \end{verbatim}

Then we position and render each part:

 \begin{verbatim}
\psSolid[object=load,
         fcol=0 (YellowOrange),
         fillcolor={[rgb]{0.7 1 0.7}},
        load=part1]
\psSolid[object=load,
         fillcolor={[rgb]{0.7 1 0.7}},
        load=part0](H 2 mulv3d,,)
\composeSolid
 \end{verbatim}


\begin{LTXexample}[width=7.5cm]
\begin{pspicture}(-3.5,-3)(4.5,5)
\psset{viewpoint=100 5 20 rtp2xyz,Decran=150,
   lightsrc=viewpoint,solidmemory,action=none}
\psSolid[object=octahedron,
   a=2,name=my_octahedron,]
\psSolid[object=point,
   definition=solidcentreface,
   args=my_octahedron 1,
   name=G,]
\psSolid[object=point,
   definition=mulv3d,
   args=G .7,
   name=H,]
\psSolid[object=plan,
   definition=solidface,
   args=my_octahedron 1,
   base=-4 4 -4 4,
   name=P,](H,,)
\psSolid[object=load,
   load=my_octahedron,
   plansepare=P,
   name=part]
\psset{action=draw**}
\psSolid[object=load,
   load=part1,
   fcol=0 (YellowOrange),
   fillcolor={[rgb]{0.7 1 0.7}},]
\psSolid[object=load,
         fillcolor={[rgb]{0.7 1 0.7}},
        load=part0](H 2 mulv3d,,)
\composeSolid
\end{pspicture}
\end{LTXexample}

\subsection{Slices of a cube}

\subsubsection{Highlighting the edges of the cut}

\begin{LTXexample}[width=8cm]
\psset{viewpoint=100 30 20 rtp2xyz,Decran=150}
\begin{pspicture}(-4,-3)(4,5)
\psset{solidmemory}
\psSolid[object=plan,definition=normalpoint,
   args={1 1 1 [1 1 1]},action=none,name=P]
\psSolid[object=cube,a=2,action=draw,
   intersectiontype=0,
   intersectionplan=P,
   intersectionlinewidth=2,
   intersectioncolor=(rouge),
](1,1,1)
\psProjection[object=point,
   args=0 0,fontsize=10,pos=dc,
   text=H,phi=-30,plan=P,
]
\psSolid[object=line,
   linestyle=dashed,
   args=0 0 0 1 1 1]
\psSolid[object=vecteur,
   linecolor=red,
   args=1 1 1 .7 mulv3d](1,1,1)
\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
\end{pspicture}
\end{LTXexample}

\subsubsection{Showing the sliced cube with its hexagonal cut face}

\begin{LTXexample}[width=8cm]
\psset{viewpoint=100 30 20 rtp2xyz,Decran=150}
\begin{pspicture}(-4,-3)(4,5)
\psset{solidmemory}
\psSolid[object=plan,action=none,definition=normalpoint,
   args={1 1 1 [1 1 1]},name=P]
\psSolid[object=cube,a=2,
   plansepare=P,
   action=none,
   name=parts_cube,
](1,1,1)
\psSolid[object=load,
         load=parts_cube1,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
]
\psProjection[object=point,
   args=0 0,fontsize=10,pos=dc,
   text=H,phi=-30,plan=P,
]
\psSolid[object=vecteur,
   linecolor=red,
   args=1 1 1 .7 mulv3d](1,1,1)
\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
\end{pspicture}
\end{LTXexample}

\subsubsection{The sliced cube in various positions}

Where we use the option that allows us to memorise a solid, in
order to put the truncated cube, after undergoing various
transformations, down on its cut face.

 \begin{verbatim}
\psset{solidmemory}
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         name=C1,
         action=none,
         filename=data/cubeHexagone]
 \end{verbatim}


\begin{center}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-2)(3,3)
\psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-2 3 -2 3,
   linecolor=gray]
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         filename=data/cubeHexagone]
\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
\end{pspicture}

\hfil

\begin{pspicture}(-2,-3)(4,3)
\psframe(-2,-2)(4,3)
\psset{viewpoint=100 -30 20 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-2 3 -2 3,
   linecolor=gray]
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         filename=data/cubeHexagone]
\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
\end{pspicture}

\begin{pspicture}(-3,-2)(3,3)
\psframe(-3,-2)(3,3)
\psset{viewpoint=100 225 20 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-2 3 -2 3,
   linecolor=gray]
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         filename=data/cubeHexagone]
\axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5)
\end{pspicture}
\hfil
\begin{pspicture}(-3,-2)(3,3)
\psframe(-3,-2)(3,3)
\psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-2 3 -2 3,
   linecolor=gray]
\psset{solidmemory}
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         name=C1,
         action=none,
         filename=data/cubeHexagone]
\codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform
drawsolid**
}
\axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5)
\end{pspicture}

\begin{pspicture}(-3,-2)(3,4)
\psframe(-3,-2)(3,3)
\psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-2 3 -2 3,
   linecolor=gray]
\psset{solidmemory}
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         name=C1,
         action=none,
         filename=data/cubeHexagone]
\codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform
            {0 0 45 rotateOpoint3d} solidtransform
drawsolid**
}
%\composeSolid
\axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5)
\end{pspicture}
\hfil
\begin{pspicture}(-3,-2)(3,4)
\psframe(-3,-2)(3,3)
\psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\psSolid[object=grille,
   base=-2 3 -2 3,
   linecolor=gray]
\psset{solidmemory}
\psSolid[object=datfile,
         fcol=0 (Dandelion),
         fillcolor={[rgb]{0.7 1 0.7}},
         name=C1,
         action=none,
         filename=data/cubeHexagone]
\codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform
            {0 0 45 rotateOpoint3d} solidtransform
            {-35.2644 -90 add 0 0 rotateOpoint3d} solidtransform
drawsolid*
}
\axesIIID[linecolor=blue](1,2.5,0.5)(2.5,3,2.5)
\end{pspicture}
\end{center}


\subsection{Multiple sections}

\subsubsection{Slicing a sphere with PStricks}

\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-4)(4,4)
\psset{viewpoint=100 20 20 rtp2xyz,Decran=75}
\psset{solidmemory,lightsrc=viewpoint}
\codejps{
   /coeff 0.75 def /rO 4 def /OH coeff rO mul neg def}%
\psSolid[object=sphere,
   r=rO,ngrid=9 18,
   plansepare={[1 0 0 OH]},
   name=part,
   action=none]
\psSolid[object=load,
   load=part1,plansepare={[-1 0 0 OH]},action=none,name=part]
\psSolid[object=load,
   load=part1,plansepare={[0 1 0 OH]},action=none,name=part]
\psSolid[object=load,
   load=part1,plansepare={[0 -1 0 OH]},action=none,name=part]
\psSolid[object=load,
   load=part1,plansepare={[0 0 1 OH]},action=none,name=part]
\psSolid[object=load,
   load=part1,plansepare={[0 0 -1 OH]},action=none,name=part]
\psSolid[object=load,hue=.1 .8 0.5 1,
   load=part1](0,0,0)
\composeSolid
\end{pspicture}
\end{LTXexample}

\subsubsection{Multiple sections of a \Index{parallelepiped}}

Multiple sections are better carried out inside a PostScript loop,
within \verb+\codejps+; it's easier and quicker!

In this example, the original solid is a parallelepiped.
Truncations of the vertices and chamfering of the edges are
effected by means of slicing planes, starting off with the
vertices and finishing with the edges.

\begin{LTXexample}[width=7cm]
\begin{pspicture}(-3.5,-4)(3.5,4)
\psset{viewpoint=100 -20 10 rtp2xyz,Decran=100}
%\lightsource
\psset{lightsrc=viewpoint}
\codejps{
4 4 6 newparallelepiped
45 90 360 {
/iAngle exch def
  /n_x iAngle cos 35.2644 cos mul def
  /n_y iAngle sin 35.2644 cos mul def
  /n_z 35.2644 sin def
  /distance 2 3 add 3 sqrt div neg def
[ n_x n_y n_z distance]
solidplansepare
} for
45 90 360 {
/iAngle exch def
  /n_x iAngle cos 35.2644 cos mul def
  /n_y iAngle sin 35.2644 cos mul def
  /n_z 35.2644 sin neg def
  /distance 2 3 add 3 sqrt div neg def
[ n_x n_y n_z distance]
solidplansepare
} for
45 90 360 {
/iAngle exch def
% plan : ax+by+cz-d=0
[ iAngle cos % a
  iAngle sin % b
  0 % c
  -2.5 % -d
] solidplansepare
} for
dup [.5 .2] solidputhuecolors
solidlightOn
drawsolid*}
\end{pspicture}
\end{LTXexample}
\subsection{Sections of a torus}
%\begin{pspicture}(-6,-4)(6,4)
%\psSolid[r1=3,r0=1.5,
%         object=tore,
%%         ngrid=18 60,
%         filename=data/tore1860,action=writesolid]
%\end{pspicture}

\begin{center}
\begin{pspicture}(-6,-4)(6,4)
\pstVerb{/Ampl 3 2 sqrt mul def}%
\psset{viewpoint=50 -10 30 rtp2xyz,Decran=50}
%\lightsource
\psset{lightsrc=viewpoint}
\psframe[fillstyle=solid,fillcolor=gray!50](-6,-4)(6,4)
%\psset{solidmemory}
%\psSolid[object=datfile,filename=data/tore1860,
%         plansepare={[1 0 0 -1.5]},
%         name=lemniscate,
%         action=none](0,0,0)
%\psSolid[object=load,
%        load=lemniscate1,
%       filename=data/tore1860lemniscate,action=writesolid](0,0,0)
\defFunction[algebraic]{lemniscate}(t){1.5}{Ampl*sin(t)/(1+cos(t)*cos(t))}{Ampl*sin(t)*cos(t)/(1+cos(t)*cos(t))}
\psSolid[object=datfile,filename=data/tore1860lemniscate,
        fcol=0 (0.5 0.72 0.5 setrgbcolor)
             1 (0.5 0.72 0.5 setrgbcolor),
        fillcolor=green!30,
        intersectiontype=0,
        intersectionplan={
        [1 0 0 -1.5]},
        intersectioncolor=(rouge),
        intersectionlinewidth=2.2]
\psSolid[object=courbe,r=0,linewidth=2pt,
        range=0 6.28,
        linecolor=red,
        function=lemniscate]%
\psSolid[object=plan,action=draw,
   definition=equation,
   args={[1 0 0 -1.5] 90},
   base=-5 5 -2 2,planmarks,showBase]
%\composeSolid
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-6,-4)(6,4)
\pstVerb{/Ampl 3 2 sqrt mul def}%
\psset{viewpoint=50 -10 30 rtp2xyz,Decran=50}
%\lightsource
\psset{lightsrc=viewpoint}
\psframe[fillstyle=solid,fillcolor=gray!50](-6,-4)(6,4)
\defFunction[algebraic]{lemniscate}(t){1.5}{Ampl*sin(t)/(1+cos(t)*cos(t))}{Ampl*sin(t)*cos(t)/(1+cos(t)*cos(t))}
\psSolid[object=datfile,filename=data/tore1860lemniscate,
        hollow,
        rm=0 1,
        fillcolor=green!30,incolor=yellow!50]
\psSolid[object=courbe,r=0,linewidth=2pt,
        range=0 6.28,
        linecolor=red,
        function=lemniscate]%
\psSolid[object=plan,action=draw,
   definition=equation,
   args={[1 0 0 -1.5] 90},
   base=-5 5 -2 2,planmarks,showBase]
\end{pspicture}
\end{center}
\subsection{Some more examples}
\begin{enumerate}
\item
You will find a \textit{jps} coded version of this document
within the \verb+\codejps+ command in the following document:

\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections}}
\item A lesson about conic sections on:

\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/sections-cone}}
\item A lesson about cylindrical sections on:

\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-cylindre}}
\item A lesson about sections of a torus on:

\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-tore}}
\end{enumerate}


\endinput
