Makale Özeti

Bu yazımızda GDI+ sınıf kütüphanesinin yine önemli nesnelerinden biri olan ve işlev olarak çizimleri ve şekilleri kendi içinde depolayan "GraphicsPaht" Sınıfını anlatmaya çalışacağım.

Makale

GDI+ 4  (GraphicPath Sınıfı)

    Bu yazımızda GDI+  sınıf kütüphanesinin yine önemli nesnelerinden biri olan ve işlev olarak çizimleri ve şekilleri kendi içinde depolayan "GraphicsPaht" Sınıfını anlatmaya çalışacağım.

     Bahsettiğim gibi bu sınıfın amacı oluşturulmuş grafik nesnelerini Kendi içinde depolamak ve çizim kontrolünü sağlamaktır.Böylelikle bir şekli kodla depolamış ve gerektiği yerde kullanmış oluruz. İsterseniz bir örnekle konuyu açıklayalım.

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim gr As Graphics = e.Graphics

Dim p As New Pen(Color.Red, 2)

Dim pt1 As New Point(10, 10)

Dim pt2 As New Point(100, 10)

Dim pt3 As New Point(10, 50)

Dim pt4 As New Point(100, 50)

gr.DrawLine(p, pt1, pt2)

gr.DrawLine(p, pt3, pt4)

gr.Dispose()

End Sub

 

     Yukarıdaki kodu derlersek Form üzerine çizilmiş paralel iki çizgi elde ederiz. Şimdi bu çizgileri "GraphicsPath" sınıfı ile Çizelim....

Dim gr As Graphics = e.Graphics

Dim p As New Pen(Color.Red, 2)

Dim pa As New GraphicsPath()

Dim pt1 As New Point(10, 10)

Dim pt2 As New Point(100, 10)

Dim pt3 As New Point(10, 50)

Dim pt4 As New Point(100, 50)

pa.StartFigure()

pa.AddLine(pt1, pt2)

pa.StartFigure()

pa.AddLine(pt3, pt4)

gr.DrawPath(p, pa)

pa.Dispose()

gr.Dispose()

 

 Şekil olarak her iki kodu da derlersek aynı sonucu alırız. Şekilde görüldüğü gibi paralel 2 çizgi...

    Önemli olan bu iki çizim şekli arasındaki farkı anlamaktır. Yani niçin "GraphicsPath" sınıfı kullanılır? Gelin bu soruyu cevaplamaya çalışalım...

    İlk kodu incelerseniz iki ayrı çizgiyi birbirinden bağımsız olarak çizdik. Ama "GraphichPaht" sınfı ile "Graphics" nesnesine çizdirdiğimiz çizim paralel iki çizgi çizen bir nesnedir. Yani birbirine Paralel iki çizgiyi hafızalamış olduk. Bu şekilde çizim şeklini bir nesne üzerinde depolamaya yarayan bir sınıftır.

     Şimdi gelin bu nesnenin özelliklerini inceleyelim:

Aslında bu nesnenin methodları bir çoğu "Graphics"  nesnesiyle  aynıdır.  Farklı özelliklerini aşağıdaki tabloda açıklamaya çalıştım.

Method

Açıklamaı

StartFigure   Bu method  nesne içine depolanacak standart grafik nesneleri için bir başlangıç noktası teşkil eder. Bunun ardına eklenen tüm nesneler  noktasal olara birbirine bağlanır.
CloseFigure  Bir önceki methodla başlanan depolama işlemini sonlandırır. Bundan sonra depolanacak nesneler bu nesne ile çizilecek şekilin bağımsız bir parçasını temsil eder.
AddLine(pt1, pt2)  Bu metot ile line nesnesi depolanır.
AddRectangle(rect)  Bu method ile Rectangle nesnesi depolanır.
Add...  Burada size bir ipucu vermek istiyorum. Hangi şekli eklemek istiyorsanız onun bir Add methodu vardır. Yukarıda açıkladığım "Addline" gibi...

    Bu konuyla ilgili son bir örnek vererek yazımı noktalamak istiyorum. Bir Küp çizmek için bu örnekten daha uygun bir zemin oluşmazdı herhalde... Şimdi yapacağımız örnekte İki dikdörtgen çiziyoruz ve bunları birbirine Paralel olarak konumlandırıp Köşelerinden birleştirmek suretiyle Küp elde ediyoruz...

Aşağıdaki Kodu inceleyelim...

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim gr As Graphics = e.Graphics

Dim pa As New GraphicsPath()

pa.StartFigure()

pa.AddRectangle(New Rectangle(20, 20, 200, 150))

pa.AddRectangle(New Rectangle(50, 50, 200, 150))

pa.AddLine(20, 20, 50, 50)

pa.StartFigure()

pa.AddLine(220, 20, 250, 50)

pa.StartFigure()

pa.AddLine(220, 170, 250, 200)

pa.StartFigure()

pa.AddLine(20, 170, 50, 200)

Dim p As New Pen(Color.Red, 3)

gr.DrawPath(p, pa)

pa.Dispose()

p.Dispose()

End Sub

 

Kodu Derlersek Aşağıdaki Şekli elde ederiz...

 Şimdilik bu kadar. Bir sonraki yazımızda görüşmek üzere eleştirileriniz, yorumlarınız için teşekkürler.

Tarık Gökhan Kızılırmak
tarikgokhan@hotmail.com