Buscar..


Dibujar (describir) un polígono

Este ejemplo intenta imitar el comportamiento de los operadores de construcción de ruta incorporados como arc .

Si hay un punto actual, poly primero dibuja una línea en (x, y) + (r, 0), de lo contrario comienza moviéndose hacia ese punto.

En lugar de gsave ... grestore (que tiene el efecto no deseado de descartar los cambios en la ruta actual que deseamos), guarda una copia de la matriz de transformación actual (CTM) tal como existe cuando se inicia la función.

Luego se lineto con cada punto posterior, que al escalar y rotar la matriz siempre está en (0,1). Finalmente, llama a closepath y luego restaura la matriz guardada como el 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

Iterando por un camino

Este fragmento vuelca el contenido de la ruta actual a la salida estándar. Utiliza el procedimiento ghostscript =only que puede no estar disponible en todos los intérpretes. Un procedimiento equivalente en los intérpretes de Adobe se llama =print .

pathforall es un operador de bucle que toma 4 cuerpos de procedimiento como argumentos que se llaman para los tipos específicos de elementos de trayectoria, el resultado de moveto , lineto , curveto , closepath y todos los demás operadores de construcción de trayectoria que se reducen a estos elementos.

{ 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

Papel cuadriculado

/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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow