Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0121: Umriss eines GraphicsPath zeichnen und transformieren

 von 

Beschreibung

Hier wird am Beispiel eines Zylinders gezeigt, wie man einen Umriss um einen GraphicsPath zeichen kann. Zusätzlich wird eine Transformation vorgenommen.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

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:

Download des Beispielprojektes [10,53 KB]

' 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.