\section{Using the data file types \texttt{.obj} and \texttt{.off}}

Sometimes it will helpful to use external files, either for reading or writing.
When there is a solid which needs a long time to be calculated and which
will be tested in different views or different colors, it is very
interesting to save them externally and then only reread them by
avoiding the time expensive recalculations. In particular, this technique
is often used to generate some animations.
One can also export a solid by that method to reuse with another software.

For \texttt{pst-solides3d}, all the procedures of reading$/$writing are
delegated to the  PostScript interpreter (and not to \TeX {} or \LaTeX).
 Consequently it is not the \LaTeX{} compilation that will cause the
 execution of reading$/$writing, but the visualisation of the PostScript
 file that is produced.

Generally the reading of external files by a PostScript interpreter doesn't
cause any trouble normally. The writing of files however, can cause some
security problems and it is often the case that the PostScript viewer forbids
the writing by default. So the system must be configured  to get authorisation for that writing.

\encadre{By default, under Windows and Linux, the security of files on the
hard drive is activated and doesn't allow to write on the drive.
To deactivate that security option, more or less temporarily, here the two
corresponding procedures:

\begin{description}

  \item[Linux:] The advice from Jean-Michel \textsc{Sarlat}: the simplest will
  be to use GhostScript directly, within the console. As there is no image to wait for:

\$$>$ gs  -dNOSAFER  monfichier.ps quit.ps
  \item[Windows:] Within the menue \texttt{Options}, the option
    \textsf{Security of files} must be turned to unchecked.
\end{description}}


\subsection{\texttt{\Index{.dat}} files (specific to \texttt{pst-solides3d})}

In \texttt{pst-solides3d}, the data structure used for a solid has 4 fields.
It can be stored in a set of $4$
\texttt{.dat} files.


\subsubsection{Writing \texttt{.dat} files}

One uses the action \Lkeyword{writesolid} within \Lcs{psSolid}, and one
uses the option \Lkeyword{file} to specify the name of the file.

For example, let's look at the code below:
\begin{verbatim}
\psSolid[object=tore,
   filename=montore,
   action=writesolid]
\end{verbatim}

The command chain
\Cadre{LaTeX->dvips->GSview (Windows) or gv (Linux)}
first compiles, then transforms into PostScript to finally get
visualised.

That last operation creates 4 files:
\begin{compactitem}
  \item \texttt{montore-sommets.dat  } $\rightarrow$ the list of the vertices;
  \item \texttt{montore-faces.dat    } $\rightarrow$ the list of the faces;
  \item \texttt{montore-couleurs.dat } $\rightarrow$ the colors of the faces;
  \item \texttt{montore-io.dat       } $\rightarrow$ the limits of the indices
  of the external and internal faces.
\end{compactitem}
\encadre{All these four files will automatically be saved within the same folder as the generating file.}

\subsubsection{Reading \texttt{.dat} files}

We use the object \Lkeyword{datfile} of \Lcs{psSolid}, with the argument
\Lkeyword{file} to specify the name.
Now the code
\begin{verbatim}
\psSolid[object=datfile, filename=montore]
\end{verbatim}
will allow us to use the object---now saved in the \texttt{.dat} files generated---
as described in the previous paragraph.

\subsection{\texttt{.obj} files}

We use only a simplified form of the \texttt{.obj} format. In particular, the
files should not contain a character like
\verb+#+ (the character for a comment in that format).

This format just uses a single file and permits within this file to specify
the vertices and the faces.

\subsubsection{Writing \texttt{\Index{.obj}} files}

One uses the action \Lkeyword{writeobj} in \Lcs{psSolid}, and one uses
the option \Lkeyword{file} to specify the name of the file.

For example, the code below:
\begin{verbatim}
\psSolid[object=tore,
   filename=montore,
   action=writeobj]
\end{verbatim}
will produce a single file \texttt{montore.obj} (after compilation and
visualisation of the \texttt{.ps} that was produced).

\subsubsection{Reading \texttt{.obj} files}

One uses the option \Lkeyword{objfile} of \Lcs{psSolid}, with the argument
\Lkeyword{file} to specify the name of the file.
Now the following code
\begin{verbatim}
\psSolid[object=objfile, filename=montore]
\end{verbatim}
will allow to use the object---now saved in the \texttt{.obj} file generated---as
described in the previous paragraph.

\begin{LTXexample}[width=6cm]
\psset{viewpoint=20 15 10 rtp2xyz,Decran=20}
\begin{pspicture}(-3,-4)(3,3)
\psframe*[linecolor=cyan!50](-3,-4)(1,3)
\psSolid[object=objfile,
         unit=20,RotX=60,
         filename=data/rocket]%
\end{pspicture}
\end{LTXexample}



\subsection{\texttt{.off} files}

We use only a simplified form of the \texttt{.off} format. In particular, these
files only comprise \verb+v+ and \verb+f+ entries.

This format just uses a single file and permits within this file to specify the
vertices and the faces.

\subsubsection{Writing \texttt{\Index{.off}} files}

We use the action \Lkeyword{writeobj} in \Lcs{psSolid}, and we use the option
 \Lkeyword{file} to specify the name of the file.

For example the code below:
\begin{verbatim}
\psSolid[object=tore,
   filename=montore,
   action=writeoff]
\end{verbatim}
will produce the \texttt{montore.off} file (after compilation and
visualisation of the \texttt{.ps} that was produced).

\subsubsection{Reading.off files}

We use the option \Lkeyword{offfile} of \Lcs{psSolid}, with the argument
\Lkeyword{file} to specify the name of the file.
Now the following code
\begin{verbatim}
\psSolid[object=offfile, filename=montore]
\end{verbatim}
will allow to use the object---now saved in the \texttt{.off} file
generated---like described in the previous paragraph.

\endinput
