Geometrische Pfade streichen - nicht so einfach, wie es scheint
In PDF werden geometrische Pfade einfach als Linien und kubische Bézier-Kurven beschrieben. Das Füllen eines Pfades ist einfach, wenn man die Regel der Geradzahligkeit und Nicht-Nullstellung verstanden hat. Das Streichen eines Pfades ist jedoch nicht so einfach, wie es auf den ersten Blick scheint. Werfen wir einen Blick auf das Streichen und einige Spezialfälle.
Einen Pfad zu streichen bedeutet eigentlich nichts anderes, als einen neuen Pfad zu erstellen und ihn zu füllen. Dazu muss die Grafik-Engine die im Grafikstatus gespeicherten Linienattribute wie Linienbreite, Gehrungsgrenze, Strichanordnung, Strichphase, Kappen- und Verbindungsstile usw. interpretieren.
Beginnen wir mit einigen einfachen Fällen: Eine einzelne Linie wird mit Hilfe eines moveto, eines lineto und eines stroke-Operators gezeichnet. Offensichtlich wird dieser Pfad gestrichen, indem ein neuer Pfad erstellt wird, der aus zwei Kappen am Start- und Endpunkt besteht, die durch zwei Linien verbunden sind. Die Form der Kappen wird durch den Kappenstil und der vertikale Abstand der Linien durch die Linienbreite bestimmt. Zwei Liniensegmente werden in ähnlicher Weise gestrichen, mit Ausnahme des Punktes in der Mitte, der eine Verbindung im angegebenen Stil bildet.
Wenn ein Pfad aus mehr als zwei Liniensegmenten besteht, können sie frühere Liniensegmente kreuzen. Dies bedeutet, dass der neu erstellte Pfad mit der Nicht-Nullpunkt-Regel gefüllt werden muss, um die Überschneidungen korrekt zu zeichnen. Außerdem kann das letzte Liniensegment dort enden, wo das erste beginnt. Dies ist ein Unterschied zum Schließen eines Pfades mit dem entsprechenden Operator. Warum? Wenn ein gestrichener Pfad geschlossen wird, wird anstelle der Anfangs- und Endkappen eine Linienverbindung verwendet. Wenn ein Pfad nicht geschlossen ist, werden die Hütchen auch dann gezeichnet, wenn Start- und Endpunkt identisch sind.
Was ist nun, wenn ein Liniensegment die Länge Null hat? Die Form der Hütchen und Verbindungen sowie der Abstand zwischen den Verbindungslinien hängen von der Richtung des Linienabschnitts ab. Wenn der Linienabschnitt die Länge Null hat, kann die Richtung nicht bestimmt werden. Daher ist es im Allgemeinen sicher, solche Liniensegmente zu entfernen, außer in einem Fall. Ein Pfad, der ein einziges Liniensegment der Länge Null enthält, ist zulässig. Aber wie wird er gezeichnet? Wenn runde Kappen verwendet werden, wird ein Kreis mit einem Durchmesser in der Breite der Linie gezeichnet. Werden stumpfe Kappen verwendet, wird ein Quadrat gezeichnet. Die Richtung der Kanten ist jedoch ausführungsspezifisch. Wenn keine Kappen verwendet werden, muss ein einzelnes Pixel gezeichnet werden.
Was ist mit Bézier-Kurven? Sie werden in eine Reihe von zusammenhängenden Liniensegmenten umgewandelt, bevor der Pfad gestrichen wird, so dass sie keine besondere Behandlung benötigen.