Dziś będzie odcinek o tym jak możemy “uprościć” tworzenie klas typu Geometry i na koniec trochę o pisakach :). W WPFie dostępny jest tryb, dzięki któremu możemy tworzyć obiekty za pomocą ich reprezentacji w łańcuch znaków. Jak to robić?

<GeometryDrawing Brush=”Pink” Geometry=”M0,0 L 0,100 L100,100 A 100,100 0 0 10,10″>

Spróbujmy omówić poszczególne znaczki.

  • F n – definiuje sposób wypełnienie figury. – tryb EvenOdd, 1 – NonZero. Jeśli użyte musi być na początku.

  • M x,y – rozpoczyna figurę ustawiając jej punkt początkowy (StartPoint na x,y. M jak move.

  • Z – kończy figurę i ustawia właściwość IsClosed na true. Jeśli chcesz zakończyć figurę, bez jej zamykania po prostu wprowadź kolejną definicję figury lub zakończ definicję całości bez znaku Z.

  • L x,y – rysuję linie do punktu (x,y)

  • A rx,ry d f1 f2 x,y – tworzy wycinek okręgu do punktu (x,y) w oparciu o elipsę o promieniach rx,ry obróconą o d stopni. Za pomocą flag f1,f2 (wartości 0 lub 1) kontrolują odpowiednio: IsLargeArc oraz Clocwise

  • C x1,x1 x2,y2 x,y – Tworzy krzywą Béziera do punktu (x,y) używając punktów kontrolnych (x1,y1) oraz (x2,y2)

  • Q x1,y1 x,y – tworzy Quadratic Bézier curves do punktu (x,y) z punktem kontrolnym x1,y1

  • H x – skrót umożliwiający narysowanie linii poziomej, gdzie x określa pozycję końcową.

  • V y – podobnie jak powyżej z tym razem linia pionowa

  • S x2,y2 x,y – tworzy krzywą Béziera do punktu x,y używając punktu kontrolnego x2,y2 a drugi punkt kontrolny jest wyliczany automatycznie, aby krzywa była gładka.

Litery można wpisywać duże i małe. Różnią się wtedy znaczeniem. W przypadku małych liter punkty są traktowane jako relatywne do ostatnio wprowadzonego punktu, a nie jako pozycje absolutne. Zobaczmy przykład:

<GeometryDrawing Brush=”Pink” Geometry=”M0 0S 50,50 100,0 L10,30″>

Gdy teraz zamienimy tylko wielkość L na l otrzymamy:

Widać różnicę.

Jeszcze uwaga na koniec tego tematu. Spacje i przecinki są opcjonalne. Wymagane jest jedynie rozdzielenie parametrów.

Pisaki 🙂

Za pomocą pisaków (Pen) możemy kontrolować jak wygląda obwoluta naszego kształtu. Są one relatywnie proste w użyciu i posiadają niewiele właściwości umożliwiających konfigurowanie. Główną właściwością jest grubość czyli Thickness. Prócz tego dostępne jest jeszcze kilka innych takich jak:

  • StartLineCap, EndLineCap – określają początek i koniec linii. Dostępne wartości to: Flat, Square, Round oraz Traingle.

  • LineJoin – określa w jaki sposób łączone są stykające się linie. Dostępne wartości to: Miter, Round, Bevel. Tryb Miter możemy dodatkowo kontrolować za pomocą właściwości MiterLimit.

  • DashStyle – zmienia wygląd samej linii. Z linii ciągłej możemy utworzyć przerywaną. Dostępne wartości to Solid, Dash, Dot, DashDot oraz DashDotDot. Używa się tego w następujący sposób:

    <Pen Thickness=”2″ Brush=”Black” DashStyle=”{x:Static DashStyles.DashDot}” DashCap=”Round” />

    DashCap ustawia sposób zakończenia odcinków w linii. Zobaczmy na obrazek:

Następnym razem podejmiemy temat Visuals.