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"
- Los fundamentos
- Diseño de dibujo
- Conexión correcta a KOMPAS
- Inscripción principal
- Primitivas gráficas
- Guardar un documento en varios formatos
- Conociendo la configuración
- Métodos de escritura más sofisticados en el bloque de título
- Lectura de celdas de subtítulos
- Caracteres especiales que incluyen una cadena
- Etiquetas de texto simple
- 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ónEn 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".