# postscript Path Construction Drawing (describing) a polygon

## Example

This example attempts to mimic the behavior of the built-in path construction operators like `arc`.

If there is a current point, `poly` first draws a line to (x,y)+(r,0), otherwise it starts by moving to that point.

Instead of `gsave` ... `grestore` (which has the undesirable effect of discarding the very changes to the current path which we want), it saves a copy of the current transformation matrix (CTM) as it exists when the function starts.

Then it does `lineto` to each succeeding point, which by scaling and rotating the matrix is always at (0,1). Finally, it calls `closepath` and then restores the saved matrix as the 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
`````` PDF - Download postscript for free