Geometriye Genel Bakış

Bu genel bakış, şekilleri açıklamak için Windows Presentation Foundation (WPF) Geometry sınıflarının nasıl kullanılacağını açıklar. Bu konu, nesneler ve Shape öğeler arasındaki Geometry farkları da karşıttır.

Geometri Nedir?

sınıfı Geometry ve öğesinden türetilen , PathGeometryve CombinedGeometrygibi EllipseGeometrysınıflar, bir 2B şeklin geometrisini açıklamanıza olanak tanır. Bu geometrik açıklamaların, ekrana boyanacak bir şekil tanımlama veya isabet testi ve klip bölgelerini tanımlama gibi birçok kullanım alanı vardır. Animasyon yolu tanımlamak için geometri bile kullanabilirsiniz.

Geometry nesneler dikdörtgenler ve daireler gibi basit veya iki veya daha fazla geometri nesnesinden oluşturulmuş bileşik olabilir. Ve sınıfları kullanılarak PathGeometryStreamGeometry daha karmaşık geometriler oluşturulabilir ve bu sayede yayları ve eğrileri tanımlayabilirsiniz.

bir Geometry türü FreezableGeometry olduğundan, nesneler çeşitli özel özellikler sağlar: bunlar kaynak olarak bildirilebilir, birden çok nesne arasında paylaşılabilir, performansı geliştirmek için salt okunur hale getirilebilir, kopyalanabilir ve iş parçacığı güvenli hale getirilebilir. Nesneler tarafından Freezable sağlanan farklı özellikler hakkında daha fazla bilgi için bkz . Freezable Objects Overview.

Geometriler ve Şekiller karşılaştırması

Geometry ve Shape sınıfları, her ikisi de 2B şekilleri (karşılaştırmak EllipseGeometry ve Ellipse örneğin) açıklamak için benzer görünür, ancak önemli farklılıklar vardır.

Biri için, Geometry sınıfı sınıfından FreezableShape devralırken, sınıfı öğesinden FrameworkElementdevralır. Öğeler olduğundan, Shape nesneler kendilerini işleyebilir ve düzen sistemine katılabilir, ancak Geometry nesneler işleyemez.

Nesneler nesnelerden Geometry daha kolay kullanılabilir olsa Shape da, Geometry nesneler daha çok yönlü olur. Bir Shape nesne 2B grafikleri işlemek için kullanılırken, Geometry bir nesne 2B grafiklerin geometrik bölgesini tanımlamak, kırpmak için bir bölge tanımlamak veya örneğin isabet testi için bir bölge tanımlamak için kullanılabilir.

Yol Şekli

Bir Shape, Path sınıfı, içeriğini tanımlamak için aslında kullanır Geometry . ile özelliğini PathGeometry ve Data ve özelliklerini ayarlayarak StrokeFill, bir Geometryişleyebilirsiniz.

GeometriYi Kullanan Ortak Özellikler

Yukarıdaki bölümlerde, Geometri nesnelerinin şekiller çizme, animasyon oluşturma ve kırpma gibi çeşitli amaçlarla diğer nesnelerle birlikte kullanılabildiği belirtildi. Aşağıdaki tabloda, nesne Geometry alan özelliklere sahip çeşitli sınıflar listelenir.

Tür Özellik
DoubleAnimationUsingPath PathGeometry
DrawingGroup ClipGeometry
GeometryDrawing Geometry
Path Data
UIElement Clip

Basit Geometri Türleri

Tüm geometriler için temel sınıf soyut sınıfıdır Geometry. Sınıfından Geometry türetilen sınıflar kabaca üç kategoride gruplandırılabilir: basit geometriler, yol geometrileri ve bileşik geometriler.

Basit geometri sınıfları , RectangleGeometryve EllipseGeometry değerlerini içerir LineGeometryve çizgiler, dikdörtgenler ve daireler gibi temel geometrik şekiller oluşturmak için kullanılır.

  • A LineGeometry , satırın başlangıç noktası ve bitiş noktası belirtilerek tanımlanır.

  • , RectangleGeometry göreli konumunu, yüksekliğini ve genişliğini belirten bir Rect yapı ile tanımlanır. ve RadiusY özelliklerini ayarlayarak RadiusX yuvarlatılmış dikdörtgen oluşturabilirsiniz.

  • bir EllipseGeometry merkez noktası, x yarıçapı ve y yarıçapı ile tanımlanır. Aşağıdaki örneklerde işleme ve kırpma için basit geometrilerin nasıl oluşturulacağı gösterilmektedir.

Aynı şekiller ve daha karmaşık şekiller, geometri nesneleri birlikte birleştirilerek veya PathGeometry kullanılarak oluşturulabilir, ancak bu sınıflar bu temel geometrik şekilleri oluşturmak için daha basit bir araç sağlar.

Aşağıdaki örnekte bir oluşturma ve işleme gösterilmektedir LineGeometry. Daha önce belirtildiği gibi, bir Geometry nesne kendisini çizemez, bu nedenle örnek çizgiyi işlemek için bir Path şekil kullanır. Bir satırın alanı olmadığından özelliğinin Fill ayarlanmasının Path hiçbir etkisi olmaz; bunun yerine yalnızca Stroke ve StrokeThickness özellikleri belirtilir. Aşağıdaki çizimde örnekten elde edilen çıkış gösterilmektedir.

A LineGeometry
(10,20) ile (100.130) arasında bir LineGeometry çizildi

<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

Sonraki örnekte bir oluşturma ve işleme gösterilmektedir EllipseGeometry. Örneklerde öğesinin CenterEllipseGeometry noktası 50,50 , x yarıçapı ve y yarıçapı ise olarak ayarlanır 50ve bu da çapı 100 olan bir daire oluşturur. Üç noktanın iç kısmı, Path öğesinin Fill özelliğine (bu örnekte Gold) bir değer atanarak boyanmıştır. Aşağıdaki çizimde örnekten elde edilen çıkış gösterilmektedir.

An EllipseGeometry
(50,50) konumunda çizilmiş bir EllipseGeometry

<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

Aşağıdaki örnekte bir oluşturma ve işleme gösterilmektedir RectangleGeometry. Dikdörtgenin konumu ve boyutları bir Rect yapı tarafından tanımlanır. Konumu ve 50,50 yüksekliği ve genişliği, kare oluşturan şeklindedir 25. Aşağıdaki çizimde örnekten elde edilen çıkış gösterilmektedir.

A RectangleGeometry
50,50'de çizilen RectangleGeometry

<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

Aşağıdaki örnekte, görüntü EllipseGeometry için küçük resim bölgesi olarak nasıl kullanılacağı gösterilmektedir. Bir Image nesne 200 ve Height 150 ile Width tanımlanır. EllipseGeometryRadiusX Değeri 100, RadiusY değeri 75 ve değeri 100,75 olan bir Center değeri görüntünün özelliğine Clip ayarlanır. Resmin yalnızca üç noktanın içinde yer alan bölümü görüntülenir. Aşağıdaki çizimde örnekten elde edilen çıkış gösterilmektedir.

An Image with and without clipping
Görüntü denetimini kırpmak için kullanılan Bir 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

Yol Geometrileri

PathGeometry sınıfı ve onun hafif eşdeğeri olan StreamGeometry sınıfı, yaylardan, eğrilerden ve çizgilerden oluşan birden çok karmaşık şekli açıklamanın araçlarını sağlar.

Bir PathGeometry öğesinin merkezinde bir nesne koleksiyonu PathFigure bulunur; her şekil içindeki PathGeometryayrık bir şekli açıkladığı için adlandırılmıştır. Her PathFigure biri, şeklin bir kesimini tanımlayan bir veya daha fazla PathSegment nesneden oluşur.

Birçok segment türü vardır.

Segment Türü Tanım Örnek
ArcSegment İki nokta arasında eliptik bir yay oluşturur. Eliptik Yay oluşturun.
BezierSegment İki nokta arasında bir küp Bezier eğrisi oluşturur. Bir Küp Bezier Eğrisi oluşturun.
LineSegment İki nokta arasında bir çizgi oluşturur. PathGeometry İçinde LineSegment Oluşturma
PolyBezierSegment Bir dizi kübik Bezier eğrisi oluşturur. PolyBezierSegment Tür sayfasına bakın.
PolyLineSegment Bir dizi satır oluşturur. PolyLineSegment Tür sayfasına bakın.
PolyQuadraticBezierSegment İkinci dereceden Bezier eğrileri dizisi oluşturur. Sayfaya PolyQuadraticBezierSegment bakın.
QuadraticBezierSegment İkinci dereceden bezier eğrisi oluşturur. İkinci dereceden Bezier Eğrisi oluşturun.

içindeki PathFigure segmentler tek bir geometrik şekilde birleştirilir ve her segmentin bitiş noktası bir sonraki segmentin başlangıç noktası olur. özelliğiPathFigure, StartPoint ilk kesimin çizildiği noktayı belirtir. Sonraki her segment, önceki segmentin bitiş noktasında başlar. Örneğin, öğesinin 10,5010,150 dikey çizgisi, özelliği 10,50 olarak ayarlanarak StartPoint ve özelliği ayarıyla 10,150Point oluşturularak LineSegment tanımlanabilir.

Aşağıdaki örnek, ile LineSegment tek PathFigure bir öğeden oluşan basit PathGeometry bir oluşturur ve bunu bir Path öğe kullanarak görüntüler. nesnesinin PathFigureStartPoint öğesi olarak ayarlanır 10,20 ve LineSegment bitiş noktası 100,130ile tanımlanır. Aşağıdaki çizimde PathGeometry , bu örnek tarafından oluşturulan gösterilmektedir.

A LineGeometry
Tek bir LineSegment içeren PathGeometry

<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

Bu örneği önceki LineGeometry örnekle karşılaştırmaya değer. için PathGeometry kullanılan söz dizimi, basit LineGeometryiçin kullanılandan çok daha ayrıntılıdır ve bu durumda sınıfı kullanmak LineGeometry daha anlamlı olabilir, ancak öğesinin PathGeometry ayrıntılı söz dizimi son derece karmaşık ve karmaşık geometrik bölgelere izin verir.

Nesnelerin bir bileşimi PathSegment kullanılarak daha karmaşık geometriler oluşturulabilir.

Sonraki örnekte, şekil oluşturmak için bir , LineSegmentve bir ArcSegment kullanılırBezierSegment. Örnek ilk olarak dört nokta tanımlayarak bir küp Bezier eğrisi oluşturur: önceki segmentin bitiş noktası olan bir başlangıç noktası, bir bitiş noktası ()Point3 ve iki denetim noktası (Point1 ve Point2). Kübik Bezier eğrisinin iki kontrol noktası mıknatıs gibi davranır, aksi takdirde kendilerine doğru düz bir çizgi olacak parçaları çekerek bir eğri oluşturur. İlk denetim noktası olan Point1, eğrinin başlangıç kısmını, ikinci denetim noktası Point2ise eğrinin bitiş bölümünü etkiler.

Örnek daha sonra, kendisinden önceki BezierSegment bitiş noktası arasına, özelliği tarafından LineSegment belirtilen noktaya çizilen bir LineSegmentekler.

Örnek daha sonra, öncekinin LineSegment bitiş noktasından özelliği tarafından Point belirtilen noktaya çizilen bir ArcSegmentekler. Örnek ayrıca arkın x ve y yarıçapını (Size), döndürme açısını (RotationAngle ), elde edilen yay açısının ne kadar büyük olması gerektiğini belirten bir bayrağı (IsLargeArc ) ve arkın hangi yönde çizildiğini (SweepDirection) gösteren bir değeri belirtir. Aşağıdaki çizimde bu örnek tarafından oluşturulan şekil gösterilmektedir.

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

içinde birden çok PathFigure nesne PathGeometrykullanılarak daha da karmaşık geometriler oluşturulabilir.

Aşağıdaki örnek, her biri birden çok PathSegment nesne içeren iki PathFigure nesne içeren bir PathGeometry oluşturur. PathFigure Yukarıdaki örnekten ve ile PathFigure ile PolyLineSegmentQuadraticBezierSegment ve ile kullanılır. bir PolyLineSegment nokta dizisiyle tanımlanır ve QuadraticBezierSegment bir denetim noktası ve bir bitiş noktası ile tanımlanır. Aşağıdaki çizimde bu örnek tarafından oluşturulan şekil gösterilmektedir.

A PathGeometry with an arc that includes two PathFigure objects.
Birden çok şekilli bir 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>
        
        <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

PathGeometry sınıfı gibi, a StreamGeometry da eğriler, yaylar ve çizgiler içerebilen karmaşık bir geometrik şekil tanımlar. ' PathGeometrynin aksine, içindekiler StreamGeometry veri bağlamayı, animasyonu veya değişikliği desteklemez. Karmaşık bir geometriyi tanımlamanız gerektiğinde ancak veri bağlama, animasyon veya değişiklik desteğinin ek yükünü istemediğiniz durumlarda kullanın StreamGeometry . Verimliliği nedeniyle sınıf, StreamGeometry donatıcıları tanımlamak için iyi bir seçimdir.

Örnek için bkz . StreamGeometry Kullanarak Şekil Oluşturma.

Yol Biçimlendirme Sözdizimi

PathGeometry ve StreamGeometry türleri, özel bir taşıma ve çizim komutları serisi kullanarak Genişletilebilir Uygulama biçimlendirme dili (XAML) öznitelik söz dizimini destekler. Daha fazla bilgi için bkz . Yol İşaretlemi Söz Dizimi.

Bileşik Geometriler

Bileşik geometri nesneleri, CombinedGeometrykullanılarak GeometryGroupveya statik Geometry yöntemi Combineçağrılarak oluşturulabilir.

  • CombinedGeometry nesnesi ve Combine yöntemi, iki geometri tarafından tanımlanan alanı birleştirmek için bir Boole işlemi gerçekleştirir. Geometry alanı olmayan nesneler atılır. Yalnızca iki Geometry nesne birleştirilebilir (ancak bu iki geometri bileşik geometri de olabilir).

  • sınıfı, GeometryGroup alanlarını birleştirmeden içerdiği nesnelerin bir birleşimini Geometry oluşturur. öğesine herhangi bir Geometry sayıda nesne eklenebilir GeometryGroup. Örnek için bkz . Bileşik Şekil Oluşturma.

Birleştirme işlemi gerçekleştirmedikleri için, nesneleri kullanmakGeometryGroup, nesneleri veya Combine yöntemini kullanmaya CombinedGeometry göre performans avantajları sağlar.

Birleşik Geometriler

Önceki bölümde nesneden CombinedGeometry bahsedildi ve Combine yöntemi, içerdikleri geometriler tarafından tanımlanan alanı bir araya getiriyor. Numaralandırma, GeometryCombineMode geometrilerin nasıl birleştirildiğini belirtir. Özelliği için GeometryCombineMode olası değerler şunlardır: Union, Intersect, Excludeve Xor.

Aşağıdaki örnekte, birleşim CombinedGeometry modu ile tanımlanmıştır. hem hem de Geometry1 aynı Geometry2 yarıçapın daireleri olarak tanımlanır, ancak merkezler 50'ye kadar kaydırılır.

<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

Aşağıdaki örnekte, birleştirme CombinedGeometry modu Xorile tanımlanmıştır. hem hem de Geometry1 aynı Geometry2 yarıçapın daireleri olarak tanımlanır, ancak merkezler 50'ye kadar kaydırılır.

<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

Ek örnekler için bkz . Bileşik Şekil Oluşturma ve Birleşik Geometri Oluşturma.

Dondurulabilir Özellikler

sınıfından Freezable devralındığından, Geometry sınıfı birkaç özel özellik sağlar: Geometry nesneler XAML Kaynakları olarak bildirilebilir, birden çok nesne arasında paylaşılabilir, performansı geliştirmek için salt okunur hale getirilebilir, kopyalanabilir ve iş parçacığı güvenli hale getirilebilir. Nesneler tarafından Freezable sağlanan farklı özellikler hakkında daha fazla bilgi için bkz . Freezable Objects Overview.

Diğer Geometri Özellikleri

Geometry sınıfı, aşağıdakiler gibi yararlı yardımcı program yöntemleri de sağlar:

Yöntemlerinin Geometry tam listesi için sınıfına bakın.

Ayrıca bkz.