Recherche…


Dessiner (décrire) un polygone

Cet exemple tente de reproduire le comportement des opérateurs de construction de chemin intégrés tels que arc .

S'il y a un point actuel, poly trace d'abord une ligne vers (x, y) + (r, 0), sinon il commence par se déplacer vers ce point.

Au lieu de gsave ... grestore (qui a pour effet indésirable de supprimer les modifications que nous souhaitons), il enregistre une copie de la matrice de transformation actuelle (CTM) telle qu'elle existe au démarrage de la fonction.

Ensuite, il fait un lineto à chaque point suivant, ce qui en lineto à l'échelle et en tournant la matrice est toujours à (0,1). Enfin, il appelle closepath puis restaure la matrice enregistrée en tant que CTM.

% x y n radius  poly  -
% construct a path of a closed n-polygon
/poly {
    matrix currentmatrix 5 1 roll  % matrix x y n radius
    4 2 roll translate             % matrix n radius
    dup scale                      % matrix n
    360 1 index div exch           % matrix 360/n n
    0 1 {lineto currentpoint moveto}stopped{moveto}if   % start or re-start subpath
    {                              % matrix 360/n
        dup rotate                 % matrix 360/n
        0 1 lineto                 % matrix 360/n
    } repeat                 % matrix 360/n
    pop                      % matrix
    closepath                % matrix
    setmatrix                %
} def

Itérer à travers un chemin

Cet extrait extrait le contenu du chemin actuel vers stdout. Il utilise la procédure ghostscript =only qui peut ne pas être disponible sur tous les interpréteurs. Une procédure équivalente sur les interpréteurs Adobe est appelée =print .

pathforall est un opérateur de boucle qui prend 4 corps de procédure comme arguments appelés pour les types spécifiques d'éléments de chemin, le résultat de moveto , lineto , curveto , closepath et tous les autres opérateurs de construction de chemin qui se résument à ces éléments.

{ exch =only ( ) print =only ( ) print /moveto =} 
{ exch =only ( ) print =only ( ) print /lineto =}
{ 6 -2 roll exch =only ( ) print =only ( ) print
  4 2 roll exch =only ( ) print =only ( ) print
  exch =only ( ) print =only ( ) print /curveto =}
{ /closepath = }
pathforall

Papier graphique

/in {72 mul} def
/delta {1 in 10 div} def
/X 612 def
/Y 792 def
0 delta Y {
    0 1 index X exch  % i 0 X i
    moveto exch       % 0 i
    lineto
    stroke
} for
0 delta X {
    0 1 index Y  % i 0 i Y
    moveto       % i 0
    lineto
    stroke
} for
showpage


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow