Přehled geometrie

Tento přehled popisuje použití tříd WPF (Windows Presentation Foundation) Geometry k popisu obrazců. Toto téma také kontrastuje rozdíly mezi Geometry objekty a Shape prvky.

Co je geometrie?

Geometry Třída a třídy, které jsou z ní odvozeny, například EllipseGeometry, PathGeometrya CombinedGeometryumožňují popsat geometrii 2D obrazce. Tyto geometrické popisy mají mnoho použití, například definování obrazce k vykreslení na obrazovku nebo definování oblastí hit-test a klip. K definování dráhy animace můžete použít i geometrii.

Geometry objekty můžou být jednoduché, například obdélníky a kruhy nebo složené objekty vytvořené ze dvou nebo více objektů geometrie. Složitější geometrie je možné vytvořit pomocí PathGeometry tříd, StreamGeometry které umožňují popsat oblouky a křivky.

Geometry Vzhledem k tomu, že je typ Freezable, Geometry objekty poskytují několik speciálních funkcí: mohou být deklarovány jako prostředky sdílené mezi více objekty, aby se zlepšil výkon, klonování a vytvoření vlákna-bezpečné. Další informace o různých funkcích poskytovaných Freezable objekty naleznete v části Mrazitelné objekty Přehled.

Geometrie vs. obrazce

Shape Třídy Geometry se zdají být podobné v tom, že popisují 2D obrazce (například porovnávané EllipseGeometry a Ellipse například), ale existují důležité rozdíly.

Pro jednu Geometry zdědí třída z Freezable třídy zatímco Shape třída dědí z FrameworkElement. Vzhledem k tomu, že jsou prvky, Shape mohou se objekty vykreslit a účastnit se systému rozložení, zatímco Geometry objekty nemohou.

I když Shape jsou objekty snadněji použitelné než Geometry objekty, Geometry jsou objekty všestrannější. Zatímco se Shape objekt používá k vykreslení 2D grafiky, Geometry lze objekt použít k definování geometrické oblasti pro 2D grafiku, definování oblasti pro výřez nebo definování oblasti pro testování hitů, například.

Obrazec cesty

Jedna Shape, Path třída, ve skutečnosti používá Geometry k popisu jeho obsahu. Nastavením vlastnosti Path vlastnosti a Geometry nastavením jeho Fill a Stroke vlastností můžete vykreslit Geometry.Data

Běžné vlastnosti, které přebírají geometrii

Předchozí části zmínily, že geometrické objekty lze použít s jinými objekty pro různé účely, jako jsou kreslení obrazců, animace a výřez. Následující tabulka uvádí několik tříd, které mají vlastnosti, které přebírají Geometry objekt.

Type Vlastnost
DoubleAnimationUsingPath PathGeometry
DrawingGroup ClipGeometry
GeometryDrawing Geometry
Path Data
UIElement Clip

Jednoduché typy geometrie

Základní třída pro všechny geometrie je abstraktní třída Geometry. Třídy odvozené z Geometry třídy mohou být zhruba seskupeny do tří kategorií: jednoduché geometrie, geometrie cest a složené geometrie.

Jednoduché třídy geometrie zahrnují LineGeometry, RectangleGeometrya EllipseGeometry slouží k vytváření základních geometrických obrazců, jako jsou čáry, obdélníky a kruhy.

  • A LineGeometry je definován zadáním počátečního bodu čáry a koncového bodu.

  • A RectangleGeometry je definována se strukturou Rect , která určuje jeho relativní pozici a výšku a šířku. Zaokrouhlený obdélník můžete vytvořit nastavením RadiusX a RadiusY vlastností.

  • Hodnota EllipseGeometry je definována středovým bodem, poloměrem x a poloměrem y. Následující příklady ukazují, jak vytvořit jednoduché geometrie pro vykreslování a výřez.

Tyto stejné obrazce, stejně jako složitější obrazce, lze vytvořit pomocí PathGeometry objektu geometrie nebo jejich kombinováním, ale tyto třídy poskytují jednodušší způsob pro vytváření těchto základních geometrických obrazců.

Následující příklad ukazuje, jak vytvořit a vykreslit .LineGeometry Jak jsme si poznamenali dříve, Geometry objekt se nemůže nakreslit sám, takže v příkladu se k vykreslení čáry používá Path obrazec. Vzhledem k tomu, že čára nemá žádnou oblast, Fill nastavení vlastnosti Path by nemělo žádný vliv. Místo toho jsou zadány Stroke pouze vlastnosti a StrokeThickness vlastnosti. Následující obrázek znázorňuje výstup z příkladu.

A LineGeometry
LineGeometrie vytažená z (10 20) do (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

Další příklad ukazuje, jak vytvořit a vykreslit EllipseGeometry. Příklady nastaví CenterEllipseGeometry na bod 50,50 a x-poloměr a poloměr y jsou nastaveny na 50, což vytvoří kruh s průměrem 100. Interiér tří teček je malován přiřazením hodnoty k elementu Path Fill vlastnost, v tomto případě Gold. Následující obrázek znázorňuje výstup z příkladu.

An EllipseGeometry
EllipseGeometry nakreslená na (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

Následující příklad ukazuje, jak vytvořit a vykreslit .RectangleGeometry Pozice a rozměry obdélníku jsou definovány strukturou Rect . Pozice je 50,50 a výška a šířka jsou oba 25, které vytvoří čtverec. Následující obrázek znázorňuje výstup z příkladu.

A RectangleGeometry
RectangleGeometry nakreslený na 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

Následující příklad ukazuje, jak použít EllipseGeometry jako oblast klipu pro obrázek. Objekt Image je definován s Width 200 a Height 150. RadiusX Hodnota EllipseGeometry 100, RadiusY hodnota 75 a Center hodnota 100 75 je nastavena na Clip vlastnost obrázku. Zobrazí se pouze část obrázku, která je v oblasti tří teček. Následující obrázek znázorňuje výstup z příkladu.

An Image with and without clipping
EllipseGeometry použité k oříznutí ovládacího prvku Obrázek

<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

Geometrie cest

Třída PathGeometry a její odlehčený ekvivalent, StreamGeometry třída, poskytují prostředky pro popis více složitých obrázků složených z oblouků, křivek a čar.

V srdci objektu PathGeometry je kolekce PathFigure objektů, takže pojmenované, protože každý obrázek popisuje samostatný tvar v objektu PathGeometry. Každý PathFigure se skládá z jednoho nebo více PathSegment objektů, z nichž každý popisuje segment obrázku.

Existuje mnoho typů segmentů.

Typ segmentu Popis Příklad
ArcSegment Vytvoří eliptický oblouk mezi dvěma body. Vytvoření eliptického oblouku
BezierSegment Vytvoří krychlovou bezierovou křivku mezi dvěma body. Vytvořte krychlovou bezierovou křivku.
LineSegment Vytvoří čáru mezi dvěma body. Vytvoření LineSegment v PathGeometry
PolyBezierSegment Vytvoří řadu krychlových bezierových křivek. Podívejte se na PolyBezierSegment stránku typu.
PolyLineSegment Vytvoří řadu řádků. Podívejte se na PolyLineSegment stránku typu.
PolyQuadraticBezierSegment Vytvoří řadu kvadratických bezierových křivek. Podívejte se na PolyQuadraticBezierSegment stránku.
QuadraticBezierSegment Vytvoří kvadratickou bezierovou křivku. Vytvořte kvadratickou bezierovou křivku.

Segmenty uvnitř a PathFigure jsou sloučeny do jednoho geometrického tvaru s koncovým bodem každého segmentu, který je počátečním bodem dalšího segmentu. Vlastnost StartPointPathFigure určuje bod, ze kterého je nakreslen první segment. Každý další segment začíná na koncovém bodu předchozího segmentu. Například svislou čáru z 10,50 do 10,150 lze definovat nastavením StartPoint vlastnosti 10,50 na a vytvořením LineSegment vlastnosti s Point nastavením 10,150vlastnosti .

Následující příklad vytvoří jednoduchou PathGeometry složenou z jedné PathFigure s jednou LineSegment a zobrazí ji pomocí elementu Path . Objekt PathFigureStartPoint je nastaven 10,20 na a LineSegment je definován s koncovým bodem 100,130. Následující obrázek znázorňuje PathGeometry vytvořený v tomto příkladu.

A LineGeometry
PathGeometry, která obsahuje jeden 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

Stojí za porovnání tohoto příkladu s předchozím LineGeometry příkladem. Syntaxe použitá pro a PathGeometry je mnohem více podrobná, než která se používá pro jednoduchý LineGeometry, a v tomto případě může být vhodnější použít LineGeometry třídu, ale podrobná syntaxe PathGeometry umožňuje extrémně složité a složité geometrické oblasti.

Složitější geometrie lze vytvořit pomocí kombinace PathSegment objektů.

Další příklad používá k vytvoření obrazce , BezierSegmentaLineSegment.ArcSegment První příklad vytvoří krychlovou bezierovou křivku definováním čtyř bodů: počáteční bod, což je koncový bod předchozího segmentu, koncový bod (Point3) a dva kontrolní body (Point1 a Point2). Dva kontrolní body krychlové bezierové křivky se chovají jako magnety a přitahují části toho, co by jinak bylo přímkou k sobě, a vytváří křivku. První řídicí bod, Point1ovlivňuje počáteční část křivky; druhý řídicí bod, Point2ovlivňuje koncovou část křivky.

Příklad pak přidá , LineSegmentkterý je nakreslen mezi koncový bod předcházející BezierSegment ho k bodu určenému jeho LineSegment vlastností.

Příklad pak přidá , ArcSegmentkterý je nakreslen z koncového bodu předcházejícího LineSegment bodu do bodu určeného jeho Point vlastností. Příklad také určuje arkus x a poloměr y (Size), úhel otočení (RotationAngle), příznak určující, jak velký úhel výsledného oblouku má být (IsLargeArc) a hodnota označující, ve kterém směru je oblouk nakreslen (SweepDirection). Následující obrázek znázorňuje obrazec vytvořený v tomto příkladu.

A PathGeometry with an arc.
A 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

Ještě složitější geometrie lze vytvořit pomocí více PathFigure objektů v rámci objektu PathGeometry.

Následující příklad vytvoří se PathGeometry dvěma PathFigure objekty, z nichž každý obsahuje více PathSegment objektů. Použije se PathFigure z výše uvedeného příkladu PathFigure a s PolyLineSegment a a a.QuadraticBezierSegment A PolyLineSegment je definován s polem bodů a QuadraticBezierSegment je definován s řídicím bodem a koncovým bodem. Následující obrázek znázorňuje obrazec vytvořený v tomto příkladu.

A PathGeometry with an arc that includes two PathFigure objects.
PathGeometry s více obrázky

<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

StreamGeometry

Podobně jako třída PathGeometryStreamGeometry definuje složitý geometrický tvar, který může obsahovat křivky, oblouky a čáry. PathGeometryObsah datové vazby, animace nebo úpravy nepodporuje na rozdíl od obsahuStreamGeometry. StreamGeometry Použijte, když potřebujete popsat složitou geometrii, ale nechcete mít režii na podporu datových vazeb, animací nebo úprav. Vzhledem k její efektivitě StreamGeometry je třída dobrou volbou pro popis adornerů.

Příklad najdete v tématu Vytvoření obrazce pomocí StreamGeometry.

Syntaxe značek cesty

StreamGeometry Typy PathGeometry podporují syntaxi atributu XAML (Extensible Application Markup Language) pomocí speciální řady příkazů pro přesunutí a kreslení. Další informace naleznete v tématu Syntaxe značek cesty.

Složené geometrie

Složené geometrické objekty lze vytvořit pomocí GeometryGroup, nebo CombinedGeometryvoláním statické Geometry metody Combine.

Vzhledem k tomu, že neprovádějí operaci kombinování, použití GeometryGroup objektů poskytuje výhody výkonu Combine při použití CombinedGeometry objektů nebo metody.

Kombinované geometrie

Předchozí část zmínila CombinedGeometry objekt a metodu Combine kombinují oblast definovanou geometriemi, které obsahují. Výčet GeometryCombineMode určuje, jak se geometrie kombinují. Možné hodnoty pro GeometryCombineMode vlastnost jsou: Union, Intersect, Excludea Xor.

V následujícím příkladu je definován s CombinedGeometry kombinačním režimem Sjednocení. Obě Geometry1 a jsou Geometry2 definovány jako kruhy stejného poloměru, ale se středy posunu o 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

V následujícím příkladu je definována CombinedGeometry s kombinačním režimem Xor. Obě Geometry1 a jsou Geometry2 definovány jako kruhy stejného poloměru, ale se středy posunu o 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>

Results of the Xor combine mode

Další příklady najdete v tématu Vytvoření složeného tvaru a vytvoření kombinované geometrie.

Zamrznutelné funkce

Vzhledem k tomu, že dědí z Freezable třídy, Geometry třída poskytuje několik speciálních funkcí: Geometry objekty lze deklarovat jako prostředky XAML, sdílené mezi více objekty, aby se zlepšil výkon, klonování a vytvoření vlákna bezpečné pro čtení. Další informace o různých funkcích poskytovaných Freezable objekty naleznete v části Mrazitelné objekty Přehled.

Další funkce geometrie

Třída Geometry také poskytuje užitečné pomocné metody, například následující:

Podívejte se na Geometry třídu s úplným výpisem jejích metod.

Viz také