Arbeiten Sie mit der KOMPAS-3D-API → Lektion 16 → Steuerzeichen

Wir setzen die Artikelserie über die Arbeit mit der CAD-API COMPASS-3D fort. Steuerzeichen wurden bereits mehrmals in früheren Lektionen des Zyklus gesehen. Dann wurde jedes Mal gesagt, dass die Ausgangsleitungen sie nicht enthalten sollten, da COMPAS sie auf besondere Weise verarbeitet. Jetzt ist es Zeit, sie besser kennenzulernen.

Wenn Sie die Arbeit mit ihnen beherrschen, werden Sie verstehen, dass das Erstellen komplexer zusammengesetzter Zeichenfolgen eine triviale Aufgabe ist, in den meisten Fällen muss keine große Menge Code geschrieben werden.

In der Lektion werden wir uns ansehen, wie Sonderzeichen und Schriftzeichen mit Steuerzeichen verwendet werden, wie mit ihrer Hilfe Brüche und Abweichungen erstellt werden und wie sie in Verbindung mit Absätzen verwendet werden.



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
  12. Zusammengesetzte Zeichenfolgen
  13. Absätze
  14. Mehrzeiliger Text
  15. Absatzbasierte zusammengesetzte Linien
  16. Steuerzeichen

Flüchtige Überprüfung


Die Steuerzeichen sind: @, $, &,;, ~, ^ und #. Leider enthält das KOMPAS SDK nur sehr wenige Informationen zu deren Verwendung. Weitere Informationen finden Sie in der Hilfe von KOMPAS im Abschnitt „9. KOMPAS-3D-Einstellungen / Speicherung von Systemeinstellungen / Servicedateien / Benutzermenüdatei / Dateisyntax .



Alle Steuerzeichen können bedingt in zwei Gruppen unterteilt werden: Haupt- und Hilfszeichen. Hilfssymbole werden nur in Verbindung mit den Hauptsymbolen verwendet und beschreiben für sich genommen keine Komponente. Die folgende Tabelle enthält eine kurze Beschreibung der Steuerzeichen.



Betrachten wir sie genauer.

Fügen Sie Sonderzeichen ein


Wir haben bereits Sonderzeichen berücksichtigt (siehe Lektionen 4 und 10 ). Um ein Sonderzeichen einzufügen, wurde eine separate Instanz der ksTextItemParam- Schnittstelle verwendet . Mithilfe von Steuerzeichen können Sie beliebig viele Sonderzeichen in eine Zeichenfolge einfügen, ohne die Schnittstelle ksTextItemParam erneut zu verwenden.
Die Syntax zum Einfügen von Sonderzeichen lautet:

AA @ YXXXX ~ BB

wo
AA - eine Zeichenfolge vor einem Sonderzeichen,
Y - Modifikator zur Darstellung des Sonderzeichencodes,
XXXX - Code des eingefügten Sonderzeichens.
BB - eine Zeile nach dem Sonderzeichen.

Der Code für das eingefügte Sonderzeichen wird zwischen @ und ~ angegeben . Darüber hinaus kann der Wert des Modifikators Y in Dezimal- oder Hexadezimalschreibweise angegeben werden. Gültige Modifikator- Y- Werte sind in der folgenden Tabelle aufgeführt.



Hinweis: Wie meine Experimente zeigen, verarbeitet COMPASS normalerweise das Fehlen des Zeichens ~ . In diesem Fall werden bei Bedarf Sonderzeichen eingefügt. Ich empfehle jedoch dringend, sich nicht auf dieses Verhalten zu verlassen und den Einfügevorgang immer mit dem Zeichen ~ abzuschließen.

Das folgende Beispiel zeigt ein Programm, das die Ausgabe von Sonderzeichen demonstriert.

BSTR str = SysAllocString(OLESTR(" @+51~ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" @*33~ ")); document2D->ksText(100.0,90.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

In diesem Beispiel wird dasselbe Zeichen (α alpha) zweimal angezeigt. Das erste Mal, wenn der Code dezimal angegeben wird, das zweite Mal hexadezimal. Die folgende Abbildung zeigt das Ergebnis des Programms.



Mit Steuerzeichen können Sie mehrere Sonderzeichen in derselben Zeile anzeigen. Im folgenden Beispiel werden die ersten drei Buchstaben des griechischen Alphabets in einem Aufruf der ksText- Methode angezeigt.

 BSTR str = SysAllocString(OLESTR("@+51~ @+52~ @+53~")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Modifikator + ist der Standardmodifikator. Daher kann die obige Zeile folgendermaßen geschrieben werden:

"@ 51 ~ @ 52 ~ @ 53 ~"

In diesem Fall bleibt das Ergebnis des Programms gleich.

Wenn ein @ ein ungültiges Zeichen ist, wird die Zeile zwischen @ und ~ unverändert angezeigt. Die Zeichen @ und ~ werden weggelassen. Zum Beispiel mit der Zeile:

"Vor @ T51 ~ Nach"

Das Dokument wird angezeigt:

Vor T51 Nachher

Hinweis: Dieses Verhalten von KOMPAS ist nicht dokumentiert und kann in verschiedenen Programmversionen variieren.

Hinweis: Steuerzeichen eignen sich nicht zum Einfügen von Sonderzeichen, die eine Zeichenfolge enthalten. Tatsache ist, dass Sie zur Einschränkung ihrer Aktion das Flag SPECIAL_SYMBOL_END verwenden müssen (weitere Informationen finden Sie in 10 Lektionen des Zyklus). Steuerzeichen erlauben jedoch nicht die Verwendung von Flags.

Fügen Sie Schriftzeichen ein


Zusätzlich zu Sonderzeichen können Sie normale Zeichen anhand ihres Codes einfügen. Hierfür werden die Steuerzeichen ^ und ~ verwendet. Ihre Syntax ist unten angegeben.

AA ^ ( FNAME ) YXXXX ~ BB

wo
AA - eine Zeichenfolge vor dem eingefügten Zeichen,
FNAME - der Name der Schriftart, aus der das Zeichen stammt,
Y - Modifikator für die Darstellung des Zeichencodes (ähnlich wie @),
XXXX - numerischer Code des eingefügten Zeichens,
BB - eine Zeile nach dem eingefügten Zeichen.

Das Steuerzeichen ^ ähnelt in seinem Zweck @ . Sie haben sogar eine ähnliche Syntax. Es gibt jedoch zwei wichtige Unterschiede zwischen ihnen:

  1. ^ fügt kein Sonderzeichen, sondern ein Schriftzeichen durch seinen Code ein;
  2. Für das einzufügende Zeichen können Sie die Schriftart im Feld FNAME festlegen (@ erlaubt dies nicht).

Symbolcodes können mit der Charmap-Anwendung (Symboltabelle) angezeigt werden, die Teil des Windows-Betriebssystems ist.

Wenn keine Schriftart angegeben ist, wird die Standardschriftart verwendet. Das Folgende ist ein Beispiel mit dem Zeichen ^ .

 BSTR str = SysAllocString(OLESTR(" ^(Arial)*B1~  ^*39~ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

In diesem Beispiel werden zwei Zeichen in die resultierende Zeichenfolge eingefügt. Zum einen wählen wir die Schriftart Arial aus , zum zweiten belassen wir die Standardschrift. Die folgende Abbildung zeigt die Zeile, die in das Dokument ausgegeben wird.



Bitte beachten Sie: Die Schriftart wird nur für das angezeigte Zeichen eingestellt. Wie meine Experimente zeigen, verarbeitet KOMPAS normalerweise das Fehlen eines Terminators. Ich empfehle jedoch nicht, sich auf dieses Verhalten zu verlassen und immer einen Finalizer festzulegen.

Wenn nach ^ ein ungültiges Zeichen (oder ein ungültiger Code) angegeben wird, werden ^ und ~ weggelassen, und die Zeile zwischen ihnen wird wie in der Standardschrift angezeigt. Zum Beispiel mit der Linie

"Vor ^ Q (Arial) * B1 ~ Nach"

Das Dokument wird angezeigt:

"Vor Q (Arial) * B1 Nach"

Wenn im Feld FNAME ein falscher Schriftname angegeben wird, wählt KOMPAS die Schriftart aus und zeigt das Zeichen darin an.

Wenn die Zeile keine schließende Klammer enthält, wird eine solche Zeile nicht vollständig angezeigt. Zum Beispiel mit der Zeile:

"Vor ^ Q (Arial * B1 ~ Nach"

Das Dokument wird nur angezeigt

"Bis"

Hinweis: Das obige Verhalten mit falscher Steuerzeichensyntax gilt für KOMPAS-3D V17 und ist nicht dokumentiert. In anderen Versionen kann es anders sein.

Zusätzliche Möglichkeiten zum Einfügen von Zeichen


Die Zeichen @ und ^ haben Analoga - & bzw. # . Sie haben eine ähnliche Syntax:

AA & XX ~ BB
AA # ( FNAME ) XX ~ BB

wo

AA - eine Zeichenfolge, die vor dem eingefügten Zeichen angezeigt wird.
XX - Code des eingefügten Zeichens (für & - Sonderzeichen, für # - Schriftzeichen),
BB - eine Zeichenfolge, die nach dem eingefügten Zeichen angezeigt wird.
FNAME - der Name der Schriftart.

Es gibt nur zwei Unterschiede zwischen den Zeichen @ und ^ und ihren Gegenstücken:

  1. Die Zeichen & und # haben keinen Y-Modifikator. Der Zeichencode wird immer in Dezimalschreibweise angegeben.
  2. Der Code für das einzufügende Zeichen wird durch maximal zwei Ziffern angegeben.

Das Folgende ist der Quellcode für ein Programm, das die Verwendung der Zeichen & und # demonstriert.

 BSTR str = SysAllocString(OLESTR(" &51~ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" #(Arial)37~  #37~ ")); document2D->ksText(100.0,90.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Mehrzeiliger Text


Mit Hilfe von Steuerzeichen kann mehrzeiliger Text angezeigt werden. Dazu müssen Sie anstelle der Übertragung in eine neue Zeile die folgende Sequenz einfügen: @ / . Hinweis: Das @ -Zeichen wird ohne Abschlusszeichen ~ verwendet . Das Folgende ist der Quellcode für ein Programm, das mehrzeiligen Text mit Steuerzeichen anzeigt.

 BSTR str = SysAllocString(OLESTR(" @/ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Bitte beachten Sie: Dank der Verwendung von Steuerzeichen wird zweizeiliger Text mit nur einem Aufruf der ksText- Methode angezeigt . Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Steuerzeichen einfügen


Wir haben herausgefunden, wie beliebige Sonderzeichen und Unicode-Zeichen eingefügt werden können. Was aber, wenn Sie das Steuerzeichen selbst einfügen möchten? Hier können Sie auf zwei Arten vorgehen. Die erste Möglichkeit besteht darin, das Zeichen ^ zu verwenden und wie normale Schriftzeichen einzufügen. Aber es gibt einen einfacheren Weg.

Symbol ; ist ein Hilfsmittel und kann direkt in den Text eingefügt werden. Um andere Steuerzeichen einzufügen, müssen Sie diese verdoppeln. Das heißt, ein Paar von @@ Zeichen setzt ein einzelnes @ Zeichen in den Text ein. Gleiches gilt für andere Steuerzeichen.

Das folgende Beispielprogramm demonstriert das Einfügen von Steuerzeichen in eine Zeichenfolge.

 BSTR str = SysAllocString(OLESTR(" : @@ $$ && ; ~~ ^^ ##")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Obere und untere Abweichungen


Die folgende Syntax wird verwendet, um Abweichungen einzufügen:

AA $ XX ; YY $ BB

wo

AA - Text vor Abweichungen angezeigt;
XX - obere Abweichung;
YY ist die geringere Abweichung;
BB - Text nach Abweichungen angezeigt.

Bitte beachten Sie: Die gesamte Konstruktion ist auf $ Zeichen beschränkt, und das “ ; »Dient als Trennzeichen zwischen den oberen und unteren Abweichungen.

Wenn es kein Trennzeichen gibt "zwischen den Zeichen $ ; ", Dann wird die gesamte Linie zwischen ihnen als oberste Abweichung interpretiert. Wenn Komponente XX fehlt, dh nachdem das erste $ sofort geht “ ; ", Dann wird die gesamte nachfolgende Zeile zum nächsten $ als die geringere Abweichung interpretiert.

Hinweis: Der Text der oberen Abweichung sollte nicht mit den Buchstaben b , d , s , m und l (Kleinbuchstaben L ) beginnen. Der Grund dafür wird etwas später erklärt.

Das folgende Beispiel zeigt ein Programm, das die Ausgabe mit Abweichungen anzeigt

 BSTR str = SysAllocString(OLESTR(" $;$ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms:



Bitte beachten Sie, dass KOMPAS nur ein Zeichen verarbeitet " ; ". Das zweite Zeichen ist " ; "Kann als Finalisierer der gesamten Struktur interpretiert werden. Mit der Zeile " 11 $ 22; 33; 44 $ " wird beispielsweise der Bildschirm angezeigt:



Hinweis: Dieses Verhalten von KOMPAS ist nicht dokumentiert, daher können Sie sich nicht darauf verlassen.

Bruchteil


Die Bruchsyntax ähnelt der Abweichungssyntax und bietet zwei äquivalente Optionen:

AA $ bXX ; YY $ BB
AA $ dXX ; YY $ BB

wo

AA - Textausgabe in Brüche;
XX ist der Zähler;
YY ist der Nenner;
BB - Text, der nach dem Bruch angezeigt wird.

Bitte beachten Sie: Der einzige Unterschied zwischen der Ausgabe des Bruchs und der Ausgabe von Abweichungen ist das Vorhandensein des Buchstabens d oder b unmittelbar nach dem ersten Vorzeichen von $ . Ansonsten sind ihre Syntaxen identisch.

Wenn zwischen den Zeichen $ d ( $ b ) und $ kein " ; " steht ", Dann wird die gesamte Zeile zwischen ihnen als Zähler interpretiert. Wenn Komponente XX fehlt, dh nachdem $ d ( $ b ) sofort kommt " ; ", Dann wird die gesamte nachfolgende Zeile zum nächsten $ als Nenner interpretiert.

Hinweis: Der Zählertext darf nicht mit den Buchstaben s , m oder l (Kleinbuchstaben L ) beginnen. Der Grund dafür wird etwas später erklärt.

Das folgende Beispiel zeigt ein Programm, das die Ausgabe von Brüchen mithilfe von Steuerzeichen demonstriert.

 BSTR str = SysAllocString(OLESTR(" $d;$ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Bitte beachten Sie, dass KOMPAS die "zusätzlichen" Zeichen "verarbeitet . »Sowie bei Abweichungen. Dieses Verhalten ist nicht dokumentiert und kann nicht als verlässlich angesehen werden.

Variation und Kontrolle der Fraktionsgröße


Ganz am Anfang der Konstruktion von Abweichungen oder Brüchen kann einer der Buchstaben stehen: s , m oder l (Kleinbuchstabe L ). Sie geben die Größe der Abweichungen und Elemente des Bruchs an (Zähler und Nenner). Ihr Zweck ist in der folgenden Tabelle beschrieben.



Wenn keiner dieser Buchstaben angegeben ist, wird l für den Bruch und m für Abweichungen verwendet. Das folgende Beispielprogramm demonstriert die Verwendung dieser Buchstaben.

 BSTR str = SysAllocString(OLESTR(" $d;$ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" $dl;$ ")); document2D->ksText(100.0,85.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" $dm;$ ")); document2D->ksText(100.0,70.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" $ds;$ ")); document2D->ksText(100.0,60.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Obwohl die Buchstaben s , m und l in diesem Beispiel für Brüche verwendet werden, ist ihre Verwendung für Abweichungen nicht anders.

Beachten Sie, dass wenn zwischen dem Beginn eines Bruchs oder einer Abweichung ( $ , $ d oder $ b ) und dem Buchstaben s , m oder l mindestens ein "fremdes" Zeichen (z. B. ein Leerzeichen) steht, COMPAS die Buchstaben und den Bruch oder nicht "sieht" Abweichung ist die Standardgröße.

Verschachtelte Steuerzeichen


Bei der Ausgabe von Brüchen und Abweichungen werden die in ihrer Zusammensetzung enthaltenen Linien rekursiv verarbeitet. Dies bedeutet, dass beim Bilden von Zähler und Nenner auch Steuerzeichen verwendet werden können. Dieser Ansatz wird im folgenden Beispiel demonstriert.

 BSTR str = SysAllocString(OLESTR("@54~$s2$ + $d@+51~;@+52~$ - ^(Symbol)*70~")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); 

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Um Buchstaben des griechischen Alphabets einzufügen, verwenden wir die Steuerzeichen @ und ^ (für den Buchstaben  pi). Der Grad im ersten Semester wird anhand von Abweichungen abgeleitet. Der Teilstring $ s2 $ zeigt ihn an. Der Buchstabe s gibt die geringe Größe der Abweichung an, jedoch aufgrund des Fehlens eines Trennzeichens " ; »Es wird nur die obere Abweichung angezeigt.

Um einen Bruch zu bilden, wird die Kombination $ d; $ verwendet . Darüber hinaus enthalten der Zähler und der Nenner Steuerzeichen, die die Ausgabe der Buchstaben des griechischen Alphabets liefern.

Der zuletzt subtrahierte Wert (π pi) wird mit den Steuerzeichen ^ und ~ als Symbol der Symbolschrift angezeigt.

Leider sind die Möglichkeiten einer solchen "Rekursion" sehr begrenzt. Wir können keine Brüche und Abweichungen ineinander investieren. Das Problem ist, dass beide mit dem Steuerzeichen $ gebildet werden. Aus diesem Grund kann COMPASS nicht korrekt analysieren, welches $ zu welchem ​​Element gehört.

Steuerzeichen im Absatz


Sie können die Einschränkung mit verschachtelten Steuerzeichen mithilfe von Absätzen teilweise umgehen. Durch die gemeinsame Verwendung von Steuerzeichen und Absätzen können Sie noch komplexere Strukturen erstellen. Das folgende Beispiel zeigt den Aufbau einer 4-stufigen Fraktion.

Programmcode zum Erstellen einer 4-stufigen Fraktion
 //   DynamicArrayPtr dynamicArray; dynamicArray = static_cast<DynamicArrayPtr>(kompas->GetDynamicArray(TEXT_ITEM_ARR)); dynamicArray->ksClearArray(); TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); //     BSTR str = SysAllocString(OLESTR("  ")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); //     TextItemFontPtr textItemFont; textItemFont = static_cast<TextItemFontPtr>(textItemParam->GetItemFont()); textItemFont->set_bitVector(NUMERATOR); str = SysAllocString(OLESTR("1 + $d@+51~;2$")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); //    textItemFont->set_bitVector(DENOMINATOR); str = SysAllocString(OLESTR("1 + $d@+56~;2$")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); //  textItemFont->set_bitVector(END_FRACTION); str = SysAllocString(OLESTR("  ")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); //   textItemFont.Unbind(); textItemParam.Unbind(); //    ksTextLineParam TextLineParamPtr textLineParam; textLineParam = static_cast<TextLineParamPtr>(kompas->GetParamStruct(ko_TextLineParam)); textLineParam->Init(); textLineParam->SetTextItemArr(dynamicArray); dynamicArray.Unbind(); //  ParagraphParamPtr paragraphParam; paragraphParam=static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); document2D->ksParagraph(paragraphParam); document2D->ksTextLine(textLineParam); document2D->ksEndObj(); //   textLineParam.Unbind(); paragraphParam.Unbind(); 


In diesem Beispiel werden Steuerzeichen verwendet, um Brüche im Zähler und Nenner des Hauptbruchs zu konstruieren sowie Buchstaben des griechischen Alphabets einzufügen. Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Fazit


In dieser Lektion haben wir uns mit Steuerzeichen getroffen und gelernt, wie man damit Sonderzeichen und Schriftzeichen anzeigt. Wie Sie sehen können, bieten sie eine einfache Syntax zum Erstellen von Zeichenfolgen, die Sonderzeichen, Brüche und Abweichungen enthalten. Leider eignen sie sich nicht zum Einfügen von Sonderzeichen mit Zeichenfolgen. Solche Sonderzeichen sind jedoch äußerst selten. Dies ist eine der Einschränkungen von Steuerzeichen. Sie können auch nicht zum Erstellen von Teilzeichenfolgen und Teilzeichenfolgen verwendet werden, und es gibt Einschränkungen bei der Arbeit mit Sonderzeichen, die Zeichenfolgen enthalten. Dies beeinträchtigt jedoch nicht ihre Verdienste. Damit ist unsere Diskussion über Steuerzeichen abgeschlossen.

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/de457702/


All Articles