postscript
Pad aanleg
Zoeken…
Een polygoon tekenen (beschrijven)
Dit voorbeeld probeert het gedrag van de ingebouwde padconstructie-exploitanten zoals arc
na te bootsen.
Als er een huidig punt is, trekt poly
eerst een lijn naar (x, y) + (r, 0), anders begint het door naar dat punt te gaan.
In plaats van gsave
... grestore
(wat het ongewenste effect heeft van het weggooien van de veranderingen in het huidige pad die we willen), slaat het een kopie op van de huidige transformatiematrix (CTM) zoals deze bestaat wanneer de functie start.
Dan doet het lineto
naar elk volgend punt, dat door de matrix te schalen en te roteren altijd op (0,1) staat. Ten slotte roept het closepath
en herstelt vervolgens de opgeslagen matrix als de 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
Door een pad heen lopen
Dit fragment dumpt de inhoud van het huidige pad naar stdout. Het gebruikt de ghostscript-procedure =only
die mogelijk niet beschikbaar is op alle tolken. Een vergelijkbare procedure voor Adobe-tolken wordt =print
.
pathforall
is een pathforall
die 4 procedurelichamen als argumenten gebruikt voor de specifieke typen moveto
, het resultaat van moveto
, lineto
, curveto
, closepath
en alle andere closepath
die op deze elementen closepath
.
{ 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
Ruitjespapier
/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