next up previous contents
Next: 7.5.3 Achsen Up: 7.5 Treiber für das Previous: 7.5.1 Bildausschnitt

7.5.2 Abschneiden

Das Darstellungsmodul gibt die graphischen Daten vollständig an den Treiber weiter, auch wenn nur ein Ausschnitt derselben ausgewählt wurde. Ein Abschneiden am Rand des gewünschten Bildes wird dem jeweiligen Gerätetreiber überlassen.

Auf der anderen Seite des SVG-Treibers übernimmt die SVG-Schnittstelle die vollständigen Daten. Bei Ausgabe über das SVG-Widget wird zwar explizit abgeschnitten, aber am Rand des Fensters und nicht am angegebenen Bildausschnitt, und bei Konvertierung zu Postscript überhaupt nicht. Um zu vermeiden, daß ein derartig erstelltes Postscript-Bild seinen Rand überschreitet und im Extremfall die ganze Seite statt des vorgegebenen Abschnittes ausfüllt, muß der SVG-Treiber entsprechende Vorsorge treffen. Im Gegensatz zum äußerst zeitkritischen Abschneiden des XWindow-Treibers (s. Abschnitt 7.4.1) kann hier eine aufwendige und präzise arbeitende Implementierung vorgenommen werden.

Das Abschneiden der Punkte ist trivial, indem jene, die nicht innerhalb des Ausschnittes liegen, einfach ignoriert werden.

Linien werden mit dem Algorithmus von Cohen und Sutherland [45] bearbeitet. Dabei kann jeweils die Verbindung zwischen zwei Punkten unabhängig von den anderen behandelt werden. Die jeweilige Linie wird, falls sie nicht auf Grund einfacher Tests eindeutig als innerhalb oder außerhalb klassifiziert werden kann, hintereinander an der linken, rechten, oberen und unteren Begrenzungsgeraden des Bildes abgeschnitten, bis sie ,,verschwindet`` oder der erlaubte Teil übrigbleibt.

Auf Flächen, dem kompliziertesten Fall, wird mit dem Algorithmus von Sutherland und Hodgman gearbeitet (s. [45]). Die das Polygon bildenden Punkte werden in eine einfach verkettete Liste strukturiert und anschließend an den vier begrenzenden Geraden abgeschnitten. Die dynamische Datenstruktur ist nötig, weil oft Punkte entfernt werden (z.B. wenn mehrere aufeinanderfolgende außerhalb liegen), besonders aber manchmal zusätzliche eingefügt werden (wenn ein einzelner Punkt außerhalb liegt, wird er durch zwei Randpunkte ersetzt). Die resultierende Fläche hat typisch am Bildrand Bereiche mit Dicke 0.



Martin Knaipp
Wed Jun 12 15:41:33 MET DST 1996