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»
- Les bases
- Conception de dessin
- Connexion correcte à KOMPAS
- Inscription principale
- Primitives graphiques
- Enregistrement d'un document dans différents formats
- Connaître les paramètres
- Méthodes d'écriture plus sophistiquées dans le cartouche
- Lecture des cellules de légende
- Caractères spéciaux dont une chaîne
- É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 validesPour 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'étirementSur 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 personnagesEn 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ésTous 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 .
ConclusionDans 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".