Referencia de códigos especiales

Se pueden utilizar códigos especiales para crear formas geométricas adicionales y especificar ciertas acciones.

El segundo carácter de la cadena de tres caracteres (la especificación de longitud del vector) debe ser 0, o también puede especificar el número de código especial. Por ejemplo, tanto 008 como 8 son especificaciones válidas.

Códigos de bytes de especificación

Código

Descripción

000

Fin de la definición de forma

Este modo se activa al principio de cada forma. Cuando el modo de dibujo está activado (código 1), los vectores hacen que se dibujen las líneas. Cuando está desactivado (código 2), los vectores se mueven a una nueva ubicación sin dibujar.

001

Activa el modo de dibujo (segmentos invisibles)

002

Desactiva el modo de dibujo (segmentos visibles)

003

Divide las longitudes de vector por el siguiente byte

La altura especificada con el comando FORMA se considera inicialmente la longitud de un único vector ortogonal (dirección 0, 4, 8 o C). El código 3 divide las longitudes de vector por el siguiente byte. El código 4 multiplica las longitudes de vector por el siguiente byte. Los códigos 3 y 4 van seguidos de un byte de especificación que contiene un factor de escala entero (entre 1 y 255).

Si desea que la altura de la forma determine todas las dimensiones de ésta y utiliza 10 longitudes de vector para dibujarla, puede usar 3,10 para establecer la escala de la especificación de la altura. El factor de escala de una forma es acumulativo; es decir, si se multiplica por 2 y, después, por 6, el factor de escala resultante tiene el valor 12. En general, debe invertirse el efecto de los factores de escala al final de la forma, especialmente en el caso de las subformas y de las formas de tipo de letra de texto. El programa no restablece el factor de escala.

004

Multiplica las longitudes de vector por el siguiente byte

005

Introduce la ubicación actual en la pila

Todo lo que se guarda debe restaurarse. La pila de posiciones tiene un alcance máximo de cuatro ubicaciones. Si se produce un desbordamiento de la pila a causa de una acumulación excesiva de inserciones o de la falta de demasiadas extracciones, aparecerá el siguiente mensaje cuando se dibuje la forma.

Exceso de flujo de pila de posiciones en forma nnn

De manera análoga, si intenta extraer más ubicaciones de las que ha insertado en la pila, aparecerá este mensaje.

Subdesbordamiento de pila de posiciones en forma nnn

006

Extrae la ubicación actual de la pila

007

Dibuja el número de subforma definido por el siguiente byte

Para los tipos de letra no Unicode, el byte de especificación que sigue al código 7 es un número de forma del 1 al 255. Para los tipos de letra Unicode, el código 7 va seguido de un número de forma Unicode del 1 al 65535. Los números de forma Unicode deben contarse como dos bytes.

La forma con ese número (del mismo archivo de forma) se dibuja en este momento. El modo de dibujo no se restablece para la nueva forma. Una vez completada la subforma, se continúa con el dibujo de la forma actual.

008

Desplazamiento X-Y definido por los siguientes dos bytes

Los bytes de especificación de los vectores normales sólo dibujan en 16 direcciones predefinidas y la longitud más larga es 15. Estas restricciones, impuestas para hacer más eficiente la definición de formas, resultan a veces limitantes. El código 8 especifica el desplazamiento X-Y definido por los dos bytes siguientes. El código 8 debe ir seguido por dos bytes de especificación con el formato:

8,X-displacement,Y-displacement

Los desplazamientos X-Y pueden estar comprendidos entre -128 y +127. El signo + es opcional y se pueden utilizar paréntesis para facilitar la lectura. El siguiente ejemplo da como resultado un vector que dibuja (o mueve) 10 unidades a la izquierda y tres unidades hacia arriba.

8,(-10,3)

Tras los dos bytes de especificación de desplazamiento, la forma vuelve al modo de vector normal.

Puede utilizar el código 9 para dibujar una secuencia de vectores no estándar. El código 9 especifica cualquier número de pares de desplazamiento X-Y. La secuencia de códigos termina con un par (0,0). El siguiente ejemplo dibuja tres vectores no estándar y devuelve al modo de vector normal.

9,(3,1),(3,2),(2,-3),(0,0)

Debe terminar la secuencia de pares de desplazamiento X-Y con un par (0,0) para que el programa pueda reconocer los vectores normales o códigos especiales que haya a continuación.

009

Varios desplazamientos X-Y, finalizados en (0,0)

00A

Arco octante definido por los siguientes dos bytes

Éste se denomina arco de octante porque abarca uno o varios octantes de 45 grados, empezando y terminando en el contorno de un octante. Los octantes están numerados en sentido antihorario a partir de la posición de las 3 en punto, tal como se muestra en la siguiente ilustración.

La especificación del arco es

10,radius,(-)0SC

El valor del radio puede estar comprendido entre 1 y 255. El segundo byte de especificación indica la dirección del arco (en sentido antihorario si es positivo y horario si es negativo), el octante inicial ( s , un valor entre 1 y 7), y el número de octantes que abarca ( c , un valor entre 0 y 7, en el que 0 es igual a ocho octantes, un círculo completo). Puede utilizar paréntesis para facilitar la lectura. Por ejemplo, considere el siguiente fragmento de la definición de una forma:

...012,10,(1,-032),01E,...

Este código dibuja un vector de una unidad hacia arriba y a la derecha, un arco en sentido horario desde el octante 3 (con un radio de una unidad para dos octantes) y, por último, un vector de una unidad hacia abajo y a la derecha, como se muestra en la siguiente ilustración.

00B

Arco fraccional definido por los siguientes cinco bytes

La definición utiliza cinco bytes de especificación.

11,start_offset,end_offset,high_radius,radius,(-)0SC

start_offset y end_offset representan la distancia entre el contorno del octante y el punto en el que comienza o finaliza el arco. high_radius representa los ocho bits más significativos del radio; este valor será igual a 0 a menos que radius sea mayor de 255 unidades. Multiplique el valor de high_radius por 256 y sume ese valor al de radius para generar un radio de arco mayor que 255. radius y el byte de especificación final son iguales que los de la especificación del arco de octante (código 00A, descrito anteriormente).

start offset se determina calculando la diferencia en grados entre el contorno del octante inicial (un múltiplo de 45 grados) y el inicio del arco. A continuación, multiplique esta diferencia por 256 y divídala por 45. Si el arco comienza en el contorno de un octante, start offset es igual a 0.

end offset se calcula de una manera similar, pero utilizando el número de grados entre el último contorno de octante atravesado y el final del arco. Si el arco termina en el contorno de un octante, end offset es igual a 0.

Por ejemplo, un arco fraccional que va desde 55 grados hasta 95 grados con un radio de 3 unidades tendría el siguiente código:

11,(56,28,0,3,012)

La explicación es la siguiente:

start_offset     = 56 because ((55 - 45) * 256 / 45) = 56 
end_offset       = 28 because ((95 - 90) * 256 / 45) = 28
high_radius      = 0  because (radius < 255) 
radius           = 3 
starting octant  = 1  because arc starts in the 45 degree octant
ending octant    = 2  because arc ends in the 90 degree octant

00C

Arco definido por el desplazamiento X-Y y la curvatura

Son similares a los códigos 8 y 9, ya que se pueden utilizar para especificar desplazamientos X-Y. Sin embargo, los códigos 00C y 00D dibujan arcos aplicando un factor de curvatura al vector de desplazamiento. El código 00C dibuja un segmento de arco, mientras que el código 00D dibuja varios segmentos de arco (poliarcos) hasta que termina con un desplazamiento (0,0).

El código 00C debe estar seguido de tres bytes que describen el arco:

0C,X-displacement,Y-displacement,Bulge

Tanto los desplazamientos X e Y como la curvatura, que especifica la curvatura del arco, pueden variar entre -127 y +127. Si el segmento de línea especificado por el desplazamiento tiene la longitud D y la distancia perpendicular desde el punto medio de ese segmento tiene la altura H, la magnitud de la curvatura es ((2 * H / D) *127). El signo es negativo si el arco descrito desde la ubicación actual hasta la nueva posición tiene sentido horario.

Un semicírculo tiene la curvatura 127 (o –127) y es el mayor arco que se puede representar como un segmento de arco simple utilizando estos códigos (use dos segmentos de arco consecutivos para obtener arcos más grandes). Una especificación de curvatura de 0 es válida y representa un segmento de línea recta. Sin embargo, la utilización del código 8 para un segmento de línea recta ahorra un byte en la descripción de la forma.

El código de poliarco (00D o 13) va seguido de 0 o por más tríos de segmentos de arco, y termina con un desplazamiento (0,0). No se especifica un valor de la curvatura después del desplazamiento final. Por ejemplo, la letra S se puede definir con la siguiente secuencia:

13,(0,5,127),(0,5,-127),(0,0)

Los segmentos de curvatura cero resultan útiles en los poliarcos para representar los segmentos rectos; son más eficientes que terminar el poliarco, insertar un segmento recto e iniciar, por último, otro poliarco.

El número –128 no se puede utilizar en las definiciones de segmentos de arco y poliarcos.

00D

Varios arcos de curvatura especificada

00E

Procesa el siguiente comando sólo si el texto es vertical

Cuando se llega a este código especial en una definición de carácter, el siguiente código se procesa o se pasa por alto dependiendo de la orientación. Si la orientación es vertical, el código siguiente se procesa; si es horizontal, se omite.

En el texto horizontal, el punto de inicio de cada carácter es el extremo izquierdo de la línea base. En el texto vertical, se asume que el punto de inicio está en el centro de la parte superior del carácter. Al final de cada carácter, se dibuja normalmente un segmento invisible para situar el punto de inicio del siguiente carácter. En el texto horizontal, se encuentra a la derecha; en el vertical, debajo. El código especial 00E (14) se utiliza principalmente para ajustar las diferencias en los puntos iniciales y finales, permitiendo que la misma definición de forma de carácter se utilice en la dirección horizontal y vertical. Por ejemplo, la siguiente definición de una D mayúscula se puede utilizar tanto en el texto horizontal como en el vertical.

*68,22,ucd 
2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0