Trabajar con la API KOMPAS-3D → Lección 11 → Etiquetas de texto simple

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"


  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

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álidos

Para 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 personajes

De 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 utilizados

No 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ón

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

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


All Articles