Na lição anterior, examinamos a exibição de cadeias simples. Nisso, falaremos sobre a formação de linhas compostas, incluindo desvios e frações.
Geraremos essas linhas usando o método
ksText , que estudamos anteriormente. Estritamente falando, esse método não se destina a gerar seqüências complexas. No entanto, na lição de hoje, vamos nos familiarizar com uma série de bandeiras que desempenham um papel fundamental na formação de linhas compostas.

O conteúdo da série de lições “Trabalhando com a API KOMPAS-3D”
- O básico
- Desenho de desenho
- Conexão correta com o KOMPAS
- Inscrição principal
- Primitivas gráficas
- Salvando um documento em vários formatos
- Conhecendo as configurações
- Métodos de escrita mais sofisticados no bloco de título
- Lendo células de legenda
- Caracteres especiais, incluindo uma sequência
- Etiquetas de texto simples
- Cordas compostas
Embora os métodos descritos para construir desvios e frações não sejam documentados, eles, como mostram meus experimentos, funcionam corretamente nas versões modernas do KOMPAS (verificadas em 15, 16 e 17). Mas esse comportamento pode ser alterado em versões futuras.
Os métodos "corretos" para a construção de seqüências compostas serão descritos nas lições a seguir.
Itálico, negrito e sublinhado
Os estilos itálico, negrito e sublinhado são controlados pelos sinalizadores mostrados na tabela abaixo. Eles são declarados no arquivo de cabeçalho
ldefin2d.h .

No método
ksText, o efeito de cada um desses sinalizadores é limitado à chamada desse método. A seguir, é apresentado um exemplo de um programa que demonstra a saída de linhas com estilos diferentes.
Document2D->ksText(100, 100, 0, 0, 0, 0 , SysAllocString(L" ")); Document2D->ksText(100, 90, 0, 0, 0, ITALIC_OFF , SysAllocString(L" ")); Document2D->ksText(100, 80, 0, 0, 0, BOLD_ON , SysAllocString(L" ")); Document2D->ksText(100, 70, 0, 0, 0, UNDERLINE_ON, SysAllocString(L" "));
Por simplicidade, este exemplo omite o código responsável pela criação e execução do documento (este tópico foi discutido nas lições anteriores), bem como pela liberação de recursos (inclusive após a chamada da função
SysAllocString ).
Observação: por padrão, o KOMPAS exibe o texto em itálico. Portanto, para cancelar o
itálico, usamos o sinalizador
ITALIC_OFF . A figura abaixo mostra as linhas geradas por este programa.

O uso simultâneo de sinalizadores emparelhados (por exemplo,
BOLD_ON e
BOLD_OFF ) não afeta a exibição da string. É exibido como seria exibido se nenhum desses sinalizadores estivesse definido.
Desvios superiores e inferiores
Os desvios superior e inferior são definidos usando os sinalizadores mostrados na tabela abaixo.

A seguir, é apresentado um exemplo de programa que demonstra a saída de uma linha que contém desvios superiores e inferiores.
double x = 100.0; double y = 100.0; BSTR str = SysAllocString(L" "); long itext = Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str); x += Document2D->ksGetTextLengthFromReference(itext) + 2.0; str = SysAllocString(L" "); itext = Document2D->ksText(x, y, 0, 0, 0, UPPER_DEVIAT, str); SysFreeString(str); double dx1 = Document2D->ksGetTextLengthFromReference(itext); str = SysAllocString(L" "); itext = Document2D->ksText(x, y, 0, 0, 0, LOWER_DEVIAT, str); SysFreeString(str); double dx2 = Document2D->ksGetTextLengthFromReference(itext); x += max(dx1, dx2); str = SysAllocString(L" "); Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str);
Neste exemplo, cada vez que recalculamos as coordenadas dos pontos de ancoragem das linhas exibidas para saber onde produzi-las. Para fazer isso, use o método
ksGetTextLengthFromReference descrito na lição anterior. Observe: somente a coordenada horizontal é recalculada, a vertical não muda. O próprio KOMPAS determina o deslocamento vertical desejado da linha. A figura abaixo mostra a linha composta gerada por este programa.

Fração
A renderização de frações é definida pelos sinalizadores listados na tabela abaixo.

A seguir, é apresentado um exemplo de um programa que demonstra a saída de uma fração em uma sequência de texto.
double x = 100.0; double y = 100.0; BSTR str = SysAllocString(L" "); long itext = Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str); x += Document2D->ksGetTextLengthFromReference(itext) + 2.0; str = SysAllocString(L""); itext = Document2D->ksText(x, y, 0, 0, 0, NUMERATOR, str); SysFreeString(str); double dx1 = Document2D->ksGetTextLengthFromReference(itext); str = SysAllocString(L""); itext = Document2D->ksText(x, y, 0, 0, 0, DENOMINATOR, str); SysFreeString(str); double dx2 = Document2D->ksGetTextLengthFromReference(itext); x += max(dx1, dx2); str = SysAllocString(L" "); Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str);
É fácil notar que este exemplo é semelhante ao anterior. De fato, a saída de desvios e frações difere apenas nas bandeiras usadas. A figura abaixo mostra o resultado do programa.
ConclusãoNesta lição, analisamos a criação de seqüências compostas usando o método
ksText . O método descrito aqui não é documentado, portanto você não deve usá-lo em seus aplicativos. Nas lições a seguir, examinaremos mais de perto as maneiras documentadas de criar seqüências compostas. E lá precisaremos das bandeiras que encontramos hoje.
Para continuar, acompanhe as notícias do blog.
Sergey Norseev, Ph.D., autor do livro "Application Development for COMPAS in Delphi".