En las lecciones anteriores del ciclo, aprendimos a mostrar el texto en el bloque de título. Hoy hablaremos sobre cómo enviar texto al documento mismo. Consideraremos los ejemplos más simples y mostraremos trucos más complejos en las siguientes lecciones.

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
Punto de anclaje de texto
El texto en KOMPAS siempre se muestra en relación con algún punto, que se denomina punto de anclaje. El texto se puede colocar de manera diferente en relación con él. Para averiguar la ubicación del texto en relación con el punto de anclaje, se
utiliza el método
ksGetTextAlign de la interfaz
ksDocument2D . El siguiente es su prototipo.
long ksGetTextAlign ( long pText
Como único parámetro, toma un puntero entero a un objeto de
texto . El método devuelve el
tipo de enlace , o
-1 en caso de error. Los tipos de enlace válidos se muestran en la tabla a continuación.
La tabla de tipos de enlace válidosPara cambiar el enlace de texto, use el método
ksSetTextAlign de la interfaz
ksDocument2D . El siguiente es su prototipo.
long ksSetTextAlign ( long pText, // «» long align // );
Si tiene éxito, este método devuelve
1 y, en caso de error, devuelve
cero .
Salida de texto
Para una salida de texto simple, use el método
ksText de la interfaz
ksDocument2D . El siguiente es un prototipo de este método.
long ksText ( double x, // double y, double ang, // double hStr, // double ksuStr, // long bitVector, // BSTR s // );
Analicemos
los parámetros del método
ksText . Discutimos el punto de anclaje en la sección anterior.
El parámetro
ang establece el ángulo en grados entre una línea de texto y una línea horizontal. El ángulo se cuenta en sentido antihorario. La siguiente imagen muestra una línea dibujada en un ángulo de
45 ° .
Cuerda de 45 °El parámetro
hStr establece el tamaño de los caracteres de la cadena en milímetros. Si el valor de este parámetro es
cero , se utiliza el tamaño predeterminado.
El parámetro
ksuStr especifica el estiramiento (estrechamiento) del texto. La siguiente figura muestra varias líneas con diferentes valores del parámetro
ksuStr .
Múltiples líneas con diferentes valores de estiramiento.De esta figura se puede ver que "estiramiento 0" es equivalente a "estiramiento 1", es decir, la ausencia de cualquier estiramiento.
El parámetro
bitVector contiene un conjunto de banderas que determinan el estilo de los caracteres. Los indicadores válidos se enumeran en la tabla a continuación.
Tabla de banderas de personajesDe hecho, hay otras banderas válidas, pero su trabajo solo aparece en la construcción de cadenas compuestas complejas. Consideraremos algunos de ellos en la próxima lección.
Recuerde: la cadena de salida no debe contener los caracteres
@ ,
$ ,
& ,
~ ,
^ y
# , ya que son caracteres de control. Hablaremos sobre trabajar con ellos en las próximas lecciones de nuestro ciclo.
Si tiene éxito, el método
ksText devuelve un puntero entero al texto. Este puntero se puede pasar, por ejemplo, al método
ksSetTextAlign para cambiar la posición del texto en relación con el punto de anclaje. En caso de error, el método
ksText devuelve
cero .
Ejemplo
El siguiente es un programa de ejemplo que muestra la salida de cadena utilizando el método
ksText .
// BSTR str = SysAllocString(L""); long itext; itext = Document2D->ksText(100, 100, // 0, // 11, // 0, // 0, // str); SysFreeString(str); // Document2D->ksSetTextAlign(itext, txta_Left); Document2D.Unbind(); // kompas->Visible = true; kompas.Unbind();
Por simplicidad, el código responsable de la creación y ejecución del documento se omite en este ejemplo. Como resultado de este programa, el texto
"Cadena" se muestra en el documento.
Tamaño del texto
Al mostrar texto en un documento, es útil saber cuánto espacio ocupa. La altura del texto se establece mediante el parámetro
hStr del método
ksText . Pero su longitud depende directamente de la cadena de salida.
Para determinarlo, use el método
ksGetTextLengthFromReference de la interfaz
ksDocument2D . Este método tiene solo un parámetro: un puntero entero al texto. Devuelve la longitud del texto en milímetros.
El método
ksGetTextLengthFromReference es inconveniente porque no le permite determinar la longitud de la línea antes de que se envíe al documento. Para determinar la longitud de una cadena que aún no se ha
enviado al documento, debe usar el método
ksGetTextLength . Pero antes de considerarlo, hablemos de estilos.
Estilos de texto
El sistema KOMPAS predefine varios estilos para textos que se muestran en documentos. Cada estilo tiene un número entero. Los estilos más utilizados se encuentran en la tabla a continuación.
Estilos de texto comúnmente utilizadosNo todos los estilos se dan en esta tabla: solo una parte de ellos. Puede encontrar una lista completa de las constantes disponibles en la página
"Estructuras de parámetros y constantes \ Constantes \ Constantes de texto \ Estilos de texto del sistema" en la documentación de KOMPAS.
Método KsGetTextLength
El método
ksGetTextLength de la interfaz
ksDocument2D le permite determinar la longitud de una cadena antes de que se envíe al documento. A continuación se muestra un prototipo de este método.
double ksGetTextLength ( BSTR text, // long style // );
El método devuelve la longitud de la cadena en milímetros. Tenga en cuenta que el método acepta la cadena como un parámetro y no como un puntero al objeto "texto". Esto le permite evaluar el tamaño de la línea antes de que se envíe al documento.
Ejemplo
Considere un ejemplo del uso del método
ksGetTextLength . Supongamos que tenemos una línea y necesitamos colocarla en un rectángulo de cierta longitud (esta tarea es mucho más fácil de resolver con la ayuda de párrafos, pero sobre ellos en las próximas lecciones). Si la línea encaja en ella, se muestra completa. De lo contrario, se corta y se coloca una elipsis al final. A continuación se muestra el código fuente del programa que resuelve dicho problema.
const wchar_t FULLSTR[] = L" ! ! !"; const wchar_t DOTS[] = L"..."; const long STYLE = 1; double maxSize = 100.0; BSTR str = SysAllocString(FULLSTR); if(Document2D->ksGetTextLength(str, STYLE) > maxSize) { // BSTR str_dots = SysAllocString(DOTS); double size_dots = Document2D->ksGetTextLength(str_dots, STYLE); SysFreeString(str_dots); // maxSize -= size_dots; SysReAllocStringLen(&str, str, SysStringLen(str) - 4); // , while(Document2D->ksGetTextLength(str, STYLE) > maxSize) SysReAllocStringLen(&str, str, SysStringLen(str) - 1); // size_t len = SysStringLen(str); SysFreeString(str); // wchar_t *p = new wchar_t[len + wcslen(DOTS) + 1]; wcsncpy(p, FULLSTR, len); p[len] = L'\0'; wcscat(p, DOTS); str = SysAllocString(p); delete [] p; } // Document2D->ksText(100, 100, // 0, // 0, // 0, // 0, // str); // SysFreeString(str); Document2D.Unbind(); // kompas->Visible = true; kompas.Unbind();
La cadena de origen se especifica en la constante
FULLSTR . La variable
maxSize establece la longitud del rectángulo en el que desea ingresar la cadena. Más tarde se especifica este valor, el tamaño de puntos suspensivos se resta de él, que se almacena en la variable
size_dots . Si la línea no encaja, se corta un carácter de ella hasta que encaje en el rectángulo del tamaño especificado. Esto sucede en un
ciclo while .
Preste atención a un punto muy importante: al generar una cadena, todos los parámetros del método
ksText (excepto las coordenadas del punto de anclaje) tienen un
valor cero . El hecho es que el método
ksGetTextLength no sabe nada acerca de estos parámetros, por lo que no puede tenerlos en cuenta al calcular la longitud de la cadena. Por lo tanto, si la salida de una cadena utiliza valores distintos de cero de los parámetros del método
ksText , la longitud de la cadena resultante puede diferir de la obtenida por el método
ksGetTextLength .
ConclusiónEn esta lección, aprendimos cómo mostrar etiquetas de texto simples usando el método
ksText . Esta no es la única forma de mostrar texto, sino quizás la más fácil. En la próxima lección, veremos cómo se puede generar esta línea compuesta utilizando este método. Y a continuación, consideraremos métodos de salida de texto más complejos.
Para continuar, sigue las noticias del blog.
Sergey Norseev, Ph.D., autor del libro "Desarrollo de aplicaciones para COMPAS en Delphi".