サーチ…
ポリゴンの描画(記述)
この例では、 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
要素の特定の型、 moveto
、 lineto
、 curveto
、 closepath
、およびこれらの要素に沸騰する他のすべてのパス構築演算子のために呼び出される引数として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