Arbeiten Sie mit der KOMPAS-3D-API → Lektion 11 → Einfache Textbeschriftungen

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“


  1. Die Grundlagen
  2. Zeichnungsentwurf
  3. Richtige Verbindung zu KOMPAS
  4. Hauptinschrift
  5. Grafische Grundelemente
  6. Speichern eines Dokuments in verschiedenen Formaten
  7. Einstellungen kennenlernen
  8. Anspruchsvollere Schreibmethoden im Schriftfeld
  9. Beschriftungszellen lesen
  10. Sonderzeichen einschlieĂźlich einer Zeichenfolge
  11. 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 Bindungstypen

Verwenden 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 ° Schnur

Der 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 Dehnungswerten

Aus 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.


Zeichenflaggentabelle

Tatsä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 Textstile

In 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 .

Fazit

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

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


All Articles