In den vorherigen Lektionen des Zyklus haben wir gelernt, den Text im Schriftfeld anzuzeigen. Heute werden wir darĂĽber sprechen, wie Sie Text in das Dokument selbst ausgeben. Wir werden die einfachsten Beispiele betrachten und in den folgenden Lektionen komplexere Tricks zeigen.

Der Inhalt der Unterrichtsreihe „Arbeiten mit der KOMPAS-3D-API“
- Die Grundlagen
- Zeichnungsentwurf
- Richtige Verbindung zu KOMPAS
- Hauptinschrift
- Grafische Grundelemente
- Speichern eines Dokuments in verschiedenen Formaten
- Einstellungen kennenlernen
- Anspruchsvollere Schreibmethoden im Schriftfeld
- Beschriftungszellen lesen
- Sonderzeichen einschlieĂźlich einer Zeichenfolge
- Einfache Textbeschriftungen
Textankerpunkt
Text in KOMPAS wird immer relativ zu einem Punkt angezeigt, der als Ankerpunkt bezeichnet wird. Der Text kann relativ dazu unterschiedlich positioniert werden. Um die Position des Textes relativ zum Ankerpunkt
herauszufinden , wird die Methode
ksGetTextAlign der Schnittstelle
ksDocument2D verwendet . Das Folgende ist sein Prototyp.
long ksGetTextAlign ( long pText
Als einziger Parameter wird ein ganzzahliger Zeiger auf ein Textobjekt verwendet. Die Methode gibt den
Bindungstyp oder
-1 im Fehlerfall zurĂĽck. GĂĽltige Bindungstypen sind in der folgenden Tabelle aufgefĂĽhrt.
Die Tabelle der gĂĽltigen BindungstypenVerwenden Sie zum
Ändern der
Textbindung die Methode
ksSetTextAlign der Schnittstelle
ksDocument2D . Das Folgende ist sein Prototyp.
long ksSetTextAlign ( long pText, // «» long align // );
Bei Erfolg gibt diese Methode
1 zurĂĽck und im Fehlerfall
Null .
Textausgabe
Verwenden
Sie fĂĽr eine einfache Textausgabe die
ksText- Methode der
ksDocument2D- Schnittstelle. Das Folgende ist ein Prototyp dieser Methode.
long ksText ( double x, // double y, double ang, // double hStr, // double ksuStr, // long bitVector, // BSTR s // );
Lassen Sie uns
die Parameter der
ksText- Methode
analysieren . Wir haben den Ankerpunkt im vorherigen Abschnitt besprochen.
Der Parameter
ang legt den Winkel in Grad zwischen einer Textzeile und einer horizontalen Linie fest. Der Winkel wird gegen den Uhrzeigersinn gezählt. Das Bild unten zeigt eine Linie, die in einem Winkel von
45 ° gezeichnet wurde.
45 ° SchnurDer Parameter
hStr legt die Größe der Zeichenfolgen in Millimetern fest. Wenn der Wert dieses Parameters
Null ist , wird die Standardgröße verwendet.
Der Parameter
ksuStr gibt die Dehnung (Verengung) des Textes an. Die folgende Abbildung zeigt mehrere Zeilen mit unterschiedlichen Werten des Parameters
ksuStr .
Mehrere Linien mit unterschiedlichen DehnungswertenAus dieser Figur ist ersichtlich, dass "Dehnen 0" äquivalent zu "Dehnen 1" ist, dh das Fehlen jeglicher Dehnung.
Der Parameter
bitVector enthält eine Reihe von Flags, die den Zeichenstil bestimmen. Gültige Flags sind in der folgenden Tabelle aufgeführt.
ZeichenflaggentabelleTatsächlich gibt es andere gültige Flags, aber ihre Arbeit erscheint nur in der Konstruktion komplexer zusammengesetzter Zeichenfolgen. Wir werden einige davon in der nächsten Lektion betrachten.
Denken Sie daran, dass die Ausgabezeichenfolge nicht die Zeichen
@ ,
$ ,
& ,
~ ,
^ und
# enthalten sollte , da es sich um Steuerzeichen handelt. Wir werden in den nächsten Lektionen unseres Zyklus über die Arbeit mit ihnen sprechen.
Bei Erfolg gibt die
ksText- Methode einen ganzzahligen Zeiger auf Text zurĂĽck. Dieser Zeiger kann beispielsweise an die Methode
ksSetTextAlign übergeben werden, um die Position des Texts relativ zum Ankerpunkt zu ändern. Im Fehlerfall gibt die
ksText- Methode
Null zurĂĽck .
Beispiel
Das folgende Beispielprogramm demonstriert die Ausgabe von Zeichenfolgen mithilfe der
ksText- Methode.
// 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();
Der Einfachheit halber wird in diesem Beispiel der Code weggelassen, der fĂĽr die Erstellung und AusfĂĽhrung des Dokuments verantwortlich ist. Als Ergebnis dieses Programms wird der Text
„String“ im Dokument angezeigt.
Textgröße
Wenn Sie Text in einem Dokument anzeigen, ist es hilfreich zu wissen, wie viel Speicherplatz benötigt wird. Die
Texthöhe wird durch den Parameter
hStr der Methode
ksText festgelegt . Die Länge hängt jedoch direkt von der Ausgabezeichenfolge ab.
Verwenden Sie zur
Ermittlung die Methode
ksGetTextLengthFromReference der Schnittstelle
ksDocument2D . Diese Methode hat nur einen Parameter - einen ganzzahligen Zeiger auf Text. Es gibt die Länge des Textes in Millimetern zurück.
Die Methode
ksGetTextLengthFromReference ist unpraktisch, da Sie die Länge der Zeile vor der Ausgabe in das Dokument nicht bestimmen können. Um die Länge einer Zeichenfolge zu bestimmen, die noch nicht in das Dokument ausgegeben wurde, müssen Sie die Methode
ksGetTextLength verwenden. Aber bevor wir darĂĽber nachdenken, lassen Sie uns ĂĽber Stile sprechen.
Textstile
Das KOMPAS-System definiert verschiedene Stile für in Dokumenten angezeigte Texte vor. Jeder Stil hat eine Ganzzahl. Die am häufigsten verwendeten Stile finden Sie in der folgenden Tabelle.
Häufig verwendete TextstileIn dieser Tabelle sind nicht alle Stile angegeben: nur ein Teil davon. Eine vollständige Liste der verfügbaren Konstanten finden Sie auf der Seite
"Parameterstrukturen und Konstanten \ Konstanten \ Textkonstanten
\ Systemtextstile" in der KOMPAS-Dokumentation.
KsGetTextLength- Methode
Mit der
ksGetTextLength- Methode der
ksDocument2D- Schnittstelle können
Sie die Länge einer Zeichenfolge bestimmen, bevor sie in das Dokument ausgegeben wird. Unten sehen Sie einen Prototyp dieser Methode.
double ksGetTextLength ( BSTR text, // long style // );
Die Methode gibt die Länge der Zeichenfolge in Millimetern zurück. Bitte beachten Sie: Die Methode akzeptiert die Zeichenfolge selbst als Parameter und nicht als Zeiger auf das Objekt "text". Auf diese Weise können Sie die Größe der Zeile bewerten, bevor sie in das Dokument ausgegeben wird.
Beispiel
Betrachten Sie ein Beispiel fĂĽr die Verwendung der
ksGetTextLength- Methode. Angenommen, wir haben eine Linie und müssen sie in einem Rechteck einer bestimmten Länge platzieren (diese Aufgabe ist mit Hilfe von Absätzen viel einfacher zu lösen, aber in den nächsten Lektionen darüber). Wenn die Linie hineinpasst, wird sie vollständig angezeigt. Wenn nicht, wird es abgeschnitten und am Ende wird eine Ellipse platziert. Unten finden Sie den Quellcode des Programms, das ein solches Problem löst.
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();
Die
Quellzeichenfolge wird in der Konstante
FULLSTR angegeben. Die Variable
maxSize legt die Länge des Rechtecks ​​fest, in das Sie die Zeichenfolge eingeben möchten. Später wird dieser Wert angegeben, die Ellipsengröße wird davon abgezogen, die in der Variablen
size_dots gespeichert ist. Wenn die Linie nicht passt, wird ein Zeichen davon abgeschnitten, bis es in das Rechteck der angegebenen Größe passt. Dies geschieht in einer
while-Schleife .
Beachten Sie einen sehr wichtigen Punkt: Bei der Ausgabe eines Strings haben alle Parameter der
ksText- Methode (mit Ausnahme der Koordinaten des Ankerpunkts) den
Wert Null . Tatsache ist, dass die
ksGetTextLength- Methode nichts über diese Parameter weiß und sie daher bei der Berechnung der Zeichenfolgenlänge nicht berücksichtigen kann. Wenn also die Ausgabe eines Strings Werte ungleich Null der Parameter der
ksText- Methode verwendet, kann die resultierende Stringlänge von der durch die
ksGetTextLength- Methode erhaltenen
abweichen .
FazitIn dieser Lektion haben wir gelernt, wie einfache
Textbeschriftungen mit der
ksText- Methode
angezeigt werden. Dies ist nicht die einzige Möglichkeit, Text anzuzeigen, aber vielleicht die einfachste. In der nächsten Lektion werden wir uns ansehen, wie diese zusammengesetzte Linie mit dieser Methode ausgegeben werden kann. Im Folgenden werden komplexere Textausgabemethoden betrachtet.
Um fortzufahren, folgen Sie den Nachrichten des Blogs.
Sergey Norseev, Ph.D., Autor des Buches "Anwendungsentwicklung fĂĽr COMPAS in Delphi".