Trabajando con la API KOMPAS-3D → Lección 12 → Líneas compuestas

En la lección anterior, vimos la visualización de cadenas simples. En esto, hablaremos sobre la formación de líneas compuestas, incluidas las desviaciones y fracciones. Generaremos tales líneas usando el método ksText , que estudiamos anteriormente. Estrictamente hablando, este método no está destinado a generar cadenas complejas. Sin embargo, en la lección de hoy nos familiarizaremos con una serie de banderas que juegan un papel clave en la formación de líneas compuestas.




El contenido de la serie de lecciones "Trabajando con la API KOMPAS-3D"


  1. Los fundamentos
  2. Diseño de dibujo
  3. Conexión correcta a KOMPAS
  4. Inscripción principal
  5. Primitivas gráficas
  6. Guardar un documento en varios formatos
  7. Conociendo la configuración
  8. Métodos de escritura más sofisticados en el bloque de título
  9. Lectura de celdas de subtítulos
  10. Caracteres especiales que incluyen una cadena
  11. Etiquetas de texto simple
  12. Cuerdas compuestas

Aunque los métodos descritos para construir desviaciones y fracciones no están documentados, como muestran mis experimentos, funcionan correctamente en las versiones modernas de KOMPAS (verificadas en 15, 16 y 17). Pero este comportamiento puede cambiar en futuras versiones.

Los métodos "correctos" para construir cadenas compuestas se describirán en las siguientes lecciones.

Cursiva, negrita y subrayado


Los estilos en cursiva, negrita y subrayado están controlados por las banderas que se muestran en la tabla a continuación. Se declaran en el archivo de encabezado ldefin2d.h .



En el método ksText, el efecto de cada uno de estos indicadores se limita a llamar a este método. El siguiente es un ejemplo de un programa que muestra la salida de líneas con diferentes estilos.

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" ")); 

Para simplificar, este ejemplo omite el código responsable de la creación y ejecución del documento (este tema se discutió en lecciones anteriores), así como de la liberación de recursos (incluso después de llamar a la función SysAllocString ).

Tenga en cuenta: de forma predeterminada, KOMPAS muestra el texto en cursiva. Por lo tanto, para cancelar la cursiva, utilizamos el indicador ITALIC_OFF . La siguiente figura muestra las líneas de salida de este programa.



El uso simultáneo de banderas emparejadas (por ejemplo, BOLD_ON y BOLD_OFF ) no afecta la visualización de la cadena. Se muestra como se mostraría si no se configurara ninguno de estos indicadores.

Desviaciones superiores e inferiores


Las desviaciones superior e inferior se establecen utilizando los indicadores que se muestran en la tabla a continuación.



El siguiente es un ejemplo de un programa que muestra la salida de una línea que contiene desviaciones 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); 

En este ejemplo, cada vez que recalculamos las coordenadas de los puntos de anclaje de las líneas mostradas para saber dónde generarlas. Para hacer esto, use el método ksGetTextLengthFromReference descrito en la lección anterior. Tenga en cuenta: solo se recalcula la coordenada horizontal, la vertical no cambia. KOMPAS mismo determina el desplazamiento de línea vertical deseado. La siguiente figura muestra la línea compuesta generada por este programa.



Fracción


La representación de fracciones se establece mediante los indicadores que se enumeran en la tabla a continuación.



El siguiente es un ejemplo de un programa que muestra el resultado de una fracción en una cadena 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); 

Es fácil notar que este ejemplo es similar al anterior. De hecho, la salida de desviaciones y fracciones difiere solo en las banderas utilizadas. La siguiente figura muestra el resultado del programa.



Conclusión

En esta lección, vimos la creación de cadenas compuestas utilizando el método ksText . El método descrito aquí no está documentado, por lo que no debe usarlo en sus aplicaciones. En las siguientes lecciones, veremos más de cerca las formas documentadas de crear cadenas compuestas. Y allí necesitaremos las banderas que conocimos hoy.

Para continuar, sigue las noticias del blog.

Sergey Norseev, Ph.D., autor del libro "Desarrollo de aplicaciones para COMPAS en Delphi".

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


All Articles