Ich möchte mit TikZ als Bestandteil einer Grafik einen Kreisring zeichnen, also zwei konzentrische Kreise (gemeinsamer Mittelpunkt) und die eingeschlossene Fläche gefärbt. Was so kompliziert klingt, veranschaulicht besser ein Bildentwurf:
Wie stelle ich das am besten an? Einen Pfad festlegen und füllen, oder gefüllte Kreise zeichnen, wobei der kleinere als zweiter gezeichnet wird und so den größeren überschreibt? Die Kreislinien selbst als Begrenzung sind nicht wichtig, die hatte ich im Mal-Programm gezeichnet, um den zu füllenden Bereich zu begrenzen, nur um die farbige Scheibe geht es eigentlich.
Was ist aber, wenn doch eine Linie am Rand der Fläche gezeichnet werden soll? Es folgt eine Lösung für beliebige Pfade, die geschnitten werden sollen. (In diesem Fall sind es nur zwei Kreise, die einen gemeinsamen Mittelpunkt haben.
Das Resultat von Thorsten’sBeispiel kann relativ einfach erstellt werden:
Die even odd rule sorgt dafür, dass eine zweifache (und damit gerade) Überlagerung von Flächen bewirkt, dass sie eben nicht gefüllt wird. Die Option kann selbstverständlich auch nur am Pfad angegeben sein.
Die Standard-Regel für Füllungen ist die nonzero rule, die die „Richtung“ von den Pfaden beachtet. Im obigen Fall (circles werden immer im mathematischen Sinne positiv, also gegen den Uhrzeigersinn, gezeichnet) würde das nur eine gemeinsame Fläche ergeben. Zeichnet man den Kreis allerdings mit dem Uhrzeigersinn (also negativ), kann man auch die nonzero rule verwenden:
Zugegebenermaßen, in diesem einfachen Fall nicht sehr komfortabel, kann aber in anderen Fällen sicherlich hilfreich sein.
(Selbst das TikZ-Manual bezeichnet das Vorgehen der nonzero rule als „kompliziert“: „Sounds complicated? It is.“)
Beide TikZ-Pictures ergeben das linke Bild:
Fügt man dem Pfad noch ein nicht-nonedraw hinzu kann man auch die Ränder der Fläche zeichnen lassen. Mit dem Code
Möchte man die Begrenzungslinien allerdings in unterschiedlicher Farbe oder Art zeichnen, muss dies in einem separatem Pfad erfolgen. Damit man denselben Pfad nicht zweimal angeben muss (und somit Fehler und Aufwand bei Korrekturen verhindert), empfehle ich den Pfad mittels eines insert path-Styles zu speichern:
Man beachte, dass der saveuse path den benannten Style (hier aussenRing und innenRing) global definiert und somit womöglicherweise gleichnamige, gespeicherten Pfade aus einem höheren Scope überschreibt.