VB.NET-Tipp 0121: Umriss eines GraphicsPath zeichnen und transformieren
von Robert Closheim
Beschreibung
Hier wird am Beispiel eines Zylinders gezeigt, wie man einen Umriss um einen GraphicsPath zeichen kann. Zusätzlich wird eine Transformation vorgenommen.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2008 ' Option Strict: An ' Option Explicit: An ' Option Infer: An ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' - System.Core ' - System.Xml.Linq ' - System.Data.DataSetExtensions ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' - System.Linq ' - System.Xml.Linq ' ' ############################################################################## ' ################################# Form1.vb ################################### ' ############################################################################## Option Explicit On Option Strict On Imports System.Drawing.Drawing2D Public Class Form1 Private myCylinder As New GraphicsPath Private myCap As New GraphicsPath Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.CreatePath() End Sub Private Sub CreatePath() Dim width As Integer = 200 Dim height As Integer = 80 Dim capWidth As Integer = 10 'Der Zylinder wird um den Nullpunkt erstellt 'Dies ist später auch der Drehpunkt Me.myCylinder.AddRectangle(New Rectangle(CInt(width / 2 * -1), _ CInt(height / 2 * -1), width, height)) Me.myCylinder.AddEllipse(New Rectangle( _ CInt(width / 2 * -1 - capWidth / 2), _ CInt(height / 2 * -1), _ capWidth, height)) Me.myCylinder.FillMode = Drawing2D.FillMode.Winding Me.myCap.AddEllipse(New Rectangle(CInt(width / 2 - capWidth / 2), _ CInt(height / 2 * -1), capWidth, height)) End Sub Private Sub Transform() Using m As New Matrix ' Drehen m.Rotate(270, MatrixOrder.Append) ' Vergrössern verkleinern m.Scale(1, 1, MatrixOrder.Append) ' Verschieben m.Translate(200, 200, MatrixOrder.Append) ' Transformation auf die Objecte anwenden Me.myCylinder.Transform(m) Me.myCap.Transform(m) End Using End Sub Private Sub Form1_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint ' Den Pen für die Umrandung erzeugen Using p As New Pen(Color.Black, 3) ' Den Weichzeichner einschalten e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias Me.Transform() ' Die Umrisse der GraphicsPath zeichnen e.Graphics.DrawPath(p, Me.myCylinder) ' Dann die Füllung drüber e.Graphics.FillPath(Brushes.DarkGray, Me.myCylinder) ' Das Selbe in grün e.Graphics.DrawPath(p, Me.myCap) e.Graphics.FillPath(Brushes.Gray, Me.myCap) End Using End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.