ジオメトリの概要Geometry Overview

この概要で説明を使用する方法、 Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Geometry図形を記述するクラス。This overview describes how to use the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Geometry classes to describe shapes. このトピックでは、間の相違点も対照的GeometryオブジェクトおよびShape要素。This topic also contrasts the differences between Geometry objects and Shape elements.

ジオメトリとはWhat Is a Geometry?

Geometryクラスおよびなど、そこから派生するクラスEllipseGeometryPathGeometry、およびCombinedGeometry、2-d 図形のジオメトリを記述できます。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. これらの幾何学的な記述には、画面を塗りつぶす図形を定義したり、ヒット テストやクリップ領域を定義するなど、多くの用途があります。These geometric descriptions have many uses, such defining a shape to paint to the screen or defining hit-test and clip regions. ジオメトリを使用して、アニメーション パスを定義することもできます。You can even use a geometry to define an animation path.

Geometry オブジェクトは、四角形、円、または複合では、2 つ以上の geometry オブジェクトから作成されたなど、単純な場合、指定できます。Geometry objects can be simple, such as rectangles and circles, or composite, created from two or more geometry objects. 使用してより複雑なジオメトリを作成することができます、PathGeometryStreamGeometry円弧と曲線の説明を可能にするクラス。More complex geometries can be created by using the PathGeometry and StreamGeometry classes, which enable you to describe arcs and curves.

Geometryの種類は、 FreezableGeometryオブジェクトはいくつかの特別な機能を提供: として宣言できますリソース、読み取り専用に複製すると、パフォーマンスを向上させるために、複数のオブジェクト間で共有し、スレッド セーフで行われます。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. によって提供されるさまざまな機能の詳細についてはFreezable、オブジェクトを参照してください、 Freezable オブジェクトの概要です。For more information about the different features provided by Freezable objects, see the Freezable Objects Overview.

ジオメトリと図形Geometries vs. Shapes

GeometryShapeクラス似たような点で、2 次元の図形が記述 (比較EllipseGeometryEllipseなど) が重要な違いがあります。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.

1 つのGeometryクラスから継承、Freezable中にクラス、Shapeクラスから継承FrameworkElementです。For one, the Geometry class inherits from the Freezable class while the Shape class inherits from FrameworkElement. 要素であるためShapeオブジェクト自体を表示して、レイアウト システムに参加中にGeometryオブジェクトことはできません。Because they are elements, Shape objects can render themselves and participate in the layout system, while Geometry objects cannot.

Shapeオブジェクトがより簡単に使用可能なGeometryオブジェクト、Geometryオブジェクトは、汎用性が高いです。Although Shape objects are more readily usable than Geometry objects, Geometry objects are more versatile. 中に、Shapeオブジェクトが 2 次元グラフィックスを表示するために使用される、 Geometry 2 D グラフィックスの幾何学的領域を定義、クリッピング、用の領域を定義またはたとえばヒット テスト用の領域を定義するオブジェクトを使用できます。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.

パス図形The Path Shape

1 つShapePathクラスを使用して実際には、Geometryその内容を記述します。One Shape, the Path class, actually uses a Geometry to describe its contents. 設定して、Dataのプロパティ、Pathで、Geometryと設定、FillStrokeプロパティを表示するには、Geometryです。By setting the Data property of the Path with a Geometry and setting its Fill and Stroke properties, you can render a Geometry.

ジオメトリを使用する一般的なプロパティCommon Properties That Take a Geometry

これまでのセクションでは、図形の描画、アニメーション、クリッピングなどのさまざまな目的で、ジオメトリ オブジェクトを他のオブジェクトと共に使用できることを説明しました。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. 次の表に、いくつかのクラスを使用するプロパティを持つ、Geometryオブジェクト。The following table lists several classes that have properties that take a Geometry object.

Type プロパティProperty
DoubleAnimationUsingPath PathGeometry
DrawingGroup ClipGeometry
GeometryDrawing Geometry
Path Data
UIElement Clip

単純なジオメトリの種類Simple Geometry Types

すべてのジオメトリの基本クラスは抽象クラスGeometryです。The base class for all geometries is the abstract class Geometry. 派生するクラス、Geometryクラスは 3 つのカテゴリにほぼ同じ分類できます: 単純なジオメトリ、パス ジオメトリ、および複合ジオメトリ。The classes which derive from the Geometry class can be roughly grouped into three categories: simple geometries, path geometries, and composite geometries.

単純なジオメトリ クラスに含まれるLineGeometryRectangleGeometry、およびEllipseGeometry線、四角形、および円などの基本的な幾何学図形を作成に使用するとします。Simple geometry classes include LineGeometry, RectangleGeometry, and EllipseGeometry and are used to create basic geometric shapes, such as lines, rectangles, and circles.

  • ALineGeometry行と終了位置の開始位置を指定することによって定義されます。A LineGeometry is defined by specifying the start point of the line and the end point.

  • ARectangleGeometryで定義された、Rect構造の相対的な位置とその高さと幅を指定します。A RectangleGeometry is defined with a Rect structure which specifies its relative position and its height and width. 角の丸い四角形を作成するには設定して、RadiusXRadiusYプロパティです。You can create a rounded rectangle by setting the RadiusX and RadiusY properties.

  • EllipseGeometry中心点、x 半径と y 半径によって定義されます。An EllipseGeometry is defined by a center point, an x-radius and a y-radius. レンダリングとクリッピング用の単純ジオメトリの作成方法を次の例に示します。The following examples show how to create simple geometries for rendering and for clipping.

使用して、これら同じ図形は、できるだけでなく、複雑な図形を作成できる、PathGeometryまたは geometry オブジェクトを一緒ですがこれらのクラスを組み合わせることによってこれらの基本的な幾何学図形を生成するためより簡単に手段を提供します。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.

次の例は、作成して表示する方法を示しています、LineGeometryです。The following example shows how to create and render a LineGeometry. 前述した、Geometryオブジェクトはため、この例では、自身で描画することはありません、Path図形、線を表示するためにします。As noted previously, a Geometry object is unable to draw itself, so the example uses a Path shape to render the line. 行に領域があるないために設定、Fillのプロパティ、Path効果はありません。 代わりに、のみ、StrokeStrokeThicknessプロパティが指定されています。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. この例からの出力を次の図に示します。The following illustration shows the output from the example.

LineGeometryA LineGeometry
(10,20) から (100,130) まで描画された LineGeometryA 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

次の例では、作成して表示する方法、EllipseGeometryです。The next example shows how to create and render an EllipseGeometry. 例のセット、CenterEllipseGeometry、ポイントに設定されている50,50x 半径と y 半径に設定されてと50100 の直径の円を作成します。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. ここでは、パス要素の塗りつぶしのプロパティに値を割り当てることによって、楕円の内部を描画するGoldです。The interior of the ellipse is painted by assigning a value to the Path element's Fill property, in this case Gold. この例からの出力を次の図に示します。The following illustration shows the output from the example.

EllipseGeometryAn EllipseGeometry
(50,50) に描画された EllipseGeometryAn 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

次の例は、作成して表示する方法を示しています、RectangleGeometryです。The following example shows how to create and render a RectangleGeometry. 位置と四角形の寸法がによって定義されている、Rect構造体。The position and the dimensions of the rectangle are defined by a Rect structure. 位置は 50,50、高さと幅は両方とも 25 で、正方形が作成されます。The position is 50,50 and the height and width are both 25, which creates a square. この例からの出力を次の図に示します。The following illustration shows the output from the example.

RectangleGeometryA RectangleGeometry
50,50 に描画された RectangleGeometryA 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

次の例を使用する方法を示しています、EllipseGeometryイメージのクリップ領域とします。The following example shows how to use an EllipseGeometry as the clip region for an image. Imageでオブジェクトが定義されている、 Width 200 とHeight150。An Image object is defined with a Width of 200 and a Height of 150. EllipseGeometryで、 RadiusX 100 の値、RadiusY値の 75、およびCenter100,75 の値に設定されて、Clipイメージのプロパティです。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. イメージの楕円の領域内の部分だけが表示されます。Only the part of the image that is within the area of the ellipse will be displayed. この例からの出力を次の図に示します。The following illustration shows the output from the example.

イメージとクリッピングなしAn Image with and without clipping
イメージ コントロールのクリップに使用される EllipseGeometryAn 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 Geometries

PathGeometryクラス、軽量等価、StreamGeometryクラス、円弧、曲線、および行ので構成される複数の複雑な図形を記述するための手段を提供します。The PathGeometry class and its light-weight equivalent, the StreamGeometry class, provide the means to describe multiple complex figures composed of arcs, curves, and lines.

中心に、PathGeometryのコレクションは、PathFigureという名前は、各図形には、個別の図形がについて説明します、オブジェクト、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. PathFigureはそれ自体から成る 1 つ以上のPathSegment図のセグメントを記述するの各オブジェクトです。Each PathFigure is itself comprised of one or more PathSegment objects, each of which describes a segment of the figure.

多くの種類のセグメントがあります。There are many types of segments.

セグメントの種類Segment Type 説明Description Example
ArcSegment 2 つの点を結ぶ楕円の円弧を作成します。Creates an elliptical arc between two points. 楕円の円弧を作成するCreate an Elliptical Arc.
BezierSegment 2 つの点を結ぶ 3 次ベジエ曲線を作成します。Creates a cubic Bezier curve between two points. 3 次ベジエ曲線を作成するCreate a Cubic Bezier Curve.
LineSegment 2 つの点を結ぶ直性を作成します。Creates a line between two points. PathGeometry で LineSegment を作成するCreate a LineSegment in a PathGeometry
PolyBezierSegment 一続きの 3 次ベジエ曲線を作成します。Creates a series of cubic Bezier curves. 参照してください、PolyBezierSegmentの種類 ページ。See the PolyBezierSegment type page.
PolyLineSegment 一続きの直線を作成します。Creates a series of lines. 参照してください、PolyLineSegmentの種類 ページ。See the PolyLineSegment type page.
PolyQuadraticBezierSegment 一続きの 2 次ベジエ曲線を作成します。Creates a series of quadratic Bezier curves. 参照してください、PolyQuadraticBezierSegmentページ。See the PolyQuadraticBezierSegment page.
QuadraticBezierSegment 2 次ベジエ曲線を作成します。Creates a quadratic Bezier curve. 2 次ベジエ曲線を作成するCreate a Quadratic Bezier Curve.

内のセグメントをPathFigure次のセグメントの始点をされている各セグメントの終了点の 1 つの幾何学図形に結合されます。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. StartPointのプロパティ、PathFigure最初のセグメントを描画する元となるポイントを指定します。The StartPoint property of a PathFigure specifies the point from which the first segment is drawn. 後続の各セグメントは、前のセグメントの終点から始まります。Each subsequent segment starts at the end point of the previous segment. などの垂直線がから10,5010,150設定で定義されていることができます、StartPointプロパティを10,50を作成して、LineSegmentで、Pointプロパティの設定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.

次の例では、単純なPathGeometry、1 つから成るPathFigureで、LineSegment使用して、表示、Path要素。The following example creates a simple PathGeometry comprised of a single PathFigure with a LineSegment and displays it using a Path element. PathFigureオブジェクトのStartPointに設定されている10,20LineSegmentの終点で定義された100,130です。The PathFigure object's StartPoint is set to 10,20 and a LineSegment is defined with an end point of 100,130. 次の図は、PathGeometryこの例で作成します。The following illustration shows the PathGeometry created by this example.

LineGeometryA LineGeometry
単一の LineSegment を含む PathGeometryA 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

この例を前はLineGeometry例です。It is worth contrasting this example with the preceding LineGeometry example. 使用する構文、PathGeometryは、単純なを使用するよりもはるかに詳細LineGeometryを使用する方が簡単にし、LineGeometryの冗語構文が、ここでは、クラス、PathGeometryにより、非常に複雑で複雑な幾何学的領域。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.

複雑なジオメトリの組み合わせを使用して作成できますPathSegmentオブジェクト。More complex geometries can be created by using a combination of PathSegment objects.

次の例では、 BezierSegmentLineSegment、およびArcSegment図形を作成します。The next example uses a BezierSegment, a LineSegment, and an ArcSegment to create shape. 例では、まずを作成、3 次ベジエ曲線は 4 つのポイントを定義することで、: 終点、前のセグメントの終了点は、始点 (Point3) と 2 つのコントロール ポイント (Point1Point2)。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). 3 次ベジエ曲線の 2 つの制御点は磁石のように動作し、本来は直線になる部分を制御点の方へ引き寄せ、曲線を生成します。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. 最初の制御点Point1、先頭に影響を与える曲線の部分です。 2 番目の制御点Point2、曲線の終了部分に影響します。The first control point, Point1, affects the beginning portion of the curve; the second control point, Point2, affects the ending portion of the curve.

この例で追加し、 LineSegment、上記の終了点の間で描画されるBezierSegmentで指定された地点をそれに先行するそのLineSegmentプロパティです。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.

この例で追加し、 ArcSegment、上記の終点からが描画されるLineSegmentで指定された地点をそのPointプロパティです。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. この例では、円弧の x 半径と y 半径も指定します (Size)、回転角度 (RotationAngle)、結果として得られる円弧の角度は大きさべきかを示すフラグ (IsLargeArc)、および、円弧が描画される方向を示す値 (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). この例で作成した図形を次の図に示します。The following illustration shows the shape created by this example.

PathGeometryA PathGeometry
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

複数を使用して、さらに複雑なジオメトリを作成することができますPathFigure内のオブジェクトは、PathGeometryです。Even more complex geometries can be created by using multiple PathFigure objects within a PathGeometry.

次の例を作成、 PathGeometry 、2 つPathFigureオブジェクト、複数含まれている各PathSegmentオブジェクト。The following example creates a PathGeometry with two PathFigure objects, each of which contains multiple PathSegment objects. PathFigure上の例とPathFigureで、PolyLineSegmentQuadraticBezierSegment使用されます。The PathFigure from the above example and a PathFigure with a PolyLineSegment and a QuadraticBezierSegment are used. APolyLineSegment点の配列で定義された、QuadraticBezierSegmentが管理ポイントと終了ポイントで定義されてです。A PolyLineSegment is defined with an array of points and the QuadraticBezierSegment is defined with a control point and an end point. この例で作成した図形を次の図に示します。The following illustration shows the shape created by this example.

PathGeometryA PathGeometry
複数の図形を使用する PathGeometryA 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

同様に、PathGeometryクラス、StreamGeometry曲線を円弧、および行を含む可能性のある複雑な幾何学図形を定義します。Like the PathGeometry class, a StreamGeometry defines a complex geometric shape that may contain curves, arcs, and lines. 異なり、PathGeometryの内容、StreamGeometryデータ バインディング、アニメーション、または変更をサポートしていません。Unlike a PathGeometry, the contents of a StreamGeometry do not support data binding, animation, or modification. 使用して、StreamGeometry複合ジオメトリを記述する必要がある場合は、サポートするオーバーヘッドのデータ バインディング、アニメーション、または変更しません。Use a StreamGeometry when you need to describe a complex geometry but do not want the overhead of supporting data binding, animation, or modification. その効率のため、StreamGeometryクラスは、装飾を記述するための適切な選択です。Because of its efficiency, the StreamGeometry class is a good choice for describing adorners.

例については、「方法 : StreamGeometry を使用して図形を作成する」をご覧ください。For an example, see Create a Shape Using a StreamGeometry.

パス マークアップ構文Path Markup Syntax

PathGeometryStreamGeometryサポートの種類、Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML)属性構文は特殊な一連の移動を使用して、コマンドを描画します。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. 詳しくは、「パス マークアップ構文」をご覧ください。For more information, see Path Markup Syntax.

複合ジオメトリComposite Geometries

使用して複合ジオメトリ オブジェクトを作成する、 GeometryGroupCombinedGeometry、または、静的なを呼び出すことによってGeometryメソッドCombineです。Composite geometry objects can be created using a GeometryGroup, a CombinedGeometry, or by calling the static Geometry method Combine.

  • CombinedGeometryオブジェクトおよびCombineメソッドが 2 つのジオメトリで定義される領域を結合するブール演算を実行します。The CombinedGeometry object and the Combine method performs a Boolean operation to combine the area defined by two geometries. Geometry 領域がオブジェクトは破棄されません。Geometry objects that have no area are discarded. 2 つしかGeometry(ただし、これら 2 つのジオメトリは、複合ジオメトリもあります)、オブジェクトを組み合わせることができます。Only two Geometry objects can be combined (although these two geometries may also be composite geometries).

  • GeometryGroupクラスは一緒になったものを作成、Geometryせず、その領域を組み合わせることが含まれているオブジェクトします。The GeometryGroup class creates an amalgamation of the Geometry objects it contains without combining their area. 任意の数のGeometryオブジェクトに追加することができます、GeometryGroupです。Any number of Geometry objects can be added to a GeometryGroup. 例については、「方法 : 複合図形を作成する」をご覧ください。For an example, see Create a Composite Shape.

使用して、結合操作は実行されないためGeometryGroupオブジェクトが使用する場合よりパフォーマンス上の利点を提供CombinedGeometryオブジェクトまたはCombineメソッドです。Because they do not perform a combine operation, using GeometryGroup objects provides performance benefits over using CombinedGeometry objects or the Combine method.

結合したジオメトリCombined Geometries

前のセクションが記載されている、CombinedGeometryオブジェクトおよびCombineメソッドが含まれているジオメトリで定義される領域を結合します。The preceding section mentioned the CombinedGeometry object and the Combine method combine the area defined by the geometries they contain. GeometryCombineMode列挙体は、ジオメトリを結合する方法を指定します。The GeometryCombineMode enumeration specifies how the geometries are combined. 値は、使用可能なGeometryCombineModeプロパティには: UnionIntersectExclude、およびXorです。The possible values for the GeometryCombineMode property are: Union, Intersect, Exclude, and Xor.

次の例で、CombinedGeometry共用体の組み合わせモードで定義されています。In the following example, a CombinedGeometry is defined with a combine mode of Union. 両方Geometry1Geometry250 センター オフセットを含むが、同じの半径の円として定義されます。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>

和集合結合モードの結果Results of the Union combine mode

次の例で、CombinedGeometryの組み合わせモードで定義されたXorです。In the following example, a CombinedGeometry is defined with a combine mode of Xor. 両方Geometry1Geometry250 センター オフセットを含むが、同じの半径の円として定義されます。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>

Xor 結合モードの結果Results of the Xor combine mode

その他の例については、「方法 : 複合図形を作成する」と「方法 : 結合したジオメトリを作成する」をご覧ください。For additional examples, see Create a Composite Shape and Create a Combined Geometry.

Freezable 機能Freezable Features

継承しているため、Freezableクラス、Geometryクラスがいくつかの特別な機能を提供:Geometryオブジェクトとして宣言できますXAML リソースを向上させるのには読み取り専用に、複数のオブジェクト間で共有パフォーマンスが複製され、スレッド セーフです。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. によって提供されるさまざまな機能の詳細についてはFreezable、オブジェクトを参照してください、 Freezable オブジェクトの概要です。For more information about the different features provided by Freezable objects, see the Freezable Objects Overview.

その他のジオメトリ機能Other Geometry Features

Geometryクラスには、次などの便利なユーティリティ メソッドも用意されています。The Geometry class also provides useful utility methods, such as the following:

参照してください、Geometryクラスのメソッドの完全な一覧についてはします。See the Geometry class for a complete listing of its methods.

関連項目See Also

Geometry
PathGeometry
Path
GeometryDrawing
2D グラフィックスとイメージング2D Graphics and Imaging
パス マークアップ構文Path Markup Syntax
方法トピックHow-to Topics
アニメーションの概要Animation Overview
WPF での図形と基本描画の概要Shapes and Basic Drawing in WPF Overview
Drawing オブジェクトの概要Drawing Objects Overview