Typy systemów współrzędnych

GDI+ używa trzech współrzędnych: świata, strony i urządzenia. Współrzędne świata to współrzędne używane do modelowania określonego świata graficznego i są współrzędnymi przekazywanymi do metod w programie .NET Framework. Współrzędne strony odnoszą się do układu współrzędnych używanych przez powierzchnię rysunku, na przykład formularza lub kontrolki. Współrzędne urządzenia to współrzędne używane przez urządzenie fizyczne, na przykład ekran lub arkusz papieru. Podczas wykonywania wywołania myGraphics.DrawLine(myPen, 0, 0, 160, 80)punkty przekazywane do DrawLine metody —(0, 0) i (160, 80)— znajdują się w przestrzeni współrzędnej świata. Zanim funkcja GDI+ będzie mogła narysować linię na ekranie, współrzędne przechodzą przez sekwencję przekształceń. Jedna transformacja, nazywana transformacją świata, konwertuje współrzędne świata na współrzędne strony, a druga transformacja, nazywana transformacją strony, konwertuje współrzędne strony na współrzędne urządzenia.

Przekształcenia i systemy współrzędnych

Załóżmy, że chcesz pracować z układem współrzędnych, który ma swoje pochodzenie w treści obszaru klienta, a nie w lewym górnym rogu. Załóżmy na przykład, że źródło ma mieć wartość 100 pikseli od lewej krawędzi obszaru klienta i 50 pikseli w górnej części obszaru klienta. Na poniższej ilustracji przedstawiono taki układ współrzędnych.

Illustration of a coordinate system.

Podczas wykonywania wywołania myGraphics.DrawLine(myPen, 0, 0, 160, 80)zostanie wyświetlony wiersz pokazany na poniższej ilustracji.

Illustration of a line in the coordinate system.

Współrzędne punktów końcowych linii w trzech odstępach współrzędnych są następujące:

Współrzędna Współrzędne punktu końcowego
Świat (0, 0) do (160, 80)
Strona (100, 50) do (260, 130)
Urządzenie (100, 50) do (260, 130)

Zwróć uwagę, że przestrzeń współrzędna strony ma swoje źródło w lewym górnym rogu obszaru klienta; zawsze tak będzie. Należy również pamiętać, że ponieważ jednostka miary jest pikselem, współrzędne urządzenia są takie same jak współrzędne strony. Jeśli ustawisz jednostkę miary na inną niż piksele (na przykład cala), współrzędne urządzenia będą się różnić od współrzędnych strony.

Transformacja świata, która mapuje współrzędne świata na współrzędne strony, jest przechowywana we Transform właściwości Graphics klasy . W poprzednim przykładzie transformacja świata to tłumaczenie 100 jednostek w kierunku x i 50 jednostek w kierunku y. W poniższym przykładzie ustawiono światową transformację Graphics obiektu, a następnie użyto tego Graphics obiektu do narysowania linii pokazanej na poprzedniej ilustracji:

myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)

Strona przekształcenia strony mapuje współrzędne strony do współrzędnych urządzenia. Klasa Graphics udostępnia PageUnit właściwości i PageScale do manipulowania transformacją strony. Klasa Graphics udostępnia również dwie właściwości tylko do odczytu i DpiXDpiY, do badania poziomych i pionowych kropek na cal urządzenia wyświetlania.

Możesz użyć PageUnit właściwości Graphics klasy, aby określić jednostkę miary inną niż piksel.

Uwaga

Nie można ustawić PageUnit właściwości na World, ponieważ nie jest to jednostka fizyczna i spowoduje wyjątek.

Poniższy przykład rysuje linię z (0, 0) do (2, 1), gdzie punkt (2, 1) wynosi 2 cale z prawej i 1 cala w dół od punktu (0, 0):

myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

Uwaga

Jeśli nie określisz szerokości pióra podczas konstruowania pióra, powyższy przykład narysuje linię o szerokości jednego cala. Szerokość pióra można określić w drugim argumencie konstruktora Pen :

Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)

Jeśli zakładamy, że urządzenie wyświetlające ma 96 kropek na cal w kierunku poziomym i 96 kropek na cal w kierunku pionowym, punkty końcowe linii w poprzednim przykładzie mają następujące współrzędne w trzech odstępach współrzędnych:

Współrzędna Współrzędne punktu końcowego
Świat (0, 0) do (2, 1)
Strona (0, 0) do (2, 1)
Urządzenie (0, 0) do (192, 96)

Należy pamiętać, że ponieważ pochodzenie przestrzeni współrzędnej świata znajduje się w lewym górnym rogu obszaru klienta, współrzędne strony są takie same jak współrzędne świata.

Możesz połączyć przekształcenia świata i stron w celu osiągnięcia różnych efektów. Załóżmy na przykład, że chcesz użyć cala jako jednostki miary i chcesz, aby początek układu współrzędnych był 2 cali od lewej krawędzi obszaru klienta i 1/2 cala od góry obszaru klienta. Poniższy przykład ustawia przekształcenia Graphics świata i strony obiektu, a następnie rysuje wiersz z (0, 0) do (2, 1):

myGraphics.TranslateTransform(2, 0.5f);
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.TranslateTransform(2, 0.5F)
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

Poniższa ilustracja przedstawia układ linii i współrzędnych.

Illustration of a line and coordinate system.

Jeśli zakładamy, że urządzenie wyświetlające ma 96 kropek na cal w kierunku poziomym i 96 kropek na cal w kierunku pionowym, punkty końcowe linii w poprzednim przykładzie mają następujące współrzędne w trzech odstępach współrzędnych:

Współrzędna Współrzędne punktu końcowego
Świat (0, 0) do (2, 1)
Strona (2, 0,5) do (4, 1,5)
Urządzenie (192, 48) do (384, 144)

Zobacz też