Megosztás a következőn keresztül:


Geometria áttekintése

Ez az áttekintés azt ismerteti, hogyan használható a Windows Presentation Foundation (WPF) Geometry osztályok az alakzatok leírására. Ez a témakör a Geometry objektumok és Shape elemek közötti különbségeket is ismerteti.

Mi az a geometria?

A Geometry osztály és az abból származtatott osztályok, például EllipseGeometry, PathGeometryés CombinedGeometrylehetővé teszik a 2D alakzatok geometriája leírását. Ezeknek a geometriai leírásoknak számos felhasználási módja van, ilyen például a képernyőre festeni kívánt alakzat definiálása, vagy a találattesztelési és a clip-régiók definiálása. Akár geometriát is használhat egy animációs útvonal definiálásához.

Geometry objektumok lehetnek egyszerűek, például téglalapok és körök, vagy összetettek, amelyeket két vagy több geometriai objektumból hoztak létre. Összetettebb geometriák hozhatók létre a PathGeometry és StreamGeometry osztályokkal, amelyek lehetővé teszik az ívek és görbék leírását.

Mivel a Geometry egy Freezabletípusa, a Geometry objektumok számos különleges funkciót biztosítanak: deklarálhatók erőforrásokként, meg lehet osztani több objektum között, írásvédetté tehetők a teljesítmény javítása érdekében, klónozhatók és szálbiztossá tehetők. Az Freezable objektumok által biztosított különböző funkciókról további információt a Fagyasztható objektumok áttekintésecímű témakörben talál.

Geometriák és alakzatok

A Geometry és a Shape osztály hasonlónak tűnik abban, hogy mindkettő kétdimenziós alakzatokat ír le (például EllipseGeometry és Ellipse összehasonlítása), de vannak fontos különbségek.

Az Geometry osztály például a Freezable osztálytól örököl, míg a Shape osztály a FrameworkElementörökli. Mivel ezek elemek, Shape objektumok megjeleníthetik magukat, és részt vehetnek az elrendezési rendszerben, míg Geometry objektumok nem.

Bár Shape objektumok könnyebben használhatók, mint Geometry objektumok, Geometry objektumok sokoldalúbbak. Bár egy Shape objektum 2D-s ábrák megjelenítésére szolgál, egy Geometry objektum használható a 2D-s ábrák geometriai régiójának meghatározására, a kivágáshoz szükséges régió meghatározására vagy egy régió meghatározására az találatteszteléshez, például.

Az útvonal alakja

Az egyik Shape, a Path osztály, valójában egy Geometry-t használ annak tartalmának leírására. A DataPath tulajdonságának Geometry beállításával és Fill és Stroke tulajdonságainak beállításával megjelenítheti a Geometry.

Geometriát használó gyakori tulajdonságok

Az előző szakaszokban említettük, hogy a geometriai objektumok különböző célokra használhatók más objektumokkal, például rajzalakzatokkal, animálással és kivágással. Az alábbi táblázat több olyan osztályt sorol fel, amelyek Geometry objektumot használó tulajdonságokkal rendelkeznek.

típus Ingatlan
DoubleAnimationUsingPath PathGeometry
DrawingGroup ClipGeometry
GeometryDrawing Geometry
Path Data
UIElement Clip

Egyszerű geometriatípusok

Az összes geometria alaposztálya az absztrakt Geometryosztály. A Geometry osztályból származó osztályok nagyjából három kategóriába sorolhatók: egyszerű geometriák, útvonalgeometriák és összetett geometriák.

Az egyszerű geometriai osztályok közé tartoznak a LineGeometry, a RectangleGeometryés a EllipseGeometry, és alapszintű geometriai alakzatok, például vonalak, téglalapok és körök létrehozására szolgálnak.

  • A LineGeometry a sor kezdőpontjának és a végpontnak a megadásával határozzuk meg.

  • A RectangleGeometry egy Rect szerkezettel van definiálva, amely meghatározza a relatív pozícióját, valamint magasságát és szélességét. A RadiusX és RadiusY tulajdonságok beállításával lekerekített téglalapot hozhat létre.

  • A EllipseGeometry-t egy középpont, egy x sugár és egy y sugár határozza meg. Az alábbi példák bemutatják, hogyan hozhat létre egyszerű geometriákat a rendereléshez és a kivágáshoz.

Ezek az alakzatok, valamint az összetettebb alakzatok PathGeometry vagy geometriai objektumok összevonásával hozhatók létre, de ezek az osztályok egyszerűbb módot biztosítanak ezeknek az alapszintű geometriai alakzatoknak a létrehozására.

Az alábbi példa bemutatja, hogyan hozhat létre és jeleníthet meg LineGeometry. Ahogy korábban már említettük, egy Geometry objektum nem tudja megrajzolni magát, ezért a példa egy Path alakzatot használ a vonal megjelenítéséhez. Mivel egy vonalnak nincs területe, a FillPath tulajdonságának beállítása nem lenne hatással; ehelyett csak a Stroke és StrokeThickness tulajdonságok vannak megadva. Az alábbi ábrán a példa kimenete látható.

LineGeometry
Egy LineGeometry, amely (10,20)-tól (100,130)-ig van húzva.

<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

A következő példa bemutatja, hogyan hozhat létre és jeleníthet meg EllipseGeometry. A példákban a Center a EllipseGeometry-hez van beállítva a 50,50 ponthoz, és mind az x, mind az y sugarat 50értékre állították, amely 100 átmérőjű kört hoz létre. Az ellipszis belső része úgy van színezve, hogy egy értéket adunk a Path elem Fill tulajdonságának, ebben az esetben Gold. Az alábbi ábrán a példa kimenete látható.

EllipseGeometry
Egy EllipseGeometry rajzolva (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

Az alábbi példa bemutatja, hogyan hozhat létre és jeleníthet meg RectangleGeometry. A téglalap pozícióját és méreteit egy Rect szerkezet határozza meg. A pozíció 50,50, a magasság és a szélesség pedig 25, ami négyzetet hoz létre. Az alábbi ábrán a példa kimenete látható.

Téglalapgeometria
50,50-nél rajzolt Téglalapgeometria

<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

Az alábbi példa bemutatja, hogyan használható egy EllipseGeometry a kép klipterületeként. Egy Image objektum úgy van definiálva, hogy Width értéke 200, és Height értéke 150. Egy EllipseGeometry 100 RadiusX értékkel, 75 RadiusY értékkel és 100,75 Center értékkel a kép Clip tulajdonságára van állítva. Csak a kép azon része jelenik meg, amely az ellipszis területén belül van. Az alábbi ábrán a példa kimenete látható.

Kép kivágással és kivágás nélkül
A Képvezérlő kivágásához használt EllipseGeometry

<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

Útvonalgeometriák

A PathGeometry osztály és annak egyszerűsített megfelelője, a StreamGeometry osztály több összetett, ívekből, görbékből és vonalakból álló ábra leírására szolgál.

A PathGeometry középpontjában PathFigure objektumok gyűjteménye áll, így elnevezve, mivel minden ábra egy különálló alakzatot ír le a PathGeometry. Minden PathFigure egy vagy több PathSegment objektumból áll, amelyek mindegyike az ábra egy szegmensét írja le.

Számos szegmenstípus létezik.

Szegmens típusa Leírás példa
ArcSegment Két pont között háromliptikus ívet hoz létre. Háromliptikus ívlétrehozása.
BezierSegment Két pont között létrehoz egy köb alakú Bezier-görbét. Köbös Bezier-görbe létrehozása.
LineSegment Két pont közötti vonalat hoz létre. Egy vonalsegment létrehozása a PathGeometry-ben
PolyBezierSegment Köb alakú Bezier-görbék sorozatát hozza létre. Tekintse meg a PolyBezierSegment típuslapot.
PolyLineSegment Egy sor vonalat hoz létre. Tekintse meg a PolyLineSegment típuslapot.
PolyQuadraticBezierSegment Kvadratikus Bezier-görbék sorozatát hozza létre. Lásd a PolyQuadraticBezierSegment lapot.
QuadraticBezierSegment Kvadratikus Bezier-görbét hoz létre. Kvadratikus Bézier-görbelétrehozása.

A PathFigure belüli szegmensek egyetlen geometriai alakzatba vannak kombinálva, és az egyes szegmensek végpontja a következő szegmens kezdőpontja. A StartPointPathFigure tulajdonsága határozza meg azt a pontot, ahonnan az első szegmenst lerajzolták. Minden további szegmens az előző szegmens végpontján kezdődik. Például egy 10,50 és 10,150 közötti függőleges vonalat úgy lehet meghatározni, hogy a StartPoint tulajdonságot 10,50 értékre állítjuk, és létrehozunk egy LineSegment-et, amelynek a Point tulajdonsága 10,150-ra van beállítva.

Az alábbi példa egy egyszerű PathGeometry-t készít, amely egyetlen PathFigure-ből áll LineSegment-vel, és egy Path elemmel jeleníti meg. A(z) PathFigure objektum StartPoint-je 10,20-re van állítva, és egy LineSegment van definiálva a 100,130végponttal. Az alábbi ábrán a példa által létrehozott PathGeometry látható.

LineGeometry
Egy PathGeometry, amely egyetlen LineSegmentet tartalmaz.

<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

Ezt a példát érdemes az előző LineGeometry példával összevetni. A PathGeometry szintaxisa sokkal részletesebb, mint egy egyszerű LineGeometry, és ebben az esetben érdemesebb lehet a LineGeometry osztályt használni, de a PathGeometry részletes szintaxisa rendkívül bonyolult és összetett geometriai régiókat tesz lehetővé.

Összetettebb geometriák PathSegment objektumok kombinációjával hozhatók létre.

A következő példa egy BezierSegment, egy LineSegmentés egy ArcSegment használ alakzat létrehozásához. Az első példa egy köb alakú Bezier-görbét hoz létre négy pont definiálásával: egy kezdőpontot, amely az előző szegmens végpontja, egy végpontot (Point3) és két vezérlőpontot (Point1 és Point2). A köbös Bezier-görbe két vezérlőpontja mágnesként viselkedik, és olyan részeket vonz, amelyek egyébként egyenes vonalként hatnak magukra, és görbét hoznak létre. Az első vezérlőpont( Point1) a görbe első részét érinti; a második vezérlőpont( Point2) hatással van a görbe záró részére.

A példa ezután hozzáad egy LineSegment, amely az azt megelőző BezierSegment végpontja és a LineSegment tulajdonsága által megadott pont között lesz rajzolva.

A példa ezután hozzáad egy ArcSegment-t, amely az előző LineSegment végpontjától a Point tulajdonság által megadott pontig van húzva. A példa az arc x- és y sugarát (Size), a forgatási szöget (RotationAngle), az eredményként kapott ív szögét jelző jelölőt (IsLargeArc) és az ív rajzolásának irányát (SweepDirection) jelző értéket is megadja. Az alábbi ábrán a példa által létrehozott alakzat látható.

Egy ívet tartalmazó PathGeometry.
Útvonalgeometria

<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

Még összetettebb geometriák hozhatók létre több PathFigure objektum használatával egy PathGeometry.

Az alábbi példa egy PathGeometry hoz létre két PathFigure objektummal, amelyek mindegyike több PathSegment objektumot tartalmaz. A fenti példában szereplő PathFigure-t és egy PathFigure-vel és PolyLineSegment-mal rendelkező QuadraticBezierSegment-et használnak. A PolyLineSegment ponttömbbel van definiálva, a QuadraticBezierSegment pedig egy vezérlőponttal és egy végponttal. Az alábbi ábrán a példa által létrehozott alakzat látható.

Egy PathGeometry ívvel, amely két PathFigure objektumot tartalmaz.
A PathGeometry több ábrával

<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

A PathGeometry osztályhoz hasonlóan a StreamGeometry is meghatároz egy összetett geometriai alakzatot, amely görbéket, íveket és vonalakat tartalmazhat. A PathGeometryellentétben a StreamGeometry tartalma nem támogatja az adatkötést, az animációt és a módosítást. Összetett geometria leírásához használja a StreamGeometry-t, ha nem szeretne adatkötés, animáció vagy módosítás támogatásával járó többletterhet. A hatékonysága miatt a StreamGeometry osztály jó választás a díszítő elemek leírásához.

Példa: Alakzat létrehozása StreamGeometryhasználatával.

Útvonaljelölő szintaxis

A PathGeometry és a StreamGeometry típus támogatja az XAML attribútumszintaxisát az áthelyezési és rajzparancsok speciális sorozatával. További információkért lásd: Útvonaljelölő Nyelvtan.

Összetett geometriák

Az összetett geometriai objektumok GeometryGroup, CombinedGeometryvagy statikus Geometry metódus meghívásával hozhatók létre Combine.

  • A CombinedGeometry objektum és a Combine metódus logikai műveletet hajt végre a két geometria által meghatározott terület egyesítése érdekében. Geometry terület nélküli objektumok el lesznek vetve. Csak két Geometry objektum kombinálható (bár ez a két geometria összetett geometriák is lehetnek).

  • A GeometryGroup osztály a benne található Geometry objektumok összesítését hozza létre a területük kombinálása nélkül. Bármilyen számú Geometry objektum adható hozzá egy GeometryGroup-hez. Példa: Összetett alakzat létrehozása.

Mivel nem hajtanak végre egyesítési műveletet, GeometryGroup objektumok használata teljesítménybeli előnyöket biztosít CombinedGeometry objektumok vagy a Combine metódus használatával szemben.

Kombinált geometriák

Az előző szakasz megemlítette a CombinedGeometry objektumot, és a Combine metódus egyesíti az általuk tartalmazott geometriák által meghatározott területet. A GeometryCombineMode enumerálás határozza meg a geometriák kombinálását. A GeometryCombineMode tulajdonság lehetséges értékei a következők: Union, Intersect, Excludeés Xor.

Az alábbi példában egy CombinedGeometry-t egyesítési módban definiálják. A Geometry1 és a Geometry2 is azonos sugarú körökként vannak definiálva, de a középpontok eltolása 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>

Unió Egyesítő Mód Eredményei

Az alábbi példában egy CombinedGeometryXorkombinálási móddal van definiálva. A Geometry1 és a Geometry2 is azonos sugarú körökként vannak definiálva, de a középpontok eltolása 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 kombinációs mód eredményei

További példákért lásd: Összetett alakzat létrehozása és Kombinált geometrialétrehozása.

Fagyasztható funkciók

Mivel az Freezable osztálytól öröklődik, a Geometry osztály számos különleges funkciót biztosít: a Geometry objektumok deklarálhatók XAML-erőforrásokként, megoszthatók több objektum között, írásvédetté tehetők a teljesítmény javítása érdekében, klónozhatók és szálbiztossá tehetők. Az Freezable objektumok által biztosított különböző funkciókról további információt a Fagyasztható objektumok áttekintésecímű témakörben talál.

Egyéb geometriai funkciók

A Geometry osztály hasznos segédprogramokat is kínál, például a következőket:

A metódusok teljes listáját a Geometry osztályban talál.

Lásd még