Il peut être parfois utile d'utiliser des fichiers externes, que ce soit en lecture ou en écriture. Par exemple, lorsque l'on a construit des solides nécessitant de longs temps de calcul et que l'on veut tester différents points de vues ou différentes couleurs, il peut être intéressant de sauvegarder ces solides pour les relire ensuite, ce qui évitera de les recalculer. En particulier, cette technique est souvent utilisé pour construire des animations. On peut aussi avoir envie d'exporter un solide pour le réutiliser avec un autre logiciel. Pour pst-solides3d, le choix a été fait de déléguer toutes les procédures de lecture$/$écriture à l'interpréteur postscript (et non pas à \TeX {} ou \LaTeX). En conséquence, ce n'est pas la compilation \LaTeX {} qui provoquera l'exécution d'un ordre de lecture$/$écriture, mais la visualisation du fichier postscript produit. En règle générale, la lecture de fichiers externes par un interpréteur postscript ne pose pas de problème (s'il n'y a pas franchissement de répertoire). Pour l'écriture en revanche, cela peut poser des problèmes de sécurité et il n'est pas rare que le visualisateur postscript interdise l'écriture par défaut. Il faut alors le configurer pour autoriser cette écriture. \encadre{Par défaut, sous Windows et Linux, la protection des fichiers du disque dur est activée et ne permet donc pas l'écriture sur le disque. Pour désactiver cette protection, tout au moins temporairement, voici les deux procédures correspondantes : \begin{description} \item[Linux : ] le plus simple est donc d'utiliser ghostscript directement, en console. Comme il n'y a rien à attendre comme image : \$> gs -dNOSAFER monfichier.ps quit.ps \item[Windows : ] dans le menu \textsf{Options}, l'option \textsf{Protection des fichiers} ne doit pas être cochée. \end{description}} \section {Fichiers .dat (spécifique à pst-solides3d)} Dans pst-solides3d, la structure de données utilisée pour un solide comporte $4$~champs. Elle peut être stockée dans un ensemble de $4$ fichiers .dat. \subsection {\' Ecriture de fichiers .dat} On utilise l'action \Cadre{[action=writesolid} dans \verb+\psSolid+, et on utilise l'option \Cadre{file} pour spécifier le nom du fichier. Par exemple, considérons le code ci-dessous~: \begin{verbatim} \psSolid[object=tore, file=montore, action=writesolid] \end{verbatim} La chaîne de commandes \Cadre{LaTeX->dvips->GSview (Windows)ou gv (Linux)} permet de compiler, puis de transformer en postscript pour enfin visualiser. Cette dernière opération va créer 4 fichiers : \begin{itemize} \item \texttt{montore-sommets.dat } -> la liste des sommets ; \item \texttt{montore-faces.dat } -> la liste des faces ; \item \texttt{montore-couleurs.dat } -> les couleurs des faces ; \item \texttt{montore-io.dat } -> les bornes des indices des faces externes et internes. \end{itemize} \subsection {Lecture de fichiers .dat} On utilise l'objet \Cadre{[object=datfile]} de \verb+\psSolid+, avec l'argument \Cadre{file} pour spécifier le nom du fichier. Ainsi le code \begin{verbatim} \psSolid[object=datfile, file=montore] \end{verbatim} va permettre d'utiliser l'objet stocké dans les fichiers .dat créés au paragraphe précédent. \section {Fichiers .obj} Ce format n'utilise qu'un seul fichier, et permet de spécifier sommets et faces. Ce sont des fichiers très utilisés dans le domaine de la 3D et qu'on trouve en abondance sur internet. Par contre, nous n'utilisons qu'une forme simplifiée du format obj. On veillera à supprimer tous les commentaires \texttt{\#} du fichier original et ne conserver que les sommets : ce sont les lignes qui commencent par \texttt{v} et les faces, lignes commençant par \texttt{f}. Les fichiers trop volumineux ne seront pas pris en compte car le nombre maximal d'éléments pour un tableau \texttt{postscript} est 65535. Donc il faut que le nombre de sommets soit inférieur à 21845. \subsection {\' Ecriture de fichiers .obj} On utilise l'action \Cadre{[action=writeobj} dans \verb+\psSolid+, et on utilise l'option \Cadre{file} pour spécifier le nom du fichier. Par exemple, le code ci-dessous~: \begin{verbatim} \psSolid[object=tore, file=montore, action=writeobj] \end{verbatim} produira le fichier \textsl{montore.obj} (après compilation et visualisation du .ps produit). \subsection {Lecture de fichiers .obj} On utilise l'objet \Cadre{[object=objfile} de \verb+\psSolid+, avec l'argument \Cadre{file} pour spécifier le nom du fichier. Ainsi le code \begin{verbatim} \psSolid[object=objfile, file=montore] \end{verbatim} va permettre d'utiliser l'objet stocké dans les fichiers .obj créés au paragraphe précédent. \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, file=rocket]% \end{pspicture} \end{LTXexample} \section {Fichiers .off} Nous n'utilisons qu'une forme simplifiée du format off. En particulier, les fichiers ne doivent comporter que des entrées \verb+v+ ou \verb+f+. Ce format n'utilise qu'un seul fichier, et permet de spécifier sommets et faces. \subsection {\' Ecriture de fichiers .off} On utilise l'action \Cadre{[action=writeoff]} dans \verb+\psSolid+, et on utilise l'option \Cadre{file} pour spécifier le nom du fichier. Par exemple, le code ci-dessous~: \begin{verbatim} \psSolid[object=tore, file=montore, action=writeoff] \end{verbatim} produira le fichier \textsl{montore.off} (après compilation et visualisation du .ps produit). \subsection {Lecture de fichiers .off} On utilise l'objet \Cadre{[object=offfile} de \verb+\psSolid+, avec l'argument \Cadre{file} pour spécifier le nom du fichier. Ainsi le code \begin{verbatim} \psSolid[object=offfile, file=montore] \end{verbatim} va permettre d'utiliser l'objet stocké dans les fichiers .off créés au paragraphe précédent.