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.
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.
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.
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.
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,150
vlastnosti .
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.
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
<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.
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.
Objekt CombinedGeometry a Combine metoda provádí logickou operaci, která zkombinuje oblast definovanou dvěma geometriemi. Geometry objekty, které nemají žádnou oblast, se zahodí. Zkombinovat lze pouze dva Geometry objekty (i když tyto dvě geometrie mohou být také složené geometrie).
Třída GeometryGroup vytvoří amalgamaci Geometry objektů, které obsahuje bez kombinování jejich oblasti. Do objektu GeometryGrouplze přidat libovolný počet Geometry objektů . Příklad najdete v tématu Vytvoření složeného obrazce.
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>
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>
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í:
FillContains - Určuje, zda geometrie obsahuje jinou Geometry.
StrokeContains - Určuje, zda tah určitého Geometry bodu obsahuje.
Podívejte se na Geometry třídu s úplným výpisem jejích metod.
Viz také
.NET Desktop feedback