Utilisation de l'API KOMPAS-3D → Leçon 11 → Étiquettes de texte simples

Dans les leçons précédentes du cycle, nous avons appris à afficher le texte dans le cartouche. Aujourd'hui, nous allons parler de la façon de produire du texte dans le document lui-même. Nous allons considérer les exemples les plus simples et montrer des astuces plus complexes dans les leçons suivantes.




Le contenu de la série de leçons «Travailler avec l'API KOMPAS-3D»


  1. Les bases
  2. Conception de dessin
  3. Connexion correcte à KOMPAS
  4. Inscription principale
  5. Primitives graphiques
  6. Enregistrement d'un document dans différents formats
  7. Connaître les paramètres
  8. Méthodes d'écriture plus sophistiquées dans le cartouche
  9. Lecture des cellules de légende
  10. Caractères spéciaux dont une chaîne
  11. Étiquettes de texte simples

Point d'ancrage du texte


Le texte dans KOMPAS est toujours affiché par rapport à un certain point, qui est appelé le point d'ancrage. Le texte peut être positionné différemment par rapport à lui. Afin de trouver l'emplacement du texte par rapport au point d'ancrage, la méthode ksGetTextAlign de l'interface ksDocument2D est utilisée . Voici son prototype.

long ksGetTextAlign ( long pText //   ); 

En tant que seul paramètre, il prend un pointeur entier vers un objet texte . La méthode renvoie le type de liaison , ou -1 en cas d'erreur. Les types de liaison valides sont indiqués dans le tableau ci-dessous.


Le tableau des types de liaison valides

Pour modifier la liaison de texte, utilisez la méthode ksSetTextAlign de l'interface ksDocument2D . Voici son prototype.

 long ksSetTextAlign ( long pText, //   «» long align //  ); 

En cas de succès, cette méthode renvoie 1 et, en cas d'erreur, renvoie zéro .

Sortie texte


Pour une sortie de texte simple, utilisez la méthode ksText de l'interface ksDocument2D . Ce qui suit est un prototype de cette méthode.

 long ksText ( double x, //   double y, double ang, //   double hStr, //    double ksuStr, //  long bitVector, //  BSTR s //  ); 

Analysons les paramètres de la méthode ksText . Nous avons discuté du point d'ancrage dans la section précédente.

Le paramètre ang définit l'angle en degrés entre une ligne de texte et une ligne horizontale. L'angle est compté dans le sens antihoraire. L'image ci-dessous montre une ligne tracée à un angle de 45 ° .


Corde 45 °

Le paramètre hStr définit la taille des caractères de chaîne en millimètres. Si la valeur de ce paramètre est zéro , la taille par défaut est utilisée.

Le paramètre ksuStr spécifie l'étirement (rétrécissement) du texte. La figure ci-dessous montre plusieurs lignes avec différentes valeurs du paramètre ksuStr .


Plusieurs lignes avec différentes valeurs d'étirement

Sur cette figure, on peut voir que «l'étirement 0» équivaut à «l'étirement 1», c'est-à-dire l'absence de tout étirement.

Le paramètre bitVector contient un ensemble d'indicateurs qui déterminent le style de caractère. Les indicateurs valides sont répertoriés dans le tableau ci-dessous.


Table des drapeaux des personnages

En fait, il existe d'autres indicateurs valides, mais leur travail n'apparaît que dans la construction de chaînes complexes composées. Nous en examinerons certains dans la prochaine leçon.
N'oubliez pas - la chaîne de sortie ne doit pas contenir les caractères @ , $ , & , ~ , ^ et # , car ce sont des caractères de contrôle. Nous parlerons de travailler avec eux dans les prochaines leçons de notre cycle.
En cas de succès, la méthode ksText renvoie un pointeur entier vers le texte. Ce pointeur peut être transmis, par exemple, à la méthode ksSetTextAlign pour modifier la position du texte par rapport au point d'ancrage. En cas d'erreur, la méthode ksText renvoie zéro .

Exemple


Voici un exemple de programme qui illustre la sortie de chaîne à l'aide de la méthode 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(); 

Par souci de simplicité, le code responsable de la création et de l'exécution du document est omis dans cet exemple. À la suite de ce programme, le texte «String» s'affiche dans le document.

Taille du texte


Lorsque vous affichez du texte dans un document, il est utile de savoir combien d'espace cela prend. La hauteur du texte est définie par le paramètre hStr de la méthode ksText . Mais sa longueur dépend directement de la chaîne de sortie.

Pour le déterminer, utilisez la méthode ksGetTextLengthFromReference de l'interface ksDocument2D . Cette méthode n'a qu'un seul paramètre - un pointeur entier vers du texte. Il renvoie la longueur du texte en millimètres.

La méthode ksGetTextLengthFromReference n'est pas pratique car elle ne vous permet pas de déterminer la longueur de la ligne avant sa sortie dans le document. Pour déterminer la longueur d'une chaîne qui n'a pas encore été sortie dans le document, vous devez utiliser la méthode ksGetTextLength . Mais avant de le considérer, parlons des styles.

Styles de texte


Le système KOMPAS prédéfinit plusieurs styles pour les textes affichés dans les documents. Chaque style a un entier. Les styles les plus couramment utilisés sont dans le tableau ci-dessous.


Styles de texte couramment utilisés

Tous les styles ne sont pas donnés dans ce tableau: seulement une partie d'entre eux. Une liste complète des constantes disponibles se trouve sur la page "Structures de paramètres et constantes \ Constantes \ Constantes de texte \ Styles de texte système" dans la documentation KOMPAS.

Méthode KsGetTextLength


La méthode ksGetTextLength de l'interface ksDocument2D vous permet de déterminer la longueur d'une chaîne avant sa sortie dans le document. Voici un prototype de cette méthode.

 double ksGetTextLength ( BSTR text, // long style //  ); 

La méthode renvoie la longueur de la chaîne en millimètres. Remarque: la méthode accepte la chaîne elle-même comme paramètre, et non comme pointeur vers l'objet "texte". Cela vous permet d'évaluer la taille de la ligne avant sa sortie dans le document.

Exemple


Prenons un exemple d'utilisation de la méthode ksGetTextLength . Supposons que nous ayons une ligne et que nous devons la placer dans un rectangle d'une certaine longueur (cette tâche est beaucoup plus facile à résoudre à l'aide des paragraphes, mais à leur sujet dans les prochaines leçons). Si la ligne y tient, alors elle s'affiche en entier. Sinon, il est coupé et des points de suspension sont placés à la fin de celui-ci. Voici le code source du programme qui résout un tel problème.

 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 chaîne source est spécifiée dans la constante FULLSTR . La variable maxSize définit la longueur du rectangle dans lequel vous souhaitez saisir la chaîne. Plus tard, cette valeur est spécifiée, la taille des points de suspension en est soustraite, qui est stockée dans la variable size_dots . Si la ligne ne tient pas, un caractère est coupé jusqu'à ce qu'elle tienne dans le rectangle de la taille spécifiée. Cela se produit dans une boucle while .

Faites attention à un point très important: lors de la sortie d'une chaîne, tous les paramètres de la méthode ksText (à l'exception des coordonnées du point d'ancrage) ont une valeur nulle . Le fait est que la méthode ksGetTextLength ne sait rien de ces paramètres, elle ne peut donc pas les prendre en compte lors du calcul de la longueur de la chaîne. Ainsi, si la sortie d'une chaîne utilise des valeurs non nulles des paramètres de la méthode ksText , la longueur de chaîne résultante peut différer de celle obtenue par la méthode ksGetTextLength .

Conclusion

Dans cette leçon, nous avons appris à afficher des étiquettes de texte simples à l'aide de la méthode ksText . Ce n'est pas le seul moyen d'afficher du texte, mais peut-être le plus simple. Dans la leçon suivante, nous verrons comment cette ligne composée peut être sortie en utilisant cette méthode. Et dans ce qui suit, nous considérerons des méthodes de sortie de texte plus complexes.

Pour continuer, suivez l'actualité du blog.

Sergey Norseev, Ph.D., auteur du livre "Application Development for COMPAS in Delphi".

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


All Articles