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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow