Übersicht über die GeometrieGeometry Overview

Diese Übersicht beschreibt, wie die Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Geometry Klassen, um Formen zu beschreiben.This overview describes how to use the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Geometry classes to describe shapes. In diesem Thema sind auch die Unterschiede zwischen Geometry Objekte und Shape Elemente.This topic also contrasts the differences between Geometry objects and Shape elements.

Was ist eine Geometrie?What Is a Geometry?

Die Geometry -Klasse und die Klassen, z. B. EllipseGeometry, PathGeometry, und CombinedGeometry, ermöglichen es Ihnen, die die Geometrie einer 2-D-Form beschreiben.The Geometry class and the classes which derive from it, such as EllipseGeometry, PathGeometry, and CombinedGeometry, enable you to describe the geometry of a 2-D shape. Diese geometrischen Beschreibungen haben viele Verwendungszwecke, beispielsweise zum Definieren einer am Bildschirm zu zeichnenden Form oder zum Definieren von Treffertest- und Clipbereichen.These geometric descriptions have many uses, such defining a shape to paint to the screen or defining hit-test and clip regions. Sie können mithilfe einer Geometrie sogar einen Animationspfad definieren.You can even use a geometry to define an animation path.

Geometry Objekte können einfach sein, wie z. B. Rechtecke und Kreise oder um zusammengesetzte aus zwei oder mehreren geometrischen Objekten erstellt wird.Geometry objects can be simple, such as rectangles and circles, or composite, created from two or more geometry objects. Komplexere Geometrien können erstellt werden, mithilfe der PathGeometry und StreamGeometry Klassen, mit denen Sie Bögen und Kurven beschreiben können.More complex geometries can be created by using the PathGeometry and StreamGeometry classes, which enable you to describe arcs and curves.

Da eine Geometry ist eine Art von Freezable, Geometry -Objekte mehrere spezielle Features bereit: sie können als deklariert werden Ressourcen, gemeinsam genutzte von mehreren Objekten, die schreibgeschützt zur Verbesserung der Leistung geklont, und threadsicher gemacht werden.Because a Geometry is a type of Freezable, Geometry objects provide several special features: they can be declared as resources, shared among multiple objects, made read-only to improve performance, cloned, and made thread-safe. Weitere Informationen zu den verschiedenen Funktionen von Freezable Objekten finden Sie die Übersicht über Freezable-Objekte.For more information about the different features provided by Freezable objects, see the Freezable Objects Overview.

Geometrien vs. FormenGeometries vs. Shapes

Die Geometry und Shape -Klassen sind scheinbar ähnlich, da sie beide 2D-Formen beschreiben (vergleichen EllipseGeometry und Ellipse z. B.), es gibt jedoch wichtige Unterschiede.The Geometry and Shape classes seem similar in that they both describe 2-D shapes (compare EllipseGeometry and Ellipse for example), but there are important differences.

Zum einen die Geometry Klasse erbt von der Freezable Klasse während der Shape Klasse erbt von FrameworkElement.For one, the Geometry class inherits from the Freezable class while the Shape class inherits from FrameworkElement. Da diese Elemente sind Shape Objekte können sich selbst rendern und das Layoutsystem teilnehmen während Geometry Objekte können nicht.Because they are elements, Shape objects can render themselves and participate in the layout system, while Geometry objects cannot.

Obwohl Shape Objekte sind leichter zu verwenden als Geometry Objekte Geometry Objekte sind vielseitiger.Although Shape objects are more readily usable than Geometry objects, Geometry objects are more versatile. Während einer Shape Objekt wird verwendet, um das Rendern von 2D-Grafiken, einen Geometry Objekt kann verwendet werden, um die geometrische Region für 2D-Grafiken definieren, definieren eine Region für das Clipping oder eine Region für Treffertests, z. B. definieren.While a Shape object is used to render 2-D graphics, a Geometry object can be used to define the geometric region for 2-D graphics, define a region for clipping, or define a region for hit testing, for example.

Die Path-FormThe Path Shape

Eine Shape, Path Klasse, verwendet eine Geometry zur Beschreibung des Inhalts.One Shape, the Path class, actually uses a Geometry to describe its contents. Durch Festlegen der Data Eigenschaft der Path mit einer Geometry und seine Fill und Stroke Eigenschaften können Sie rendern eine Geometry.By setting the Data property of the Path with a Geometry and setting its Fill and Stroke properties, you can render a Geometry.

Allgemeine Eigenschaften, die eine Geometrie übernehmenCommon Properties That Take a Geometry

In den vorherigen Abschnitten wurde erwähnt, dass Geometry-Objekte für eine Vielzahl von Zwecken mit anderen Objekten verwendet werden können, z.B. zum Zeichnen von Formen, zum Animieren und für das Clipping.The preceding sections mentioned that Geometry objects can be used with other objects for a variety of purposes, such as drawing shapes, animating, and clipping. Die folgende Tabelle enthält mehrere Klassen, die über Eigenschaften verfügen, die Ausführen einer Geometry Objekt.The following table lists several classes that have properties that take a Geometry object.

TypType EigenschaftProperty
DoubleAnimationUsingPath PathGeometry
DrawingGroup ClipGeometry
GeometryDrawing Geometry
Path Data
UIElement Clip

Einfache geometrische TypenSimple Geometry Types

Die Basisklasse für alle Geometrien ist die abstrakte Klasse Geometry.The base class for all geometries is the abstract class Geometry. Die abgeleiteten Klassen der Geometry -Klasse kann grob in drei Kategorien gruppiert werden: einfache Geometrien, Pfadgeometrien und zusammengesetzte Geometrien.The classes which derive from the Geometry class can be roughly grouped into three categories: simple geometries, path geometries, and composite geometries.

Klassen der einfachen Geometrie enthalten LineGeometry, RectangleGeometry, und EllipseGeometry und dienen zum Erstellen von grundlegenden geometrischer Formen wie Linien, Rechtecke und Kreise.Simple geometry classes include LineGeometry, RectangleGeometry, and EllipseGeometry and are used to create basic geometric shapes, such as lines, rectangles, and circles.

  • Ein LineGeometry wird definiert, indem Sie den Startpunkt und Endpunkt der Linie angeben.A LineGeometry is defined by specifying the start point of the line and the end point.

  • Ein RectangleGeometry mit definiert eine Rect Struktur, die ihre relative Position und die Höhe und Breite angegeben.A RectangleGeometry is defined with a Rect structure which specifies its relative position and its height and width. Sie können ein abgerundetes Rechteck erstellen, durch Festlegen der RadiusX und RadiusY Eigenschaften.You can create a rounded rectangle by setting the RadiusX and RadiusY properties.

  • Ein EllipseGeometry wird von einem Mittelpunkt, einem X-Radius und einem y-Radius definiert.An EllipseGeometry is defined by a center point, an x-radius and a y-radius. Die folgenden Beispiele zeigen, wie einfache Geometrien für das Rendering und das Clipping erstellt werden können.The following examples show how to create simple geometries for rendering and for clipping.

Diese Formen sowie komplexere Formen können mit erstellt eine PathGeometry oder durch Kombinieren von geometrischen Objekten, aber diese Klassen einfacheren Methoden zum Erstellen dieser grundlegenden geometrischen Formen.These same shapes, as well as more complex shapes, can be created using a PathGeometry or by combining geometry objects together, but these classes provide a simpler means for producing these basic geometric shapes.

Das folgende Beispiel zeigt das Erstellen und Rendern einer LineGeometry.The following example shows how to create and render a LineGeometry. Wie bereits erwähnt ein Geometry Objekt ist nicht selbst zeichnen im Beispiel wird eine Path Form, um die Linie zu rendern.As noted previously, a Geometry object is unable to draw itself, so the example uses a Path shape to render the line. Da eine Linie keinen Bereich aufweist, mit der Festlegung der Fill Eigenschaft der Path keine Auswirkungen; stattdessen nur die Stroke und StrokeThickness Eigenschaften angegeben werden.Because a line has no area, setting the Fill property of the Path would have no effect; instead, only the Stroke and StrokeThickness properties are specified. Die folgende Abbildung zeigt die Ausgabe des Beispiels.The following illustration shows the output from the example.

Eine LineGeometryA LineGeometry
Eine LineGeometry, gezeichnet von (10,20) bis (100,130)A LineGeometry drawn from (10,20) to (100,130)

<Path Stroke="Black" StrokeThickness="1" >
  <Path.Data>
    <LineGeometry StartPoint="10,20" EndPoint="100,130" />
  </Path.Data>
</Path>
LineGeometry myLineGeometry = new LineGeometry();
myLineGeometry.StartPoint = new Point(10,20);
myLineGeometry.EndPoint = new Point(100,130);

Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myLineGeometry;
Dim myLineGeometry As New LineGeometry()
myLineGeometry.StartPoint = New Point(10,20)
myLineGeometry.EndPoint = New Point(100,130)

Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myLineGeometry

Das nächste Beispiel zeigt das Erstellen und Rendern einer EllipseGeometry.The next example shows how to create and render an EllipseGeometry. Den Beispielen wird die Center von der EllipseGeometry festgelegt ist, zu dem Punkt 50,50 und der X-Radius und die y-Radius auf festlegen 50, einen Kreis mit einem Durchmesser von 100 erstellt.The examples sets the Center of the EllipseGeometry is set to the point 50,50 and the x-radius and the y-radius are both set to 50, which creates a circle with a diameter of 100. Das Innere der Ellipse wird gezeichnet, indem Sie in diesem Fall das Pfadelement Fill-Eigenschaft, einen Wert zuweisen Gold.The interior of the ellipse is painted by assigning a value to the Path element's Fill property, in this case Gold. Die folgende Abbildung zeigt die Ausgabe des Beispiels.The following illustration shows the output from the example.

Eine EllipseGeometryAn EllipseGeometry
EllipseGeometry, gezeichnet bei (50,50)An EllipseGeometry drawn at (50,50)

<Path Fill="Gold" Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <EllipseGeometry Center="50,50" RadiusX="50" RadiusY="50" />
  </Path.Data>
</Path>
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new Point(50, 50);
myEllipseGeometry.RadiusX = 50;
myEllipseGeometry.RadiusY = 50;

Path myPath = new Path();
myPath.Fill = Brushes.Gold;
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myEllipseGeometry;
Dim myEllipseGeometry As New EllipseGeometry()
myEllipseGeometry.Center = New Point(50, 50)
myEllipseGeometry.RadiusX = 50
myEllipseGeometry.RadiusY = 50

Dim myPath As New Path()
myPath.Fill = Brushes.Gold
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myEllipseGeometry

Das folgende Beispiel zeigt das Erstellen und Rendern einer RectangleGeometry.The following example shows how to create and render a RectangleGeometry. Die Position und den Abmessungen des Rechtecks definieren, indem eine Rect Struktur.The position and the dimensions of the rectangle are defined by a Rect structure. Die Position ist 50,50 und die Höhe und Breite sind beide 25, wodurch ein Quadrat erstellt wird.The position is 50,50 and the height and width are both 25, which creates a square. Die folgende Abbildung zeigt die Ausgabe des Beispiels.The following illustration shows the output from the example.

Eine RectangleGeometryA RectangleGeometry
Eine RectangleGeometry, gezeichnet bei 50,50A RectangleGeometry drawn at 50,50

<Path Fill="LemonChiffon" Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <RectangleGeometry Rect="50,50,25,25" />
  </Path.Data>
</Path>
RectangleGeometry myRectangleGeometry = new RectangleGeometry();    
myRectangleGeometry.Rect = new Rect(50,50,25,25);

Path myPath = new Path();
myPath.Fill = Brushes.LemonChiffon;
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myRectangleGeometry;
Dim myRectangleGeometry As New RectangleGeometry()
myRectangleGeometry.Rect = New Rect(50,50,25,25)

Dim myPath As New Path()
myPath.Fill = Brushes.LemonChiffon
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myRectangleGeometry

Das folgende Beispiel zeigt, wie Sie mit einem EllipseGeometry als Clipbereich für ein Bild.The following example shows how to use an EllipseGeometry as the clip region for an image. Ein Image Objekt wird definiert, mit einem Width 200 und ein Height von 150.An Image object is defined with a Width of 200 and a Height of 150. Ein EllipseGeometry mit einer RadiusX Wert 100, einen RadiusY Wert 75, und ein Center -Wert von 100,75 wird auf festgelegt ist der Clip -Eigenschaft des Bildes.An EllipseGeometry with a RadiusX value of 100, a RadiusY value of 75, and a Center value of 100,75 is set to the Clip property of the image. Es wird nur der Teil des Bilds angezeigt, der innerhalb des Bereichs der Ellipse liegt.Only the part of the image that is within the area of the ellipse will be displayed. Die folgende Abbildung zeigt die Ausgabe des Beispiels.The following illustration shows the output from the example.

Ein Bild mit und ohne ClippingAn Image with and without clipping
Eine EllipseGeometry zum Beschneiden eines Image-SteuerelementsAn EllipseGeometry used to clip an Image control

<Image
  Source="sampleImages\Waterlilies.jpg"
  Width="200" Height="150" HorizontalAlignment="Left">
  <Image.Clip>
    <EllipseGeometry
      RadiusX="100"
      RadiusY="75"
      Center="100,75"/>
  </Image.Clip>
</Image>

// Create the image to clip.
Image myImage = new Image();
Uri imageUri = 
    new Uri(@"C:\\Documents and Settings\\All Users\\Documents\My Pictures\\Sample Pictures\\Water lilies.jpg", UriKind.Relative);
myImage.Source = new BitmapImage(imageUri);
myImage.Width = 200;
myImage.Height = 150;
myImage.HorizontalAlignment = HorizontalAlignment.Left;    

// Use an EllipseGeometry to define the clip region. 
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new Point(100, 75);
myEllipseGeometry.RadiusX = 100;
myEllipseGeometry.RadiusY = 75;
myImage.Clip = myEllipseGeometry;


' Create the image to clip.
Dim myImage As New Image()
Dim imageUri As New Uri("C:\\Documents and Settings\\All Users\\Documents\My Pictures\\Sample Pictures\\Water lilies.jpg", UriKind.Relative)
myImage.Source = New BitmapImage(imageUri)
myImage.Width = 200
myImage.Height = 150
myImage.HorizontalAlignment = HorizontalAlignment.Left

' Use an EllipseGeometry to define the clip region. 
Dim myEllipseGeometry As New EllipseGeometry()
myEllipseGeometry.Center = New Point(100, 75)
myEllipseGeometry.RadiusX = 100
myEllipseGeometry.RadiusY = 75
myImage.Clip = myEllipseGeometry

Path-GeometrienPath Geometries

Die PathGeometry -Klasse und deren lightweight-Entsprechung, die StreamGeometry Klasse, bieten die Möglichkeit, mehrere komplexe Figuren bestehend aus Bögen, Kurven und Linien.The PathGeometry class and its lightweight equivalent, the StreamGeometry class, provide the means to describe multiple complex figures composed of arcs, curves, and lines.

Das Kernstück einer PathGeometry ist eine Sammlung von PathFigure Objekte, die so genannt, da jede Figur eine diskrete Form in beschreibt die PathGeometry.At the heart of a PathGeometry is a collection of PathFigure objects, so named because each figure describes a discrete shape in the PathGeometry. Jede PathFigure selbst besteht aus einer oder mehreren PathSegment -Objekt, von denen jeder ein Segment der Figur beschreibt.Each PathFigure is itself comprised of one or more PathSegment objects, each of which describes a segment of the figure.

Es gibt viele Arten von Segmenten.There are many types of segments.

SegmenttypSegment Type BeschreibungDescription BeispielExample
ArcSegment Erstellt einen elliptischen Bogen zwischen zwei Punkten.Creates an elliptical arc between two points. Erstellen eines elliptischen Bogens.Create an Elliptical Arc.
BezierSegment Erstellt eine kubische Bezier-Kurve zwischen zwei Punkten.Creates a cubic Bezier curve between two points. Erstellen Sie eine kubische Bezier-Kurve.Create a Cubic Bezier Curve.
LineSegment Erstellt eine Linie zwischen zwei Punkten.Creates a line between two points. Erstellen eines LineSegment in einer PathGeometryCreate a LineSegment in a PathGeometry
PolyBezierSegment Erstellt eine Reihe von kubische Bezier-Kurven.Creates a series of cubic Bezier curves. Finden Sie unter den PolyBezierSegment Seite.See the PolyBezierSegment type page.
PolyLineSegment Erstellt eine Reihe von Zeilen.Creates a series of lines. Finden Sie unter den PolyLineSegment Seite.See the PolyLineSegment type page.
PolyQuadraticBezierSegment Erstellt eine Reihe von quadratischen Bezier-Kurven.Creates a series of quadratic Bezier curves. Finden Sie unter den PolyQuadraticBezierSegment Seite.See the PolyQuadraticBezierSegment page.
QuadraticBezierSegment Erstellt eine quadratische Bezierkurve.Creates a quadratic Bezier curve. Erstellen einer quadratischen Bezier-Kurve.Create a Quadratic Bezier Curve.

Die Segmente innerhalb einer PathFigure werden in einer einzelnen geometrischen Form kombiniert, mit dem Endpunkt eines Segments als Startpunkt des nächsten Segments.The segments within a PathFigure are combined into a single geometric shape with the end point of each segment being the start point of the next segment. Die StartPoint Eigenschaft eine PathFigure gibt den Punkt, von dem das erste Segment gezeichnet wird.The StartPoint property of a PathFigure specifies the point from which the first segment is drawn. Jedes nachfolgende Segment beginnt am Endpunkt des vorherigen Segments.Each subsequent segment starts at the end point of the previous segment. Z. B. eine vertikale Linie von 10,50 zu 10,150 definiert werden, indem Sie die Einstellung der StartPoint Eigenschaft, um 10,50 und erstellen eine LineSegment mit eine Point eigenschaftseinstellung 10,150.For example, a vertical line from 10,50 to 10,150 can be defined by setting the StartPoint property to 10,50 and creating a LineSegment with a Point property setting of 10,150.

Das folgende Beispiel erstellt eine einfache PathGeometry bestehend aus einem einzelnen PathFigure mit einer LineSegment und zeigt sie mithilfe einer Path Element.The following example creates a simple PathGeometry comprised of a single PathFigure with a LineSegment and displays it using a Path element. Die PathFigure des Objekts StartPoint nastaven NA hodnotu 10,20 und LineSegment wird definiert, mit dem Endpunkt des 100,130.The PathFigure object's StartPoint is set to 10,20 and a LineSegment is defined with an end point of 100,130. Die folgende Abbildung zeigt die PathGeometry durch dieses Beispiel erstellt.The following illustration shows the PathGeometry created by this example.

Eine LineGeometryA LineGeometry
Eine PathGeometry, die ein einzelnes LineSegment enthältA PathGeometry that contains a single LineSegment

<Path Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigure StartPoint="10,20">
          <PathFigure.Segments>
            <LineSegment Point="100,130"/>
          </PathFigure.Segments>
        </PathFigure>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

// Create a figure that describes a 
// line from (10,20) to (100,130).
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,20);
myPathFigure.Segments.Add(
    new LineSegment(new Point(100,130),
    true /* IsStroked */ ));

/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;

' Create a figure that describes a 
' line from (10,20) to (100,130).
Dim myPathFigure As New PathFigure()
myPathFigure.StartPoint = New Point(10,20)
myPathFigure.Segments.Add(New LineSegment(New Point(100,130), True)) ' IsStroked 

''' Create a PathGeometry to contain the figure.
Dim myPathGeometry As New PathGeometry()
myPathGeometry.Figures.Add(myPathFigure)

' Display the PathGeometry. 
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myPathGeometry

Es lohnt sich ein Vergleich dieses Beispiels mit der vorhergehenden LineGeometry Beispiel.It is worth contrasting this example with the preceding LineGeometry example. Die Syntax für eine PathGeometry ist wesentlich ausführlicher als für eine einfache LineGeometry, und es ist möglicherweise sinnvoller, verwenden Sie die LineGeometry Klasse in diesem Fall jedoch die ausführliche Syntax von der PathGeometry ermöglicht äußerst komplizierte und komplexe geometrische Regionen.The syntax used for a PathGeometry is much more verbose than that used for a simple LineGeometry, and it may make more sense to use the LineGeometry class in this case, but the verbose syntax of the PathGeometry allows for extremely intricate and complex geometric regions.

Komplexere Geometrien können erstellt werden, mithilfe einer Kombination von PathSegment Objekte.More complex geometries can be created by using a combination of PathSegment objects.

Im nächsten Beispiel wird eine BezierSegment, LineSegment, und ein ArcSegment um Form zu bilden.The next example uses a BezierSegment, a LineSegment, and an ArcSegment to create shape. Das Beispiel erstellt zuerst eine kubische Bezier-Kurve, die durch die vier Punkte definiert ist: ein Anfangspunkt, die den Endpunkt des vorherigen Segments, einen Endpunkt ist (Point3), und zwei Punkte steuern (Point1 und Point2).The example first creates a cubic Bezier curve is by defining four points: a start point, which is the end point of the previous segment, an end point (Point3), and two control points (Point1 and Point2). Die beiden Steuerpunkte, die von einem kubische Bezier-Kurve Verhalten sich wie Magnetquellen, Teile, was andernfalls, dass eine gerade Linie auf sich selbst wäre, erzeugen eine Kurve überzeugen.The two control points of a cubic Bezier curve behave like magnets, attracting portions of what would otherwise be a straight line towards themselves, producing a curve. Der erste Kontrollpunkt, Point1, wirkt sich auf den Anfang Teil der Kurve, der zweite Kontrollpunkt, Point2, wirkt sich auf den Endabschnitt der Kurve.The first control point, Point1, affects the beginning portion of the curve; the second control point, Point2, affects the ending portion of the curve.

Im Beispiel fügt dann ein LineSegment, die zwischen dem Endpunkt der vorangehenden gezeichnet wird BezierSegment vorangestellt, die es zu dem Punkt, der gemäß der LineSegment Eigenschaft.The example then adds a LineSegment, which is drawn between the end point of the preceding BezierSegment that preceded it to the point specified by its LineSegment property.

Im Beispiel fügt dann ein ArcSegment, die vom Endpunkt für die vorangehenden gezeichnet wird LineSegment festgelegten durch seine Point Eigenschaft.The example then adds an ArcSegment, which is drawn from the end point of the preceding LineSegment to the point specified by its Point property. Im Beispiel wird überdies des Bogens x- und y-Radius (Size), ein Drehwinkel für Bezeichnungen (RotationAngle), ein Flag, das angibt, wie groß der Winkel des resultierenden Bogens sein soll (IsLargeArc), und ein Wert, der angibt, in welche Richtung der Bogen gezeichnet wird (SweepDirection).The example also specifies the arc's x- and y-radius (Size), a rotation angle (RotationAngle), a flag indicating how large the angle of the resulting arc should be (IsLargeArc), and a value indicating in which direction the arc is drawn (SweepDirection). Die folgende Abbildung zeigt die durch dieses Beispiel erstellte Form.The following illustration shows the shape created by this example.

Eine PathGeometryA PathGeometry
Eine PathGeometryA PathGeometry

<Path Stroke="Black" StrokeThickness="1" >
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigure StartPoint="10,50">
          <PathFigure.Segments>
            <BezierSegment
              Point1="100,0"
              Point2="200,200"
              Point3="300,100"/>
            <LineSegment Point="400,100" />
            <ArcSegment
              Size="50,50" RotationAngle="45"
              IsLargeArc="True" SweepDirection="Clockwise"
              Point="200,100"/>
          </PathFigure.Segments>
        </PathFigure>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

// Create a figure.
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,50);
myPathFigure.Segments.Add(
    new BezierSegment(
        new Point(100,0),
        new Point(200,200),
        new Point(300,100),
        true /* IsStroked */  )); 
myPathFigure.Segments.Add(
    new LineSegment(
        new Point(400,100),
        true /* IsStroked */ ));
myPathFigure.Segments.Add(
    new ArcSegment(
        new Point(200,100),
        new Size(50,50),
        45,
        true, /* IsLargeArc */ 
        SweepDirection.Clockwise, 
        true /* IsStroked */ ));                       

/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;

' Create a figure.
Dim myPathFigure As New PathFigure()
myPathFigure.StartPoint = New Point(10,50)
myPathFigure.Segments.Add(New BezierSegment(New Point(100,0), New Point(200,200), New Point(300,100), True)) ' IsStroked 
myPathFigure.Segments.Add(New LineSegment(New Point(400,100), True)) ' IsStroked 
myPathFigure.Segments.Add(New ArcSegment(New Point(200,100), New Size(50,50), 45, True, SweepDirection.Clockwise, True)) ' IsStroked  -  IsLargeArc 

''' Create a PathGeometry to contain the figure.
Dim myPathGeometry As New PathGeometry()
myPathGeometry.Figures.Add(myPathFigure)

' Display the PathGeometry. 
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myPathGeometry

Noch komplexere Geometrien können erstellt werden, indem Sie mehrere PathFigure Objekte innerhalb einer PathGeometry.Even more complex geometries can be created by using multiple PathFigure objects within a PathGeometry.

Das folgende Beispiel erstellt eine PathGeometry mit zwei PathFigure Objekte, von denen jede mehrere enthält PathSegment Objekte.The following example creates a PathGeometry with two PathFigure objects, each of which contains multiple PathSegment objects. Die PathFigure aus dem obigen Beispiel und eine PathFigure mit einer PolyLineSegment und QuadraticBezierSegment verwendet werden.The PathFigure from the above example and a PathFigure with a PolyLineSegment and a QuadraticBezierSegment are used. Ein PolyLineSegment mit einem Array von Punkten definiert ist und die QuadraticBezierSegment mit einem Kontrollpunkt und einen Endpunkt definiert ist.A PolyLineSegment is defined with an array of points and the QuadraticBezierSegment is defined with a control point and an end point. Die folgende Abbildung zeigt die durch dieses Beispiel erstellte Form.The following illustration shows the shape created by this example.

Eine PathGeometryA PathGeometry
Eine PathGeometry mit mehreren FigurenA PathGeometry with multiple figures

<Path Stroke="Black" StrokeThickness="1" >
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigure StartPoint="10,50">
          <PathFigure.Segments>
            <BezierSegment
              Point1="100,0"
              Point2="200,200"
              Point3="300,100"/>
            <LineSegment Point="400,100" />
            <ArcSegment
              Size="50,50" RotationAngle="45"
              IsLargeArc="True" SweepDirection="Clockwise"
              Point="200,100"/>
          </PathFigure.Segments>
        </PathFigure>
        
        <PathFigure StartPoint="10,100">
          <PathFigure.Segments>
            <PolyLineSegment Points="50,100 50,150" />
            <QuadraticBezierSegment Point1="200,200" Point2="300,100"/>
          </PathFigure.Segments>
        </PathFigure>                
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

PathGeometry myPathGeometry = new PathGeometry();            

// Create a figure.
PathFigure pathFigure1 = new PathFigure();
pathFigure1.StartPoint = new Point(10,50);
pathFigure1.Segments.Add(
    new BezierSegment(
        new Point(100,0),
        new Point(200,200),
        new Point(300,100),
        true /* IsStroked */ )); 
pathFigure1.Segments.Add(
    new LineSegment(
        new Point(400,100),
        true /* IsStroked */ ));
pathFigure1.Segments.Add(
    new ArcSegment(
        new Point(200,100),
        new Size(50,50),
        45,
        true, /* IsLargeArc */
        SweepDirection.Clockwise, 
        true /* IsStroked */ ));
myPathGeometry.Figures.Add(pathFigure1);    

// Create another figure.
PathFigure pathFigure2 = new PathFigure();
pathFigure2.StartPoint = new Point(10,100);
Point[] polyLinePointArray = 
    new Point[]{ new Point(50, 100), new Point(50, 150)};
PolyLineSegment myPolyLineSegment = new PolyLineSegment();
myPolyLineSegment.Points = 
    new PointCollection(polyLinePointArray);
pathFigure2.Segments.Add(myPolyLineSegment);
pathFigure2.Segments.Add(
    new QuadraticBezierSegment(
        new Point(200,200),
        new Point(300,100),
        true /* IsStroked */ ));
myPathGeometry.Figures.Add(pathFigure2);

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;

Dim myPathGeometry As New PathGeometry()

' Create a figure.
Dim pathFigure1 As New PathFigure()
pathFigure1.StartPoint = New Point(10,50)
pathFigure1.Segments.Add(New BezierSegment(New Point(100,0), New Point(200,200), New Point(300,100), True)) ' IsStroked 
pathFigure1.Segments.Add(New LineSegment(New Point(400,100), True)) ' IsStroked 
pathFigure1.Segments.Add(New ArcSegment(New Point(200,100), New Size(50,50), 45, True, SweepDirection.Clockwise, True)) ' IsStroked  -  IsLargeArc 
myPathGeometry.Figures.Add(pathFigure1)

' Create another figure.
Dim pathFigure2 As New PathFigure()
pathFigure2.StartPoint = New Point(10,100)
Dim polyLinePointArray() As Point = { New Point(50, 100), New Point(50, 150)}
Dim myPolyLineSegment As New PolyLineSegment()
myPolyLineSegment.Points = New PointCollection(polyLinePointArray)
pathFigure2.Segments.Add(myPolyLineSegment)
pathFigure2.Segments.Add(New QuadraticBezierSegment(New Point(200,200), New Point(300,100), True)) ' IsStroked 
myPathGeometry.Figures.Add(pathFigure2)

' Display the PathGeometry. 
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myPathGeometry

StreamGeometryStreamGeometry

Wie die PathGeometry -Klasse, eine StreamGeometry definiert eine komplexe geometrische Form, die Kurven, Bögen und Linien enthalten kann.Like the PathGeometry class, a StreamGeometry defines a complex geometric shape that may contain curves, arcs, and lines. Im Gegensatz zu einer PathGeometry, den Inhalt einer StreamGeometry unterstützen nicht die Datenbindung, Animation oder Änderung.Unlike a PathGeometry, the contents of a StreamGeometry do not support data binding, animation, or modification. Verwenden einer StreamGeometry Wenn Sie eine komplexe Geometrie beschreiben müssen jedoch nicht den Mehraufwand für die Unterstützung von Datenbindung, Animation oder Änderung möchten.Use a StreamGeometry when you need to describe a complex geometry but do not want the overhead of supporting data binding, animation, or modification. Aufgrund ihrer Effizienz der StreamGeometry Klasse ist eine gute Wahl zum Beschreiben von Adornern.Because of its efficiency, the StreamGeometry class is a good choice for describing adorners.

Ein Beispiel finden Sie unter Erstellen einer Form mithilfe von StreamGeometry.For an example, see Create a Shape Using a StreamGeometry.

PfadmarkupsyntaxPath Markup Syntax

Die PathGeometry und StreamGeometry unterstützt eine Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) Attributsyntax. hierzu eine speziellen Kombination verschieben und draw-Befehle.The PathGeometry and StreamGeometry types support a Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) attribute syntax using a special series of move and draw commands. Weitere Informationen finden Sie unter Pfadmarkupsyntax.For more information, see Path Markup Syntax.

Zusammengesetzte GeometrienComposite Geometries

Zusammengesetzte geometrische Objekte können erstellt werden, mithilfe einer GeometryGroup, CombinedGeometry, oder durch Aufrufen der statischen Geometry Methode Combine.Composite geometry objects can be created using a GeometryGroup, a CombinedGeometry, or by calling the static Geometry method Combine.

  • Die CombinedGeometry Objekt und die Combine Methode führt eine boolesche Operation aus, um die von beiden Geometrien definierten Bereich kombinieren.The CombinedGeometry object and the Combine method performs a Boolean operation to combine the area defined by two geometries. Geometry -Objekte ohne Bereich werden verworfen.Geometry objects that have no area are discarded. Nur zwei Geometry -Objekte können kombiniert werden (obwohl es sich bei diesen beiden Geometrien auch um zusammengesetzte Geometrien handeln).Only two Geometry objects can be combined (although these two geometries may also be composite geometries).

  • Die GeometryGroup -Klasse erstellt einen Zusammenschluss von der Geometry Objekte, ohne dass ihr Bereich kombiniert.The GeometryGroup class creates an amalgamation of the Geometry objects it contains without combining their area. Eine beliebige Anzahl von Geometry können Objekte hinzugefügt werden, um eine GeometryGroup.Any number of Geometry objects can be added to a GeometryGroup. Ein Beispiel finden Sie unter Erstellen einer zusammengesetzten Form.For an example, see Create a Composite Shape.

Da diese Kombination nicht durchführen, GeometryGroup Objekte bietet Leistungsvorteile gegenüber CombinedGeometry Objekte oder Combine Methode.Because they do not perform a combine operation, using GeometryGroup objects provides performance benefits over using CombinedGeometry objects or the Combine method.

Kombinierte GeometrienCombined Geometries

Im vorherigen Abschnitt erwähnt die CombinedGeometry Objekt und die Combine Methode die durch die darin enthaltenen Geometrien definierten Bereich kombinieren.The preceding section mentioned the CombinedGeometry object and the Combine method combine the area defined by the geometries they contain. Die GeometryCombineMode -Enumeration gibt an, wie die Geometrien kombiniert werden.The GeometryCombineMode enumeration specifies how the geometries are combined. Die möglichen Werte für die GeometryCombineMode -Eigenschaft sind: Union, Intersect, Exclude, und Xor.The possible values for the GeometryCombineMode property are: Union, Intersect, Exclude, and Xor.

Im folgenden Beispiel eine CombinedGeometry mit einem Kombinationsmodus auf Union definiert ist.In the following example, a CombinedGeometry is defined with a combine mode of Union. Beide Geometry1 und Geometry2 werden als Kreise mit identischem Radius, aber deren Mittelpunkte von 50 definiert.Both Geometry1 and the Geometry2 are defined as circles of the same radius, but with centers offset by 50.

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>
    
    <!-- Combines two geometries using the union combine mode. -->
    <CombinedGeometry GeometryCombineMode="Union">
      <CombinedGeometry.Geometry1>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
      </CombinedGeometry.Geometry1>
      <CombinedGeometry.Geometry2>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
      </CombinedGeometry.Geometry2>
    </CombinedGeometry>
  </Path.Data>
</Path>

Ergebnisse des Union-KombinationsmodusResults of the Union combine mode

Im folgenden Beispiel eine CombinedGeometry wird definiert, wobei der Kombinationsmodus von Xor.In the following example, a CombinedGeometry is defined with a combine mode of Xor. Beide Geometry1 und Geometry2 werden als Kreise mit identischem Radius, aber deren Mittelpunkte von 50 definiert.Both Geometry1 and the Geometry2 are defined as circles of the same radius, but with centers offset by 50.

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>
    
    <!-- Combines two geometries using the XOR combine mode. -->
    <CombinedGeometry GeometryCombineMode="Xor">
      <CombinedGeometry.Geometry1>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
      </CombinedGeometry.Geometry1>
      <CombinedGeometry.Geometry2>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
      </CombinedGeometry.Geometry2>
    </CombinedGeometry>
  </Path.Data>
</Path>

Ergebnisse des Xor-KombinationsmodusResults of the Xor combine mode

Weitere Beispiele finden Sie unter Erstellen einer zusammengesetzten Form und unter Erstellen von kombinierten Geometrien.For additional examples, see Create a Composite Shape and Create a Combined Geometry.

Funktionen von Freezable-ObjektenFreezable Features

Da es erbt die Freezable -Klasse, die Geometry Klasse mehrere spezielle Features bereit: Geometry als Objekte deklariert werden XAML-Ressourcen, von mehreren Objekten, die schreibgeschützt zur Verbesserung der freigegebenen Leistung, geklont und threadsicher gemacht.Because it inherits from the Freezable class, the Geometry class provide several special features: Geometry objects can be declared as XAML Resources, shared among multiple objects, made read-only to improve performance, cloned, and made thread-safe. Weitere Informationen zu den verschiedenen Funktionen von Freezable Objekten finden Sie die Übersicht über Freezable-Objekte.For more information about the different features provided by Freezable objects, see the Freezable Objects Overview.

Andere GeometriefeaturesOther Geometry Features

Die Geometry Klasse enthält auch nützliche Dienstprogrammmethoden, z. B. Folgendes:The Geometry class also provides useful utility methods, such as the following:

Finden Sie unter den Geometry -Klasse für eine vollständige Liste der Methoden.See the Geometry class for a complete listing of its methods.

Siehe auchSee also