Referência de códigos especiais

Códigos especiais podem ser utilizados para criar formas geométricas adicionais e especificar determinadas ações.

O segundo caractere da sequência de três caracteres (a especificação do comprimento do vetor) precisa ser 0 ou é possível especificar o número do código especial. Por exemplo, 008 e 8 são especificações válidas.

Código de especificação de bytes

Código

Descrição

000

Fim da definição de forma

Desenhar está ativo no início de cada forma. Quando o modo Desenhar está ativo (código 1), os vetores fazem com que as linhas sejam desenhadas. Quando o modo Desenhar está desativado (código 2), os vetores movem-se para uma localização nova sem desenho.

001

Modo Ativar desenho (caneta desativada)

002

Modo Desativar desenho (caneta ativa)

003

Dividir comprimentos de vetores pelo próximo byte

A altura especificada com o comando SHAPE é inicialmente considerado o comprimento de um vetor ortogonal simples (direções 0, 4, 8 ou C). O código 3 divide os comprimentos vetoriais pelo próximo byte. O código 4 multiplicar os comprimentos vetoriais pelo próximo byte. Os códigos 3 e 4 são seguidos por um byte de especificação contendo um fator de escala de número inteiro (de 1 a 255).

Se você deseja que a altura da forma especifique o tamanho da forma inteira e utiliza 10 comprimentos vetoriais para desenhá-la, você pode utilizar 3,10 para escalar a especificação de altura. O fator de escala é cumulativo na forma, isto é, multiplicar por 2 e novamente por 6 resulta em um fator de escala 12. Normalmente, você deve reverter o efeito dos fatores de escala no final da forma, especialmente para sub-formas e formas de fonte de texto. O programa não redefine o fator de escala para você.

004

Multiplicar comprimentos de vetores pelo próximo byte

005

Empurrar a localização atual para a pilha

Você deve restaurar tudo que salvar. A pilha de posição tem somente quatro localizações. Se a pilha for excedida devido a muitas operações salvar e a poucas operações restaurar, a seguinte mensagem é exibida quando a forma é desenhada.

Posicionar o excesso de pilha na forma nnn

De modo semelhante, se você tentar restaurar mais localizações que foram salvas na pilha, a seguinte mensagem é exibida quando a forma é desenhada.

Posicionar o estouro de pilha na forma nnn

006

Suspender a localização atual da pilha

007

Desenhar número de sub-forma fornecida pelo próximo byte

Para uma fonte diferente de Unicode, o byte de especificação que segue o código 7 é um número de forma entre 1 e 255. Para uma fonte Unicode, o código 7 é seguindo por um número de forma Unicode de 1 a 65535. Os números de forma Unicode devem ser contados como dois bytes.

A forma com aquele número (no mesmo arquivo de forma) é desenhada nesse momento. O modo Desenhar não é redefinido para a nova forma. Quando a sub-forma estiver concluída, o desenho da forma atual será retomado.

008

X-Y deslocamento fornecido pelos próximos dois bytes

Os bytes de especificação de vetor normais desenhos somente em 16 direções predefinidas e o comprimento mais longo é 15. Essas restrições ajudam a tornar as definições de forma eficientes mas, algumas vezes, limitadas. O código 8 especifica o deslocamento X-Y fornecido pelos próximos dois bytes. O código 8 deve ser seguido por dois bytes de especificação no formato:

8,X-displacement,Y-displacement

Os deslocamentos X-Y podem variar de –128 a +127. Um sinal de + é opcional e você pode utilizar parênteses para melhorar a leitura. O exemplo a seguir resulta em um vetor que é desenhado (ou movido) 10 unidades à esquerda e três unidades para cima.

8,(-10,3)

Seguindo os dois bytes de especificação de deslocamento, a forma retorna para o modo Vetor normal.

Você pode utilizar o código 9 para desenhar uma sequência de vetores não-padrão. O código 9 especifica qualquer número de pares de deslocamentos X-Y. A sequência de códigos é terminada pelo par (0,0). O exemplo a seguir desenha três vetores não-padrão e retorna para o modo Vetor normal.

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

Você deve terminar a sequência de pares de deslocamentos X-Y com um par (0,0) para que o programa reconheça os vetores normais ou os códigos especiais que surgirem.

009

Múltiplos deslocamentos X-Y, terminados (0,0)

00A

Arco oitante definido pelos próximos dois bytes

Ele é chamado de arco oitante pois possui um ou mais oitantes de 45 graus, iniciando e terminando em um limite oitante. Os oitantes são numerados no sentido anti-horário a partir da posição de 3 horas, como mostrado na ilustração a seguir.

A especificação de arco é

10,radius,(-)0SC

O raio pode ser qualquer valor de 1 a 255. O segundo byte de especificação indica a direção do arco (sentido anti-horário se positivo e sentido horário, se negativo); seu oitante inicial ( s , um valor de 0 a 7) e o número de oitantes que ele possui ( c , um valor de 0 a 7, no qual 0 é igual a oito oitantes ou um círculo completo). Você pode utilizar parênteses para melhorar a leitura. Por exemplo, considere o seguinte fragmento de uma definição de forma:

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

Esse código desenha um vetor de uma unidade para cima e à direita, um arco no sentido horário a partir do oitante 3 (com um raio de uma unidade para dois oitantes) e, em seguida, um vetor de uma unidade para baixo e à direita, como mostrado na ilustração a seguir.

00B

Arco fracional definido pelos próximos cinco bytes

A definição utiliza cinco bytes de especificação.

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

Os códigos start_offset e end_offset representam a distância de início ou término do arco em relação ao limite oitante. O código high_radius representa os oito bits mais significativos do raio; high radius será 0 exceto se radius for maior que 255 unidades. Multiplique o valor de high_radius por 256 e adicione o valor resultante ao valor do radius para gerar um raio de arco maior que 255. O raio e o byte de especificação de finalização são os mesmos para a especificação de arco de oitante (código 00A, descrito anteriormente).

Você determina o deslocamento inicial calculando a diferença em graus entre o limite do oitante inicial (um múltiplo de 45 graus) e o início do arco. Em seguida, você multiplica essa diferença por 256 e divide por 45. Se o arco se iniciar em um limite oitante, seu deslocamento inicial será 0.

O end offset é calculado de modo semelhante, mas você utiliza o número de graus do último limite oitante cruzado no final do arco. Se o arco terminar em um limite oitante, seu deslocamento final será 0.

Por exemplo, um arco fracional de 55 a 95 graus com um raio de 3 unidades seria codificado como:

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

A seguir encontra-se uma explicação:

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 pelo deslocamento e convexidade X-Y

Eles são semelhantes aos códigos 8 e 9 no que se refere ao seu uso para especificar os deslocamentos X-Y. Contudo, os códigos 00C e 00D desenham arcos aplicando um fator de convexidade ao vetor de deslocamento. O código 00C desenha um segmento de arco, enquanto o código 00D desenha vários segmentos de arco (poliarcos) até que seja terminado por um deslocamento (0,0).

O código 00C deve ser seguido por três bytes descrevendo o arco:

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

Os deslocamentos X e Y e a convexidade, que especifica a curvatura  do arco, podem variar de -127 a +127. Se o segmento de linha especificado pelo deslocamento tiver um comprimento D e a distância perpendicular do ponto médio desse segmento tiver altura H, a magnitude da convexidade será ((2 * H / D) * 127). O sinal será negativo se o arco da localização atual para a nova localização estiver no sentido horário.

Um semicírculo tem convexidade 127 (ou -127) e é o maior arco que pode ser representado como um segmento de arco simples utilizando esses códigos (use dois segmentos de arco consecutivos para arcos maiores). Uma especificação de convexidade 0 é válida e representa um segmento em linha reta. Entretanto, usar o código 8 para um segmento em linha reta economiza um byte na descrição de forma.

O código de poliarco (00D ou 13) é seguido por 0 ou por mais triplos de segmento de arco e é terminado com um deslocamento (0,0). Observe que nenhuma convexidade é especificada após o deslocamento final. Por exemplo, a letra S pode ser definida pela seguinte sequência:

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

Segmentos de convexidade zero são úteis em poliarcos para representar os segmentos retos; eles são mais eficientes que terminar o poliarco, inserindo um segmento reto e, em seguida, iniciar outro poliarco.

O número -128 não pode ser usado em segmento de arco e definições de poliarco.

00D

Múltiplos arcos especificados por convexidade

00E

Processar próximo comando somente se houver texto vertical

Quando esse código especial é encontrado em uma definição de caractere, o próximo código é processado ou ignorado, dependendo da orientação. Se a orientação for vertical, o próximo código é processado; se for horizontal, o próximo código é ignorado.

Em texto horizontal, o ponto inicial para cada caractere é o final esquerdo da linha de base. Em texto vertical, o ponto inicial deve ser o centro superior do caractere. No final de cada caractere, um segmento pen-up é normalmente desenhado na posição do ponto inicial do próximo caractere. Para texto horizontal, ele está à direita; para texto vertical, ele está abaixo. O código especial 00E (14) é utilizado principalmente para ajustar as diferenças nos pontos inicial e final, permitindo a mesma definição de forma de caractere a ser usada horizontal e verticalmente. Por exemplo, a seguinte definição de um D maiúsculo poderia ser usada em texto horizontal ou 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