サーチ…


ポリゴンの描画(記述)

この例では、 arcような組み込みのパス構築演算子の動作を模倣しようとしています。

現在の点がある場合、 poly最初に(x、y)+(r、0)に線を描画し、そうでない場合はその点に移動して開始します。

gsave ... grestore (欲しい現在のパスへの変更をgrestoreするという望ましくない効果)の代わりに、関数が開始されるときに存在する現在の変換マトリックス(CTM)のコピーを保存します。

その後、行列のスケーリングと回転によって常に(0,1)にある各後続点にlinetoを行います。最後に、 closepathを呼び出して、保存された行列を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

パスを反復する

このスニペットは、現在のパスの内容をstdoutにダンプします。これは、ghostscriptの手順を使用して=onlyすべての通訳では利用できない可能性があります。 Adobeのインタプリタでの同等の手順は、 =printと呼ばれ=print

pathforallは、 pathforall要素の特定の型、 movetolinetocurvetoclosepath 、およびこれらの要素に沸騰する他のすべてのパス構築演算子のために呼び出される引数として4つの手続き本体を取るループ演算子です。

{ 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

グラフ用紙

/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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow