Typen von Koordinatensystemen

Windows GDI+ verwendet drei Koordinatenräume: Welt, Seite und Gerät. Wenn Sie den Aufruf myGraphics.DrawLine(&myPen, 0, 0, 160, 80)vornehmen, befinden sich die Punkte, die Sie an die Graphics::D rawLine-Methode übergeben – (0, 0) und (160, 80) – im Koordinatenraum der Welt. Bevor GDI+ die Linie auf dem Bildschirm zeichnen kann, durchlaufen die Koordinaten eine Abfolge von Transformationen. Eine Transformation konvertiert Weltkoordinaten in Seitenkoordinaten, und eine andere Transformation konvertiert Seitenkoordinaten in Gerätekoordinaten.

Angenommen, Sie möchten mit einem Koordinatensystem arbeiten, das seinen Ursprung im Körper des Clientbereichs anstatt an der oberen linken Ecke hat. Nehmen wir beispielsweise an, dass Sie den Ursprung 100 Pixel vom linken Rand des Clientbereichs und 50 Pixel vom oberen Rand des Clientbereichs entfernt platzieren möchten. Die folgende Abbildung zeigt ein solches Koordinatensystem.

Screenshot eines Fensters mit beschrifteten Koordinatenachsen

Wenn Sie den Aufruf myGraphics.DrawLine(&myPen, 0, 0, 160, 80) vornehmen, erhalten Sie die Linie, die in der folgenden Abbildung gezeigt wird.

Screenshot des vorherigen Fensters, jedoch mit einer blauen Linie, die sich diagonal vom Ursprung erstreckt

Die Koordinaten der Endpunkte Ihrer Linie in den drei Koordinatenbereichen lauten wie folgt:

LeerZchn Endpunktkoordinaten
World (0, 0) bis (160, 80)
Seite (100, 50) bis (260, 130)
Sicherungsmedium (100, 50) bis (260, 130)

 

Beachten Sie, dass der Seitenkoordinatenbereich seinen Ursprung in der oberen linken Ecke des Clientbereichs hat, was immer der Fall sein wird. Beachten Sie außerdem, dass die Maßeinheit Pixel ist. Die Gerätekoordinaten sind mit den Seitenkoordinaten identisch. Wenn Sie die Maßeinheit auf etwas anderes als Pixel festlegen (z. B. Zoll), weichen die Gerätekoordinaten von den Seitenkoordinaten ab.

Die Transformation, die Weltkoordinaten Seitenkoordinaten zuordnet, wird als Welttransformation bezeichnet und von einem Graphics-Objekt verwaltet. Im vorherigen Beispiel ist die Welttransformation eine Übersetzung von 100 Einheiten in x-Richtung und 50 Einheiten in y-Richtung. Im folgenden Beispiel wird die Welttransformation eines Graphics-Objekts festgelegt und anschließend das Graphics-Objekt verwendet, um die in der vorherigen Abbildung dargestellte Linie zu zeichnen.

myGraphics.TranslateTransform(100.0f, 50.0f);

myGraphics.DrawLine(&myPen, 0, 0, 160, 80);

Die Transformation, die Seitenkoordinaten Gerätekoordinaten zuordnet, wird als Seitentransformation bezeichnet. Die Graphics-Klasse stellt vier Methoden zum Bearbeiten und Untersuchen der Seitentransformation bereit: Graphics::SetPageUnit, Graphics::GetPageUnit, Graphics::SetPageScale und Graphics::GetPageScale. Die Graphics-Klasse stellt auch zwei Methoden bereit, Graphics::GetDpiX und Graphics::GetDpiY, um die horizontalen und vertikalen Punkte pro Zoll des Anzeigegeräts zu untersuchen.

Sie können die Graphics::SetPageUnit-Methode der Graphics-Klasse verwenden, um eine Maßeinheit anzugeben. Das folgende Beispiel zeichnet eine Linie von (0, 0) bis (2, 1), wobei der Punkt (2, 1) 2 Zoll rechts und 1 Zoll nach unten vom Punkt (0, 0) ist.

myGraphics.SetPageUnit(UnitInch);

myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

Hinweis

Wenn Sie beim Erstellen des Stifts keine Stiftbreite angeben, wird im vorherigen Beispiel eine Linie mit einer Breite von einem Zoll gezeichnet. Sie können die Stiftbreite im zweiten Argument für den Pen-Konstruktor angeben:

Pen myPen(Color(255, 0, 0, 0), 1/myGraphics.GetDpiX()).

 

Wenn wir davon ausgehen, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung aufweist, weisen die Endpunkte der Linie im vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenbereichen auf:

LeerZchn Endpunktkoordinaten
World (0, 0) bis (2, 1)
Seite (0, 0) bis (2, 1)
Sicherungsmedium (0, 0, bis (192, 96)

 

Sie können die globalen und Seitentransformationen kombinieren, um eine Vielzahl von Effekten zu erzielen. Angenommen, Sie möchten beispielsweise Zoll als Maßeinheit verwenden, und der Ursprung Ihres Koordinatensystems soll sich 2 Zoll vom linken Rand des Clientbereichs und 1/2 Zoll vom oberen Rand des Clientbereichs entfernt befinden. Im folgenden Beispiel werden die Welt- und Seitentransformationen eines Graphics-Objekts festgelegt und dann eine Linie von (0, 0) auf (2, 1) gezogen. 3000 1 0000 0000 0000-1-1-Objekte erstellt.

myGraphics.TranslateTransform(2.0f, 0.5f);
myGraphics.SetPageUnit(UnitInch);
myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

Die folgende Abbildung zeigt die Linie und das Koordinatensystem.

Screenshot des vorherigen Fensters, aber breiter, wobei die Achsen links positioniert und anders beschriftet sind

Wenn wir davon ausgehen, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung aufweist, weisen die Endpunkte der Linie im vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenbereichen auf:

LeerZchn Endpunktkoordinaten
World (0, 0) bis (2, 1)
Seite (2, 0.5) bis (4, 1.5)
Sicherungsmedium (192, 48) bis (384, 144)