Ir al contenido

PGD | Ejemplos de PostScript

Se presenta una lista de ejemplos para familiarizarse con el lenguaje Postscript. Para verificar estos ejemplos y experimentar, se sugiere el siguiente procedimiento:

  • Windows:
    Escribir el código utilizando el Bloc de notas, y guardarlo con extensión .ps (para forzar al programa a utilizar esta extensión, es necesario entrecomillar el nombre completo; por ejemplo, escribir como nombre de archivo “prueba.ps” al guardarlo). Luego, abrir alguna versión de Adobe Acrobat Professional y arrastrar el archivo a la ventana de Acrobat.
  • Mac:
    Escribir el código utilizando TextEdit en modo texto normal (Preferencias > Nuevo documento > Formato), y guardarlo con extensión .ps. Luego, puede simplemente hacerse doble clic en el archivo (el cual abrirá en Vista Previa) o bien arrastrar el archivo a alguna versión de Acrobat (a diferencia de Windows, macOS cuenta con soporte nativo de PostScript).
Ovillo

Ovillo

Ejemplo de repetición de una figura simple, por trazado, cambiando su ubicación por medio de una rotación del espacio del usuario.

%!
% Ejemplo 1: Ovillo

/mm {72 mul 25.4 div} def   % Conversion de mm a puntos
/W {210 mm} def             % Ancho A4
/H {297 mm} def             % Alto A4

<< /PageSize [W H] >> setpagedevice 

/circulo {
    % Circulo generico.
    % Espera: x y radio
    % Deja: -
	
    0 360 arc
} def

/forma {
    % Traza un circulo especifico, de 60 mm de radio y 2 puntos de contorno.
    % Espera: x y
    % Deja: -

    2 setlinewidth
    60 mm circulo 
    stroke
} def

/N 8 def                    % Cantidad de veces que dibujaremos una figura
W 2 div H 2 div translate   % Origen de coordenadas al centro de la p‡gina

0 setgray
0 0 forma                   % Primera figura en el centro, en negro

1 0 0 setrgbcolor
N {                         % Repetir N veces
    360 N div rotate        % Rotar el espacio (360/N) grados cada vez 
    25 mm 0 forma           % y dibujar la figura 25 mm a la derecha en ese espacio
} repeat                    

showpage
Anillos

Anillos

Ejemplo de repetición de una figura simple, por pintado, cambiando su ubicación por medio de una rotación del espacio del usuario.

%!
% Ejemplo 2: Anillos

/mm {72 mul 25.4 div} def   % Conversion de mm a puntos
/W {210 mm} def             % Ancho A4
/H {297 mm} def             % Alto A4

<< /PageSize [W H] >> setpagedevice 

/circulo {
    % Circulo generico.
    % Espera: x y radio
    % Deja: -
	
    0 360 arc
} def

/anillo {
    % Dibuja un anillo.
    % Espera: x y
    % Deja: -

    2 copy                  % Preservar parametros x y para despues
    40 mm circulo           % Preparar circulo exterior de 40 mm
    fill                    % Llenarlo con el color actual
    1 setgray               % Blanco para el interior
    30 mm circulo           % Preparar circulo interior de 30 mm
    fill                    % Llenarlo con blanco
} def

/N 15 def                   % Cantidad de veces que dibujaremos el anillo
W 2 div H 2 div translate   % Origen de coordenadas al centro de la pagina

0 setgray
0 0 anillo                  % Anillo en negro

1 1 N {                     % Repetir de 1 en 1 hasta N
    360 N div rotate        % Rotar espacio en (360/N)
    1 0 0 setrgbcolor       % Elegir rojo
    40 mm 0 anillo          % Anillo a 40 mm a la derecha
} for

showpage
Anillos en dos colores

Anillos en dos colores

Ejemplo de repetición de una figura simple, por pintado, cambiando su ubicación por medio de una rotación del espacio del usuario, y utilización de un condicional para la alternancia de colores.

%!
% Ejemplo 3: Anillos en dos colores

/mm {72 mul 25.4 div} def   % Conversion de mm a puntos
/W {210 mm} def             % Ancho A4
/H {297 mm} def             % Alto A4

<< /PageSize [W H] >> setpagedevice 

/circulo {0 360 arc} def    % Circulo generico

/anillo {
    % Dibuja un anillo.
    % Espera: x y
    % Deja: -

    2 copy
    2 setlinewidth
    40 mm circulo 
    fill
    1 setgray
    30 mm circulo 
    fill
} def                       % Circulo de 40 mm de radio calado por otro blanco de 30 mm

/N {15} def                 % Numero de circulos
W 2 div H 2 div translate   % Origen de coordenadas al centro de la p‡gina

1 1 N {
    360 N div rotate        % Rotar espacio en (360/N) grados
    2 mod 0 eq 
        {1 0 0}             % Elegir rojo si es par
        {1 1 0}             % Elegir amarillo si es impar
    ifelse
    setrgbcolor
    40 mm 0 anillo          % Trazar anillo
} for

showpage
Rayos en dos colores

Rayos en dos colores

Repetición de líneas a modo de rayos, cambiando su ubicación por medio de una rotación del espacio del usuario, y utilización de un condicional para la alternancia de colores.

%!
% Ejemplo 4: Rayos en dos colores

/mm {72 mul 25.4 div} def   % Conversion de mm a puntos
/W {210 mm} def             % Ancho A4
/H {297 mm} def             % Alto A4

<< /PageSize [W H] >> setpagedevice 

/linea {
    moveto 
    70 mm 0 rlineto 
    stroke
} def                       % Trazar linea de 70 mm hacia la derecha

/N {20} def                 % Numero de lineas
W 2 div H 2 div translate   % Origen de coordenadas al centro de la p‡gina

2 setlinewidth              % Espesor de las lineas: 2 pt
1 1 N {                     % Repetir de 1 a N
    360 N div rotate        % Rotar espacio en (360/N) grados
    2 mod 0 eq 
        {0 1 1}             % Cyan en lineas pares
        {0 0 1}             % Azul en lineas impares
    ifelse
    setrgbcolor
    0 0 linea               % Trazar linea
} for

showpage
Rayos en espiral a dos colores

Rayos en espiral a dos colores

Repetición de líneas a modo de rayos, de longitud variable, cambiando su ubicación por medio de una rotación del espacio del usuario, y utilización de un condicional para la alternancia de colores.

%!
% Ejemplo 5: Rayos en espiral a dos colores

/mm {72 mul 25.4 div} def   % Conversion de mm a puntos
/W {210 mm} def             % Ancho A4
/H {297 mm} def             % Alto A4

<< /PageSize [W H] >> setpagedevice 

/ultimopunto {
    % Define dos simbolos, "ultimox" y "ultimoy" iguales a las coordenadas 
    % del ultimo punto alcanzado
    % Espera: -
    % Devuelve: -
	
    currentpoint exch 
    /ultimox exch def 
    /ultimoy exch def
} def	

/linea {
    % Linea generica a partir del punto y longitud dados,
    % y registra el ultimo punto alcanzado
    % Espera: longitud x y 
    % Devuelve: -

    moveto                  % Mover a (x, y)
    0 rlineto               % Crear linea hacia la derecha
    ultimopunto             % Guardar ultimo punto
    stroke                  % Trazar
} def

/N {20} def                 % Cantidad de rayos
W 2 div H 2 div translate   % Origen de coordenadas al centro de la p‡gina

2 setlinewidth              % Espesor de linea 2 pt

1 1 N {                     % Desde 1 en pasos de 1 hasta N
    360 N div rotate        % Rotar espacio en (360/N) grados
    dup                     % Preservar paso actual
    2 mod 0 eq              % Verificar paridad
        {0 1 1}             % Cian si es par
        {0 0 1}             % Azul si es impar
    ifelse 
    setrgbcolor             % Establecer color
    dup                     % Preservar paso actual
    4 mm mul 10 mm add      % Obtener longitud como 4 mm * paso + 10 mm
    0 0 linea               % Linea a partir del origen
	
    % Llenar circulo con centro en el ultimo punto alcanzado
    % y radio 5 mm
    ultimox ultimoy 5 mm 0 360 arc 
    fill
} for

showpage