Spezielle Code-Referenzen

Spezielle Codes können benutzt werden, um zusätzliche geometrische Formen zu erstellen und bestimmte Aktionen zu spezifizieren.

Das zweite Zeichen eines Drei-Zeichen-Strings (Vektorlängenspezifikation) muss 0 sein. Sie können die Nummer des Speziellen Codes auch bestimmen. Beispielsweise sind 008 und 8 beide gültige Spezifikationen.

Spezifikations-Byte-Codes

Code

Beschreibung

000

Ende der Symboldefinition

Zu Beginn jedes Symbols ist der Zeichenmodus aktiviert. Ist der Zeichenmodus eingeschaltet (Code 1), werden mithilfe von Vektoren Linien gezeichnet. Ist dieser Modus ausgeschaltet (Code 2), bewegen sich die Vektoren an eine neue Position, ohne eine Linie zu zeichnen.

001

Zeichenmodus aktivieren (Stift gesenkt)

002

Zeichenmodus deaktivieren (Stift angehoben)

003

Vektorlängen durch nächstes Byte dividieren

Die mithilfe des Befehls SYMBOL festgelegte Höhe wird zunächst als die Länge eines einzelnen orthogonalen Vektors (Richtung 0, 4, 8 oder C) verstanden). Code 3 dividiert die Vektorlängen durch das nächste Byte. Code 4 multipliziert die Vektorlängen mit dem nächsten Byte. Auf Code 3 und 4 folgt ein Spezifikationsbyte, das einen ganzzahligen Skalierfaktor (zwischen 1 und 255) enthält.

Soll die Symbolhöhe die Größe des gesamten Symbols festlegen, und Sie benutzen zehn Vektorlängen, um es zu zeichnen, dann können Sie die Höhenspezifikation mit 3,10 skalieren. Der Skalierfaktor kumuliert innerhalb eines Symbols, das heißt, multipliziert man ihn zuerst mit 2 und dann mit 6, ergibt sich ein Skalierfaktor von 12. Unter normalen Umständen möchten Sie den Effekt der Skalierfaktoren am Ende eines Symbols umkehren, besonders bei Subsymbolen und Schriftsymbolen für Text. Das Programm setzt den Skalierfaktor nicht automatisch wieder zurück.

004

Vektorlängen mit nächstem Byte multiplizieren

005

Aktuelle Position mit Push auf Stapel

Alles, was Sie verschoben haben, müssen Sie auch zurückholen. Der Positionsstapel hat nur vier Speicherplätze. Wenn die Kapazität des Stapels überschritten wird, weil entweder zu viel hinein verschoben oder zu wenig zurückgeholt wird, wird während des Zeichenvorgangs die folgende Meldung angezeigt:

Positionsstapel-Überlauf in Symbol nnn

Wenn Sie andererseits mehr Positionen zurückholen möchten als Sie in den Stapel hinein verschoben haben, wird während des Zeichenvorgangs die folgende Meldung angezeigt:

Positionsstapel-Unterlauf in Symbol nnn

006

Aktuelle Position mit Pop von Stapel

007

Vom nächsten Byte angegebene Nummer des untergeordneten Symbols zeichnen

In Nicht-Unicode-Schriften ist das Spezifikationsbyte, das auf den Code 7 folgt, eine Symbolnummer zwischen 1 und 255. In Unicode-Schriften folgt dem Code 7 eine Unicode-Symbolnummer zwischen 1 und 65535. Unicode-Symbolnummern sollten als zwei Byte gezählt werden.

Das mit dieser Nummer (in derselben Symboldatei) versehene Symbol wird zurzeit gezeichnet. Der Zeichenmodus für das neue Symbol wird nicht automatisch zurückgesetzt. Ist das Subsymbol fertiggestellt, wird das Zeichnen des aktuellen Symbols fortgesetzt.

008

Von nächsten beiden Byte angegebene X-Y-Verschiebung

Normale Spezifikationsbytes für Vektoren zeichnen nur in die 16 vordefinierten Richtungen, wobei die maximale Länge 15 Einheiten beträgt. Diese Beschränkungen tragen dazu bei, Symboldefinitionen effizienter zu machen, auch wenn sie in manchen Fällen Grenzen setzen. Code 8 legt die X-Y-Verschiebung durch die nächsten beiden Bytes fest. Auf Code 8 müssen zwei Spezifikationsbytes des folgenden Formats folgen:

8,X-displacement,Y-displacement

Die X-Y-Verschiebungen können im Bereich von -128 bis +127 liegen. Die Verwendung des vorangestellten + ist wahlfrei, und Sie können Klammern einsetzen, um die Lesbarkeit zu verbessern. Das folgende Beispiel führt zu einem Vektor, der zehn Einheiten nach links und drei Einheiten nach oben gezeichnet wird (oder sich in diese Richtung bewegt).

8,(-10,3)

Im Anschluss an die beiden Verschiebungs-Spezifikationsbytes kehrt das Symbol zum Modus "Normaler Vektor" zurück.

Sie können Code 9 benutzen, um eine Folge von Vektoren zu zeichnen, die nicht dem Standard entsprechen. Auf diesen Code kann eine beliebige Anzahl von X-Y-Verschiebungspaaren folgen. Das Ende der Codefolge bildet das Paar (0,0). Im folgenden Beispiel werden drei Vektoren gezeichnet, die nicht dem Standard entsprechen, anschließend erfolgt die Rückkehr zum Modus "Normaler Vektor".

9,(3,1),(3,2),(2,-3),(0,0)

Sie sollten die Folge von X-Y-Verschiebungspaaren mit dem Paar (0,0) beenden, damit das Programm eventuell folgende Normalvektoren oder spezielle Codes erkennen kann.

009

Mehrere X-Y-Verschiebungen, terminiert (0,0)

00A

Von nächsten beiden Byte definierter Achtelkreisbogen

Dieses Phänomen wird als Achtelskreis bezeichnet, weil ein oder mehrere 45°-Achtel abgedeckt werden, wobei mit einem vollen Achtel angefangen und geendet wird. Achtel werden von der 3-Uhr-Position aus gegen den Uhrzeigersinn durchnummeriert, wie aus der folgenden Abbildung ersichtlich wird.

Die Spezifikation des Bogens lautet folgendermaßen:

10,radius,(-)0SC

Der Radius kann ein beliebiger Wert zwischen 1 und 255 sein. Das zweite Spezifikationsbyte definiert die Richtung des Bogens (ist der Wert positiv, wird gegen den Uhrzeigersinn gezählt; ist er negativ, im Uhrzeigersinn), das Anfangsachtel ( s , ein Wert zwischen 0 und 7) und die Gesamtzahl der abgedeckten Achtel ( z , ein Wert zwischen 0 und 7, wobei 0 acht Achteln oder einem ganzen Kreis entspricht). Um die Lesbarkeit zu verbessern, können Sie runde Klammern einsetzen. Betrachten Sie beispielsweise den folgenden Abschnitt aus einer Symboldefinition:

...012,10,(1,-032),01E,...

Dieser Code zeichnet einen Vektor der Länge eine Einheit nach oben und rechts, dann einen mit Achtel 3 beginnenden, im Uhrzeigersinn gezeichneten Bogen (mit einem Radius von einer Einheit für zwei Achtel) und danach einen Vektor der Länge eine Einheit, diesmal in Richtung unten und rechts, wie folgende Abbildung zeigt.

00B

Von nächsten fünf Byte definierter Bruchbogen

Die Definition verwendet fünf Spezifikationsbytes.

11,start_offset,end_offset,high_radius,radius,(-)0SC

Anfangsabstand und Endabstand geben an, mit welcher Entfernung vom Achtel ein Bogen beginnt oder endet. Großradius stellt die wichtigsten acht Bit des Radius dar; dieser Wert beträgt 0, es sei denn, der Radius ist größer als 255 Einheiten. Um einen Bogenradius zu generieren, der größer als 255 ist, müssen Sie den Wert Großradius mit 256 multiplizieren und diesen Wert zum Wert Radius addieren. Radius und das Spezifikationsbyte am Ende sind mit der Achtelskreisspezifikation identisch (siehe weiter oben: Code 00A).

Sie bestimmen den Anfangsabstand, indem Sie die Differenz zwischen dem Rand des Anfangsachtels (ein Vielfaches von 45°) und dem Anfangspunkt des Bogens in Grad berechnen. Anschließend multiplizieren Sie die Differenz mit 256 und dividieren sie durch 45. Wenn der Bogen auf dem Rand des Achtels beginnt, beträgt sein Anfangsabstand 0.

Der Endabstand wird auf ähnliche Weise berechnet, allerdings ermitteln Sie die Gradzahl vom Rand des letzten geschnittenen Achtels bis zum Ende des Bogens. Endet dieser auf dem Rand eines Achtels, beträgt der Endabstand 0.

Ein gebrochener Achtelskreis von 55 ° bis 95 ° mit einem Radius von 3 Einheiten würde zum Beispiel folgendermaßen codiert werden:

11,(56,28,0,3,012)

Es folgt die Erläuterung:

start_offset     = 56 because ((55 - 45) * 256 / 45) = 56 
end_offset       = 28 because ((95 - 90) * 256 / 45) = 28
high_radius      = 0  because (radius < 255) 
radius           = 3 
starting octant  = 1  because arc starts in the 45 degree octant
ending octant    = 2  because arc ends in the 90 degree octant

00C

Durch X-Y-Verschiebung und Ausbuchtung definierter Bogen

Sie sind mit Code 8 und 9 vergleichbar, da mit ihnen X-Y-Verschiebungen definiert werden können. Code 00C und 00D ermöglichen es Ihnen jedoch, Bogen zu zeichnen, indem Sie einen Ausbuchtungsfaktor auf den Verschiebevektor anwenden. Code 00C zeichnet ein Bogensegment, während Code 00D so lange Bogensegmente (Polybogen) zeichnet, bis er durch eine Verschiebung (0,0) beendet wird.

Auf Code 00C müssen drei Bytes folgen, die den Bogen beschreiben:

0C,X-displacement,Y-displacement,Bulge

Sowohl die X- als auch die Y-Verschiebung und die Ausbuchtung, welche die Krümmung des Bogens definiert, können im Bereich von -127 bis +127 liegen. Wenn das von der Verschiebung definierte Liniensegment die Länge D und der senkrechte Abstand vom Mittelpunkt dieses Segments die Höhe H hat, beträgt die Größe der Ausbuchtung ((2 * H / D) * 127). Verläuft der Bogen von der aktuellen zur neuen Position im Uhrzeigersinn, ist das Vorzeichen negativ.

Ein Halbkreis hat die Ausbuchtung 127 (oder -127) und ist der größte Bogen, der mit diesen Codes als Einzelbogen-Segment dargestellt werden kann. (Für größere Bogen müssen Sie zwei aufeinander folgende Bogensegmente verwenden.) Eine Ausbuchtungsspezifikation von 0 ist gültig und stellt ein gerades Liniensegment dar. Sie sparen jedoch ein Byte bei der Symbolbeschreibung, wenn Sie für gerade Liniensegmente Code 8 verwenden.

Auf den Polybogen-Code (00D oder 13) folgen entweder die 0 oder aber weitere, drei Zeichen umfassende Bogensegmente, und er wird durch eine Verschiebung (0,0) beendet. Beachten Sie dabei, dass nach der letzten Verschiebung keine Ausbuchtung definiert wird. Der Buchstabe S kann zum Beispiel durch die folgende Sequenz definiert werden:

13,(0,5,127),(0,5,-127),(0,0)

Segmente mit der Ausbuchtung Null werden in Polybogen eingesetzt, um gerade Segmente auszudrücken. Diese Arbeitsweise ist effizienter, als wenn der Polybogen beendet, ein gerades Segment eingefügt und ein neuer Polybogen begonnen würde.

Die Zahl -128 kann weder für Bogensegment- noch für Polybogendefinitionen verwendet werden.

00D

Mehrere durch Ausbuchtungen spezifizierte Bogen

00E

Nächsten Befehl nur bei vertikalem Text verarbeiten

Wenn dieser spezielle Code in der Definition eines Zeichens angetroffen wird, wird der folgende Code, je nach Ausrichtung, entweder ausgeführt oder übergangen. Bei vertikaler Ausrichtung wird der nächste Code ausgeführt, bei horizontaler Ausrichtung wird er übergangen.

In horizontalem Text ist der Anfangspunkt für jedes Zeichen das linke Ende der Basislinie. In vertikalem Text wird die obere Mitte des Zeichens als Anfangspunkt angenommen. Normalerweise wird am Ende eines jeden Zeichens ein nicht gezeichnetes Segment hinzugefügt, um den Anfangspunkt des darauf folgenden Zeichens anzugeben. Für horizontalen Text gilt nach rechts, für vertikalen Text nach unten. Der Spezialcode 00E (14) wird in erster Linie eingesetzt, um Unterschiede in Anfangs- und Endpunkten anzupassen; hierdurch wird ermöglicht, dass ein und dieselbe Zeichensymbol-Definition sowohl horizontal als auch vertikal eingesetzt werden kann. So könnte die folgende Definition des Großbuchstabens D zum Beispiel sowohl in horizontalem als auch in vertikalem Text benutzt werden.

*68,22,ucd 
2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0