Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 5. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Weitere .NET-Datentypen
7 Weitere Möglichkeiten von C#
8 Auflistungsklassen (Collections)
9 Fehlerbehandlung und Debugging
10 LINQ to Objects
11 Multithreading und die Task Parallel Library (TPL)
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 Einige wichtige .NET-Klassen
15 Projektmanagement und Visual Studio 2010
16 XML
17 WPF – Die Grundlagen
18 WPF-Containerelemente
19 WPF-Steuerelemente
20 Konzepte der WPF
21 Datenbindung
22 2D-Grafik
23 ADO.NET – verbindungsorientierte Objekte
24 ADO.NET – Das Command-Objekt
25 ADO.NET – Der SqlDataAdapter
26 ADO.NET – Daten im lokalen Speicher
27 ADO.NET – Aktualisieren der Datenbank
28 Stark typisierte DataSets
29 LINQ to SQL
30 Weitergabe von Anwendungen
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual C# 2010 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2010

Visual C# 2010
geb., mit DVD
1295 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1552-7
Pfeil 22 2D-Grafik
Pfeil 22.1 Shapes
Pfeil 22.1.1 Allgemeine Beschreibung
Pfeil 22.1.2 Line-Elemente
Pfeil 22.1.3 Ellipse- und Rectangle-Elemente
Pfeil 22.1.4 Polygon- und Polyline-Elemente
Pfeil 22.1.5 Darstellung der Linien
Pfeil 22.2 Path-Elemente
Pfeil 22.2.1 GeometryGroup
Pfeil 22.2.2 CombinedGeometry
Pfeil 22.2.3 PathGeometry
Pfeil 22.3 Brush-Objekte
Pfeil 22.3.1 SolidColorBrush
Pfeil 22.3.2 LinearGradientBrush
Pfeil 22.3.3 RadialGradientBrush
Pfeil 22.3.4 TileBrush
Pfeil 22.3.5 ImageBrush
Pfeil 22.3.6 VisualBrush
Pfeil 22.3.7 DrawingBrush


Galileo Computing - Zum Seitenanfang

22.2 Path-Elemente Zur nächsten ÜberschriftZur vorigen Überschrift

In den vorhergehenden Abschnitten haben wir uns einige von Shape abgeleitete Klassen angesehen. Eine Klasse haben wir noch nicht betrachtet: Path. Von allen Shapes ist Path sicherlich das mächtigste und vielseitigste mit den meisten Möglichkeiten, denn mit Path lassen sich auch komplexeste Figuren darstellen.

Ein Path beschreibt eine geometrische Figur natürlich ebenfalls mit Linien, Kreisen, usw. Sollten Sie jetzt aber der Meinung sein, hier die bereits behandelten Elemente wie Line der Ellipse verwenden zu können, liegen Sie falsch. Stattdessen verwendet Path andere Elemente, die von der Klasse Geometry abgeleitet sind und in ihrem Bezeichner das Suffix Geometry haben. Dazu gehören LineGeometry, EllipseGeometry und RectangleGeometry. Ein wesentliches Unterscheidungsmerkmal zwischen Line und LineGeometry ist beispielsweise, dass LineGeometry nicht auf Ereignisse reagiert – ganz im Gegensatz zu Line. Das gilt auch für die anderen Geometry-Objekte.

Ein anderes Merkmal ist, dass sich Geometry-Elemente nicht selbst zeichnen können – sie sind beispielsweise auf Path angewiesen. Die Eigenschaften Fill oder Stroke werden Sie daher vergeblich in Geometry-Elementen suchen.

Die geometrische Figur, die durch Path beschrieben wird, gibt man der Path-Eigenschaft Data an, die Geometry-Elemente akzeptiert. Dabei kann es sich im einfachsten Fall um genau ein Element handeln, aber auch um mehrere.

Genug der Worte, sehen wir uns nun die Festlegung einer Ellipse mit Path an:


<Path Stroke="Black">
  <Path.Data>
    <EllipseGeometry Center="100,100" RadiusX="100" RadiusY="60" />
  </Path.Data>
</Path>

Es fällt vermutlich sofort auf, dass die Größe der Ellipse nun nicht mehr durch Height und Width bestimmt wird, sondern mit der Eigenschaft Center. Die Größe der Ellipse wird durch RadiusX und RadiusY festgelegt. RadiusX beschreibt dabei den Radius in X-Richtung, RadiusY den Radius in Y-Richtung.

Ein ähnlicher Unterschied findet sich auch zwischen den Klassen Rectangle und RectangleGeometry. Hier wird die Eigenschaft Rect dazu benutzt, die relative Position und die Abmessungen festzulegen.


<Path Stroke="Black">
  <Path.Data>
    <RectangleGeometry Rect="40,10,100,150" RadiusX="20" RadiusY="50" />
  </Path.Data>
</Path>

Die beiden ersten Zahlen geben die Position des Bezugspunktes an (das ist die linke obere Ecke), die beiden letzten die Breite und Höhe. Mit RadiusX und RadiusY können Sie die Ecken sogar mit den angegebenen Radien runden.


Galileo Computing - Zum Seitenanfang

22.2.1 GeometryGroup Zur nächsten ÜberschriftZur vorigen Überschrift

So wie in den beiden Listings zuvor gezeigt, können Sie nur eine geometrische Figur ausgeben. Natürlich ließen sich mehrere Path-Elemente angeben, um zumindest optisch eine komplexe Figur zu erstellen. Aber es gibt auch einen anderen Weg, bei dem Hilfsklassen zum Einsatz kommen. Unter Zuhilfenahme von Hilfsklassen lassen sich mehrere geometrische Figuren zu einer Gesamtfigur zusammenfassen

Zu diesen Hilfsklassen gehört GeometryGroup, die im folgenden Listing ein EllipseGeometry- und ein RectangleGeometry-Element kombiniert. Die Ausgabe sehen Sie in Abbildung 22.4.


<Path Fill="Blue">
  <Path.Data>
    <GeometryGroup FillRule="Nonzero">
      <EllipseGeometry Center="200,185" RadiusX="30" RadiusY="20" />
      <RectangleGeometry Rect="110,110,100,150" RadiusX="20" RadiusY="50" />
    </GeometryGroup>
  </Path.Data>
</Path>

Mit Fill wird die Füllfarbe Blau festgelegt, die für den gesamten umschlossenen Bereich der Figur steht. In die Data-Eigenschaft ist das GeometryGroup-Element eingebettet, das seinerseits die Geometry-Elemente des Rechtecks und der Ellipse enthält.

Abbildung 22.4 Die durch »GeometryGroup« beschriebene geometrische Figur

Beachten Sie hierbei auch die Eigenschaft FillRule, mit der beschrieben wird, wie die sich überschneidenden Bereiche der Objekte kombiniert werden. FillRule kann durch EvenOdd und Nonzero beschrieben werden. In Abbildung 22.5 ist die Einstellung EvenOdd.

Abbildung 22.5 Auswirkung der Einstellung »EvenOdd« der Eigenschaft »FillRule«


Galileo Computing - Zum Seitenanfang

22.2.2 CombinedGeometry Zur nächsten ÜberschriftZur vorigen Überschrift

Mit GeometryGroup lassen sich beliebig viele Geometry-Elemente kombinieren, mit CombinedGeometry nur zwei. CombinedGeometry weist mit GeometryCombineMode eine besondere Eigenschaft auf, mit der die Kombination der beiden Elemente beschrieben wird. Die Eigenschaft ist vom Typ der Enumeration GeometryCombineMode, die die Werte Exclude, Intersect, Union und Xor enthält. Die Auswirkungen sehen Sie in Abbildung 22.6.

Abbildung 22.6 Auswirkungen der Eigenschaft »GeometryCombineMode«

Abbildung 22.6 liegt der folgende XAML-Code zugrunde:


<Canvas>
  <Path Fill="Blue">
    <Path.Data>
      <CombinedGeometry GeometryCombineMode="Xor">
        <CombinedGeometry.Geometry1>
          <EllipseGeometry Center="100,100" RadiusX="50" RadiusY="50" />
        </CombinedGeometry.Geometry1>
        <CombinedGeometry.Geometry2>
          <EllipseGeometry Center="150,100" RadiusX="50" RadiusY="50" />
        </CombinedGeometry.Geometry2>
      </CombinedGeometry>
    </Path.Data>
  </Path>
</Canvas>

Die beiden Geometry-Objekte müssen mit den beiden Eigenschaften Geometry1 und Geometry2 zugeordnet werden. Anders als bei einer GeometryGroup wird aus der durch die blaue Farbe gekennzeichnete Fläche eine neue geometrische Figur geschaffen.


Galileo Computing - Zum Seitenanfang

22.2.3 PathGeometry topZur vorigen Überschrift

GeometryGroup und CombinedGeometry sind in ihren Möglichkeiten noch beschränkt. Zur Darstellung auch komplexester geometrischer Figuren ist das Element PathGeometry bestens geeignet. Die resultierende Gesamtfigur wird dabei in mehrere einzelne Figuren zerlegt, deren Linien schrittweise zusammengefügt werden. Diese Vorgehensweise erfordert viel Detailarbeit, woraus am Ende auch ein unter Umständen sehr komplexer XAML-Code resultiert.

Das folgende Codebeispiel demonstriert den Einsatz des PathGeometry-Elements. Die Ausgabe ist kaum der Rede wert, es handelt sich um ein einfaches Quadrat.


<Canvas>
  <Path Stroke="#FF000000">
    <Path.Data>
      <PathGeometry>
        <PathGeometry.Figures>
          <PathFigure StartPoint="0,0" IsClosed="True">
            <LineSegment Point="100,0" />
            <LineSegment Point="100,100" />
            <LineSegment Point="0,100" />
          </PathFigure>
        </PathGeometry.Figures>                          
      </PathGeometry>
    </Path.Data>        
  </Path>         
</Canvas>

Innerhalb des PathGeometry-Elements ist in der Eigenschaft Figures ein PathFigure-Element eingebettet. In diesem Beispiel handelt es sich nur um ein PathFigure-Element, es können aber x-beliebig viele sein. In PathFigure sind die grafischen Elemente eingebettet. An der namentlichen Kennzeichnung können Sie bereits erkennen, dass es sich um eine ganz besondere Gruppe von Elementen handelt. Tatsächlich müssen sie von PathSegment abgeleitet sein.

PathSegment zeichnet sich nur durch zwei Eigenschaften aus: Mit IsStroked kann festgelegt werden, ob ein Element gezeichnet werden soll, und mit IsSmoothJoin legen Sie fest, ob die Verbindung zum Vorgängerelement abgerundet werden soll oder nicht.

Im Element PathFigure wird über StartPoint der Startpunkt des geometrischen Objekts definiert. Mit IsClosed lässt sich der letzte Endpunkt des letzten geometrischen Objekts mit dem Startpunkt des ersten verbinden, um so ein geschlossenes Objekt zu erhalten.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2010

Visual C# 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2010
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern