Trabalhando com a API KOMPAS-3D → Lição 12 → Linhas compostas

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”


  1. O básico
  2. Desenho de desenho
  3. Conexão correta com o KOMPAS
  4. Inscrição principal
  5. Primitivas gráficas
  6. Salvando um documento em vários formatos
  7. Conhecendo as configurações
  8. Métodos de escrita mais sofisticados no bloco de título
  9. Lendo células de legenda
  10. Caracteres especiais, incluindo uma sequência
  11. Etiquetas de texto simples
  12. 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ão

Nesta 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".

Source: https://habr.com/ru/post/pt424509/


All Articles