Retour

Source : swf/fichierps.mp

fichierps.mp
%% ----------------------------------------------------------------------------
%% fichierps.mp
%% Macros MetaPost pour gérer en parallèle un fichier PS destiné à produire un
%% fichier PDF.
%% 29 janvier 2005 - Jean-Michel Sarlat
%% ----------------------------------------------------------------------------
 
%%
%% Déclarations
%% ----------------------------------------------------------------------------
string FichierPS;
FichierPS := jobname & ".ps";
def InsPS expr s = write s to FichierPS enddef;
 
%%
%% Dimensions du document
%% ----------------------------------------------------------------------------
if not known PageLargeur:
    PageLargeur  := 640;
    PageHauteur  := 480;
    _PLX_  := 0;
    _PLY_  := 0;
    _PRX_  := 640;
    _PRY_  := 480;
fi;
 
% PageSize enregistre les dimensions déclarées.
def PageSize(expr lx,ly,rx,ry) =
    PageLargeur  := rx - lx;
    PageHauteur  := ry - ly;
    _PLX_  := lx;
    _PLY_  := ly;
    _PRX_  := rx;
    _PRY_  := ry;
enddef;
 
% InPS insrit la figure metapost et précise la translation nécessaire.
vardef InPS =
    InsPS(decimal _PLX_ & " neg " & decimal _PLY_ & " neg translate");
    InsPS("(" & jobname & "." & decimal charcode & ") run");
enddef;
 
%%
%% ClipPageSize découpe l'image aux dimensions déclarées.
%% ----------------------------------------------------------------------------
vardef ClipPageSize =
    clip currentpicture to 
       (_PLX_,_PLY_)--(_PLX_,_PRY_)--(_PRX_,_PRY_)--(_PRX_,_PLY_)--cycle
enddef;
%% ----------------------------------------------------------------------------
 
%%
%% FondImage remplit le fond de l'image avec la couleur c
%% ----------------------------------------------------------------------------
vardef FondImage(expr c) =
    fill (_PLX_,_PLY_)--(_PLX_,_PRY_)--(_PRX_,_PRY_)--(_PRX_,_PLY_)--cycle
	withcolor c;
enddef;
%% ----------------------------------------------------------------------------
 
%%
%% CadreImage inscrit un cadre avec la couleur c et d'épaisseur e.
%% ----------------------------------------------------------------------------
vardef CadreImage(expr c,e) =
    draw (_PLX_,_PLY_)--(_PLX_,_PRY_)--(_PRX_,_PRY_)--(_PRX_,_PLY_)--cycle
	withpen pencircle scaled 2e
	withcolor c;
enddef;
%% ----------------------------------------------------------------------------
 
%%
%% Inscriptions dans le fichier PS
%% ----------------------------------------------------------------------------
% Procédure d'initialisation
def InitFichierPS(expr lx,ly,rx,ry)  =
    PageSize(lx,ly,rx,ry);
    InsPS("<< /PageSize [" 
	& decimal PageLargeur
	& " "
	& decimal PageHauteur
	& "] >> setpagedevice");
    extra_endfig := "ClipPageSize;InPS;" & extra_endfig;
enddef;
%% ----------------------------------------------------------------------------
 
endinput