Erweiterte Linienparameter

Linien in PDF haben nicht nur eine definierte Länge, sondern auch eine definierte Dicke. Streng geometrisch gesehen sind es somit keine Linien, sondern Flächen. Folglich ergibt sich die Frage, wie genau wir eigentlich die Linienenden und -ecken zeichnen.

Linienenden

Linienenden werden normalerweise rechtwinklig zur letzten Linienrichtung abgeschnitten. Die Linie wird so weit gezeichnet, dass sie den angegebenen Endpunkt gerade berührt. Man kann sich das so vorstellen, wie wenn man die Linie mit einem viereckigen Stift zeichnen würde, bis dessen Rand am Endpunkt ist. Dies nennt man „Butt Cap“.

Alternativ kann man die Linie in einem Halbkreis abschliessen. Dabei wird der angegebene Endpunkt als Kreismittelpunkt, und die halbe Liniendicke als Radius genommen. Man kann sich das so vorstellen, wie wenn man die Linie mit einem runden Stift zeichnen würde, bis dessen Mittelpunkt am Endpunkt ist. Dies nennt man „Round Cap“.

Als dritte Variante schliesslich kann man das Linienende wie gehabt rechtwinklig abschneiden, aber um die halbe Liniendicke über den Endpunkt hinaus zeichnen. Man kann sich das so vorstellen, wie wenn man die Linie mit einem viereckigen Stift zeichnen würde, bis dessen Mittelpunkt am Endpunkt ist. Dies nennt man „Square Cap“.

Eine kleine Illustration, um das Prinzip zu verdeutlichen:

Die Auswahl des Stils für Linienende erfolgt mit der J Anweisung. Diese erwartet einen Parameter mit einer Zahl 0, 1 oder 2.

Wert Stil
0Butt Cap
1Round Cap
2Square Cap

gepunktete Linie

Mit den Anweisungen für gestrichelte Linien lassen sich zwar theoretisch auch gepunktete Linien zeichnen, indem man die Strichlänge mit der Strichdicke gleichsetzt, aber in der Praxis sieht das Ergebnis oft scheusslich aus. Dies, weil der eigentliche Zeichenalgorithmus diverse Rundungen verwendet.

Um eine sauber gepunktete Linie zu erhalten, können wir folgendermassen vorgehen: Erstens setzen wir den Linienendstil auf „Round Cap“ oder „Square Cap“, wobei ersteres runde, letzteres viereckige „Punkte“ ergibt. Zweitens setzen wir ein Strichmuster mit einer Strichlänge von 0. Die Abstandslänge muss natürlich auf einen grösseren Wert gesetzt werden.

Beispiel:

1 w 1 J [0 3] 0 d

Linienecken

Treffen bei einer Figur zwei Linien nicht gerade aufeinander, so müssen die äusseren Ränder der Linien zueinandergeführt werden. Hierfür gibt es drei Möglichkeiten:

Spitzzulaufend: Bei dieser Variante werden die äusseren Ränder einfach weitergezeichnet, bis sie aufeinendertreffen.

Abgerundet: Bei dieser Variante wird ein Kreisbogen zwischen den Randenden gezeichnet.

Abgeschrägt: Bei dieser Variante werden die Randenden mit einer geraden Linie verbunden.

Auch hier eine kleine Illustration:

Normalerweise werden die Ecken spitzzulaufend gezeichnet. Dies kann aber bei spitzen Winkeln dazu führen, dass die Linie viel zu lange weitergezogen wird. Daher wird ab einem bestimmten Grad automatisch auf die abgeschrägte Variante zurückgegriffen.

Die Auswahl des Stils für die Ecken erfolgt über die j Anweisung. Ähnlich wie bei den Linienenden erwartet sie einen Parameter mit einer Zahl 0, 1 oder 2.

Wert Stil
0spitzzulaufend oder abgeschrägt
1abgerundet
2abgeschrägt

Es ist zudem möglich, einzustellen, wie dick beim spitzzulaufenden Stil die Ecke werden darf, ehe auf den abgeschrägten Stil zurückgegriffen wird. Dies nennt man auch „Miter Limit“. Als Dicke der Ecke gilt dabei die Distanz zwischen dem Punkt, wo die inneren Linienränder aufeinandertreffen zu dem Punkt, an dem die äusseren Linienränder aufeinandertreffen würden.

Angegeben wird der Wert im Verhältnis zur Strichdicke. Ein typischer Wert ist 4, womit die Ecke maximal 4 mal so dick sein darf, wie die Liniendicke. Diese Limite würde bei einem Winkel von weniger als 29° überschritten. Wird das Miter Limit nicht verändert, so gilt ein Wert von 10 als de facto Standard.

Die Anweisung zur Setzung des Miter Limits ist M. Sie erwartet einen Parameter mit dem Limit als Zahl.

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
T N P O J
 
grafik/linien.txt · Zuletzt geändert: 2012/10/12 15:33 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki