Bagikan melalui


Gambaran Umum Geometri

Gambaran umum ini menjelaskan cara menggunakan kelas Windows Presentation Foundation (WPF) Geometry untuk menggambarkan bentuk. Topik ini juga membedakan perbedaan antara Geometry objek dan Shape elemen.

Apa itu Geometri?

Kelas Geometry dan kelas yang berasal darinya, seperti EllipseGeometry, , PathGeometrydan CombinedGeometry, memungkinkan Anda untuk menggambarkan geometri bentuk 2D. Deskripsi geometris ini memiliki banyak kegunaan, seperti menentukan bentuk untuk melukis ke layar atau menentukan wilayah hit-test dan klip. Anda bahkan dapat menggunakan geometri untuk menentukan jalur animasi.

Geometry objek bisa sederhana, seperti persegi panjang dan lingkaran, atau komposit, dibuat dari dua objek geometri atau lebih. Geometri yang lebih kompleks dapat dibuat dengan menggunakan PathGeometry kelas dan StreamGeometry , yang memungkinkan Anda untuk menggambarkan busur dan kurva.

Karena adalah Geometry jenis Freezable, Geometry objek menyediakan beberapa fitur khusus: objek dapat dideklarasikan sebagai sumber daya, dibagikan di antara beberapa objek, dibuat baca-saja untuk meningkatkan performa, kloning, dan dibuat aman utas. Untuk informasi selengkapnya tentang berbagai fitur yang disediakan oleh Freezable objek, lihat Gambaran Umum Objek Freezable.

Geometri vs. Bentuk

Kelas Geometry dan Shape tampak mirip karena keduanya menggambarkan bentuk 2D (bandingkan EllipseGeometry dan Ellipse misalnya), tetapi ada perbedaan penting.

Untuk satu, Geometry kelas mewarisi dari Freezable kelas sementara Shape kelas mewarisi dari FrameworkElement. Karena merupakan elemen, Shape objek dapat merender dirinya sendiri dan berpartisipasi dalam sistem tata letak, sementara Geometry objek tidak dapat.

Meskipun Shape objek lebih mudah digunakan daripada Geometry objek, Geometry objek lebih serbaguna. Shape Saat objek digunakan untuk merender grafik 2D, Geometry objek dapat digunakan untuk menentukan wilayah geometrik untuk grafik 2D, menentukan wilayah untuk kliping, atau menentukan wilayah untuk pengujian hit, misalnya.

Bentuk Jalur

Satu Shape, Path kelas , benar-benar menggunakan Geometry untuk menggambarkan kontennya. Dengan mengatur properti dengan dan mengatur properti dan Stroke , Fill Anda dapat merender Geometry.GeometryPathData

Properti Umum yang Mengambil Geometri

Bagian sebelumnya menyebutkan bahwa objek Geometri dapat digunakan dengan objek lain untuk berbagai tujuan, seperti menggambar bentuk, animasi, dan kliping. Tabel berikut ini mencantumkan beberapa kelas yang memiliki properti yang mengambil Geometry objek.

Jenis Properti
DoubleAnimationUsingPath PathGeometry
DrawingGroup ClipGeometry
GeometryDrawing Geometry
Path Data
UIElement Clip

Jenis Geometri Sederhana

Kelas dasar untuk semua geometri adalah kelas Geometryabstrak . Kelas yang berasal dari Geometry kelas dapat dikelompokkan secara kasar menjadi tiga kategori: geometri sederhana, geometri jalur, dan geometri komposit.

Kelas geometri sederhana termasuk LineGeometry, , RectangleGeometrydan EllipseGeometry digunakan untuk membuat bentuk geometris dasar, seperti garis, persegi panjang, dan lingkaran.

  • LineGeometry ditentukan dengan menentukan titik awal garis dan titik akhir.

  • RectangleGeometry didefinisikan dengan Rect struktur yang menentukan posisi relatifnya dan tinggi dan lebarnya. Anda dapat membuat persegi panjang bulat dengan mengatur RadiusX properti dan RadiusY .

  • EllipseGeometry Ditentukan oleh titik tengah, radius x, dan radius y. Contoh berikut menunjukkan cara membuat geometri sederhana untuk penyajian dan untuk kliping.

Bentuk yang sama ini, serta bentuk yang lebih kompleks, dapat dibuat menggunakan PathGeometry atau dengan menggabungkan objek geometri bersama-sama, tetapi kelas-kelas ini menyediakan cara yang lebih sederhana untuk menghasilkan bentuk geometris dasar ini.

Contoh berikut menunjukkan cara membuat dan merender LineGeometry. Seperti disebutkan sebelumnya, Geometry objek tidak dapat menggambar dirinya sendiri, sehingga contoh menggunakan Path bentuk untuk merender garis. Karena garis tidak memiliki area, pengaturan Fill properti tidak Path akan berpengaruh; sebaliknya, hanya Stroke properti dan StrokeThickness yang ditentukan. Ilustrasi berikut menunjukkan output dari contoh.

A LineGeometry
LineGeometry yang diambil dari (10.20) hingga (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

Contoh berikutnya menunjukkan cara membuat dan merender EllipseGeometry. Contoh mengatur Center dari EllipseGeometry diatur ke titik 50,50 dan radius x dan radius y keduanya diatur ke 50, yang membuat lingkaran dengan diameter 100. Interior elips dicat dengan menetapkan nilai ke properti Isi elemen Jalur, dalam hal Goldini . Ilustrasi berikut menunjukkan output dari contoh.

An EllipseGeometry
EllipseGeometry digambar pada (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

Contoh berikut menunjukkan cara membuat dan merender RectangleGeometry. Posisi dan dimensi persegi panjang didefinisikan oleh Rect struktur. Posisinya adalah 50,50 dan tinggi dan lebar keduanya 25, yang menciptakan persegi. Ilustrasi berikut menunjukkan output dari contoh.

A RectangleGeometry
RectangleGeometry digambar pada 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

Contoh berikut menunjukkan cara menggunakan EllipseGeometry sebagai wilayah klip untuk gambar. Objek Image didefinisikan dengan Width 200 dan Height 150. EllipseGeometry Dengan RadiusX nilai 100, RadiusY nilai 75, dan Center nilai 100.75 diatur ke Clip properti gambar. Hanya bagian gambar yang berada di dalam area elips yang akan ditampilkan. Ilustrasi berikut menunjukkan output dari contoh.

An Image with and without clipping
EllipseGeometry yang digunakan untuk mengklip kontrol Gambar

<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

Geometri Jalur

Kelas PathGeometry dan kelasnya yang setara dengan ringan, StreamGeometry kelas ini, menyediakan sarana untuk menggambarkan beberapa angka kompleks yang terdiri dari busur, kurva, dan garis.

Intinya PathGeometry adalah kumpulan PathFigure objek, jadi dinamai karena setiap gambar menggambarkan bentuk diskrit dalam PathGeometry. Masing-masing terdiri dari satu atau beberapa PathSegment objek, yang masing-masing PathFigure menggambarkan segmen gambar.

Ada banyak jenis segmen.

Jenis Segmen Deskripsi Contoh
ArcSegment Membuat busur elips di antara dua titik. Buat Busur Elips.
BezierSegment Membuat kurva Bezier kubik di antara dua titik. Buat Kurva Bezier Kubik.
LineSegment Membuat garis di antara dua titik. Membuat LineSegment di PathGeometry
PolyBezierSegment Membuat serangkaian kurva Bezier kubik. PolyBezierSegment Lihat halaman jenis.
PolyLineSegment Membuat serangkaian garis. PolyLineSegment Lihat halaman jenis.
PolyQuadraticBezierSegment Membuat serangkaian kurva Bezier kuadrat. Lihat halaman.PolyQuadraticBezierSegment
QuadraticBezierSegment Membuat kurva Bezier kuadrat. Buat Kurva Bezier Kuadrat.

Segmen dalam digabungkan PathFigure menjadi satu bentuk geometris dengan titik akhir setiap segmen menjadi titik awal segmen berikutnya. Properti StartPoint menentukan PathFigure titik dari mana segmen pertama digambar. Setiap segmen berikutnya dimulai di titik akhir segmen sebelumnya. Misalnya, garis vertikal dari 10,50 ke 10,150 dapat didefinisikan dengan mengatur StartPoint properti ke 10,50 dan membuat LineSegment dengan Point pengaturan properti .10,150

Contoh berikut membuat sederhana PathGeometry yang terdiri dari satu PathFigure dengan LineSegment dan menampilkannya menggunakan Path elemen. Objek PathFigureStartPoint diatur ke 10,20 dan LineSegment didefinisikan dengan titik 100,130akhir . Ilustrasi berikut menunjukkan yang PathGeometry dibuat oleh contoh ini.

A LineGeometry
PathGeometry yang berisi satu 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

Ada baiknya mengkontraskan contoh ini dengan contoh sebelumnya LineGeometry . Sintaks yang digunakan untuk PathGeometry jauh lebih verbose daripada yang digunakan untuk sederhana LineGeometry, dan mungkin lebih masuk akal untuk menggunakan LineGeometry kelas dalam hal ini, tetapi sintaks verbose memungkinkan PathGeometry wilayah geometris yang sangat rumit dan kompleks.

Geometri yang lebih kompleks dapat dibuat dengan menggunakan kombinasi PathSegment objek.

Contoh berikutnya menggunakan BezierSegment, , LineSegmentdan untuk ArcSegment membuat bentuk. Contoh pertama kali membuat kurva Bezier kubik adalah dengan menentukan empat poin: titik awal, yang merupakan titik akhir dari segmen sebelumnya, titik akhir (Point3), dan dua titik kontrol (Point1 dan Point2). Dua titik kontrol kurva Bezier kubik berulah seperti magnet, menarik bagian dari apa yang sebaliknya akan menjadi garis lurus menuju diri mereka sendiri, menghasilkan kurva. Titik kontrol pertama, Point1, memengaruhi bagian awal kurva; titik kontrol kedua, Point2, memengaruhi bagian akhir kurva.

Contoh kemudian menambahkan LineSegment, yang digambar di antara titik akhir sebelumnya BezierSegment yang mendahuluinya ke titik yang ditentukan oleh propertinya LineSegment .

Contoh kemudian menambahkan ArcSegment, yang digambar dari titik akhir sebelumnya LineSegment ke titik yang ditentukan oleh propertinya Point . Contoh ini juga menentukan sudut x dan y-radius busur (Size), sudut rotasi (RotationAngle), bendera yang menunjukkan seberapa besar sudut busur yang dihasilkan harus (IsLargeArc), dan nilai yang menunjukkan arah mana busur digambar (SweepDirection). Ilustrasi berikut menunjukkan bentuk yang dibuat oleh contoh ini.

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

Geometri yang lebih kompleks dapat dibuat dengan menggunakan beberapa PathFigure objek dalam PathGeometry.

Contoh berikut membuat PathGeometry dengan dua PathFigure objek, yang masing-masing berisi beberapa PathSegment objek. PathFigure Dari contoh di atas dan PathFigure dengan dan PolyLineSegment yang QuadraticBezierSegment digunakan. PolyLineSegment didefinisikan dengan array titik dan QuadraticBezierSegment didefinisikan dengan titik kontrol dan titik akhir. Ilustrasi berikut menunjukkan bentuk yang dibuat oleh contoh ini.

A PathGeometry with an arc that includes two PathFigure objects.
PathGeometry dengan beberapa gambar

<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 Seperti kelas , mendefinisikan StreamGeometry bentuk geometris kompleks yang mungkin berisi kurva, busur, dan garis. PathGeometryTidak seperti , konten StreamGeometry tidak mendukung pengikatan data, animasi, atau modifikasi. StreamGeometry Gunakan saat Anda perlu menjelaskan geometri yang kompleks tetapi tidak ingin overhead mendukung pengikatan data, animasi, atau modifikasi. Karena efisiensinya, StreamGeometry kelas ini adalah pilihan yang baik untuk menggambarkan pelikat.

Misalnya, lihat Membuat Bentuk Menggunakan StreamGeometry.

Sintaksis Markup Jalur

Jenis PathGeometry dan StreamGeometry mendukung sintaks atribut Extensible Application Markup Language (XAML) menggunakan serangkaian perintah pemindahan dan gambar khusus. Untuk informasi selengkapnya, lihat Sintaks Markup Jalur.

Geometri Komposit

Objek geometri komposit dapat dibuat menggunakan GeometryGroup, , CombinedGeometryatau dengan memanggil metode Combinestatis Geometry .

  • Objek CombinedGeometry dan Combine metode melakukan operasi Boolean untuk menggabungkan area yang ditentukan oleh dua geometri. Geometry objek yang tidak memiliki area dibuang. Hanya dua Geometry objek yang dapat digabungkan (meskipun kedua geometri ini mungkin juga geometri komposit).

  • Kelas GeometryGroup membuat amalgamasi objek yang dikandungnya Geometry tanpa menggabungkan areanya. Sejumlah Geometry objek dapat ditambahkan ke GeometryGroup. Misalnya, lihat Membuat Bentuk Komposit.

Karena mereka tidak melakukan operasi gabungan, menggunakan GeometryGroup objek memberikan manfaat performa daripada menggunakan CombinedGeometry objek atau Combine metode .

Geometri Gabungan

Bagian sebelumnya menyebutkan CombinedGeometry objek dan Combine metode menggabungkan area yang ditentukan oleh geometri yang dikandungnya. Enumerasi GeometryCombineMode menentukan bagaimana geometri digabungkan. Nilai yang GeometryCombineMode mungkin untuk properti adalah: Union, , Intersect, Excludedan Xor.

Dalam contoh berikut, CombinedGeometry didefinisikan dengan mode gabungan Union. Keduanya Geometry1 dan didefinisikan Geometry2 sebagai lingkaran dari radius yang sama, tetapi dengan offset tengah sebesar 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

Dalam contoh berikut, CombinedGeometry didefinisikan dengan mode gabungan .Xor Keduanya Geometry1 dan didefinisikan Geometry2 sebagai lingkaran dari radius yang sama, tetapi dengan offset tengah sebesar 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

Untuk contoh tambahan, lihat Membuat Bentuk Komposit dan Membuat Geometri Gabungan.

Fitur yang Dapat Dibekukan

Karena mewarisi dari Freezable kelas , Geometry kelas menyediakan beberapa fitur khusus: Geometry objek dapat dideklarasikan sebagai Sumber Daya XAML, dibagikan di antara beberapa objek, dibuat baca-saja untuk meningkatkan performa, mengkloning, dan membuat utas aman. Untuk informasi selengkapnya tentang berbagai fitur yang disediakan oleh Freezable objek, lihat Gambaran Umum Objek Freezable.

Fitur Geometri Lainnya

Kelas ini Geometry juga menyediakan metode utilitas yang berguna, seperti berikut:

Geometry Lihat kelas untuk daftar lengkap metodenya.

Baca juga