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 ![]() |