Das Zeichnen von geometrischen Pfaden - 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 unkompliziert, wenn man die Regel für gerade und ungerade sowie die Regel mit der Nullwicklung verstanden hat. Das Zeichnen eines Pfades ist jedoch nicht so einfach, wie es auf den ersten Blick scheint. Lass uns einen Blick auf das Zeichnen und einige Sonderfälle werfen.
Wirklich, einen Pfad zu zeichnen bedeutet nichts anderes, als einen neuen Pfad zu erstellen und ihn zu füllen. Um dies zu tun, muss die Grafikanzeige die Linienattribute wie die Linienstärke, das Miterlimit, das Strichmuster, die Strichphase, die Kappen- und Verbindungsstile usw. interpretieren, die im Grafikstatus gespeichert sind.
Lass uns mit einigen einfachen Fällen beginnen: Eine einzelne Linie wird mit einem moveto, einem lineto und einem stroke-Befehl gezeichnet. Offensichtlich wird dieser Pfad erstellt, indem ein neuer Pfad mit zwei Kappen an den Anfangs- und Endpunkten erstellt wird, die durch zwei Linien verbunden sind. Die Form der Kappen wird durch den Kappenstil bestimmt, und der vertikale Abstand der Linien wird durch die Linienstärke bestimmt. Zwei Liniensegmente werden auf ähnliche Weise gezeichnet, mit Ausnahme des Punkts in der Mitte, der eine Verbindungsstelle im gegebenen Stil bildet.
Wenn ein Pfad aus mehr als zwei Liniensegmenten besteht, können diese frühere Liniensegmente überqueren. Dies bedeutet, dass der neu erstellte Pfad unter Verwendung der Regel für das nicht-null Winding gefüllt werden muss, um die Überlappung korrekt zu zeichnen. Darüber hinaus kann das letzte Liniensegment dort enden, wo das erste beginnt. Dies ist anders als einen Pfad mit dem entsprechenden Befehl zu schließen. Warum? Weil bei einem geschlossenen, gezeichneten Pfad eine Linienverbindung anstelle der Anfangs- und Endkappen verwendet wird. Wenn ein Pfad nicht geschlossen ist, werden die Kappen gezeichnet, selbst wenn der Start- und Endpunkt gleich sind.
Was passiert, wenn ein Liniensegment eine Länge von null hat? Die Form der Kappen und Verbindungen sowie der Abstand zwischen den verbindenden Linien hängen von der Richtung des Liniensegments ab. Wenn das Liniensegment eine Länge von null hat, kann die Richtung nicht bestimmt werden. Daher ist es im Allgemeinen sicher, solche Liniensegmente zu entfernen, mit Ausnahme eines Falles. Ein Pfad, der ein einzelnes, null langes Liniensegment enthält, ist erlaubt. Aber wie wird es gezeichnet? Wenn runde Kappen verwendet werden, wird ein Kreis mit einem Durchmesser der Linienstärke gezeichnet. Wenn abschneidende Kappen verwendet werden, wird ein Quadrat gezeichnet. Die Richtung der Kanten hingegen ist implementationsspezifisch. Wenn keine Kappen verwendet werden, muss ein einzelner Pixel gezeichnet werden.
Was ist mit Bézier-Kurven? Sie werden in eine Anzahl von verbundenen Liniensegmenten umgewandelt, bevor der Pfad gezeichnet wird, sodass sie keine besondere Behandlung benötigen.