ps2pdf, pdf2swf et les pointillés

Il y a un problème de rendu des pointillés lorsque, partant d'un fichier EPS, on le transforme en PDF (avec ps2pdf ou epstopdf) puis en SWF. Les images ci-dessous permettent de s'en rendre compte.

Image PNG (conversion EPS vers PNG avec convert):

image PNG

Image SWF (conversion EPS vers PDF puis SWF):

Animation flash

Il est alors étonnant de constater que si l'on insère la figure dans un document LaTeX et que l'on en tire un fichier PDF avec pdflatex alors le problème disparaît!

Animation flash

Il doit donc y avoir une solution au problème posé dans l'utilisation de ps2pdf

Après quelques recherches, il me semble avoir trouvé une solution. pdf2swf traite bien les pointillés (dash) mais attend, semble t-il, que les chemins soient sous forme de lignes polygonales (flattenpath). Il convient donc de forcer leur construction, ce que ghostscript permet avec l'instruction .dashpath.
La mise en œuvre passe par une redéfinition de la procédure stroke dans le fichier EPS initial:

%% -- fin du prologue.
% Mise en réserve de la procédure stroke originelle.
/sysstroke {systemdict /stroke get exec} def
% Mise en place de la nouvelle procédure embarquant .dashpath.
/stroke {.dashpath sysstroke} def
%% -- début de la description.

L'effet est le suivant: l'instruction .dashpath force la transformation du chemin courant en ligne polygonale — dont la finesse peut être contrôlée par setflat — avant qu'il ne soit encré.

Cette adaptation est utile avec metapost puisque ps2pdf fournit un moyen rapide d'assembler les nombreuses images (avec un fichier comme celui-ci, généré dans le même temps) afin de produire une animation comme celle qui est présentée ci-dessous.

(17 juin 2007) — Adaptation détaillée d'une animation: intersection d'un cube et d'un plan.