VB.Net Tutorial/2D Graphics/RotateTransform

Материал из VB Эксперт
Перейти к: навигация, поиск

RotateTransform and draw Ellipse

<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class RotateTransformEllipse

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class Public Class Form1

   Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
       Dim canvas As Graphics = e.Graphics
       Dim counter As Integer
       Const numberOfLobes As Integer = 20
       Dim atomPen As Pen = New Pen(Color.Blue, 2)
       Dim sizeFactor As Integer = Button2.ClientSize.Width \ 2
       Dim lobeLength As Integer = sizeFactor * 8 \ 10
       Dim lobeWidth As Integer = lobeLength \ 4
       canvas.TranslateTransform(sizeFactor, sizeFactor)
       For counter = 1 To numberOfLobes
           canvas.RotateTransform(360 / numberOfLobes)
           canvas.DrawEllipse(atomPen, -lobeLength, -lobeWidth, lobeLength * 2, lobeWidth * 2)
       Next counter
   End Sub

End Class

<Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Class Form1

   Inherits System.Windows.Forms.Form
   "Form overrides dispose to clean up the component list.
   <System.Diagnostics.DebuggerNonUserCode()> _
   Protected Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing AndAlso components IsNot Nothing Then
           components.Dispose()
       End If
       MyBase.Dispose(disposing)
   End Sub
   "Required by the Windows Form Designer
   Private components As System.ruponentModel.IContainer
   "NOTE: The following procedure is required by the Windows Form Designer
   "It can be modified using the Windows Form Designer.  
   "Do not modify it using the code editor.
   <System.Diagnostics.DebuggerStepThrough()> _
   Private Sub InitializeComponent()
       Me.Panel1 = New System.Windows.Forms.Panel
       Me.Button2 = New System.Windows.Forms.Button
       Me.SuspendLayout()
       "
       "Panel1
       "
       Me.Panel1.Location = New System.Drawing.Point(56, 32)
       Me.Panel1.Name = "Panel1"
       Me.Panel1.Size = New System.Drawing.Size(368, 400)
       Me.Panel1.TabIndex = 0
       "
       "Form1
       "
       Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
       Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
       Me.ClientSize = New System.Drawing.Size(479, 284)
       Me.Controls.Add(Me.Panel1)
       Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
       Me.MaximizeBox = False
       Me.Text = "Special Effects"
       Me.ResumeLayout(False)
   End Sub
   Friend WithEvents Panel1 As System.Windows.Forms.Panel
   Friend WithEvents Button2 As System.Windows.Forms.Button

End Class</source>

RotateTransform With MatrixOrder.Prepend

<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class RotateTransformWithMatrixOrderPrepend

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class public class Form1

 Inherits System.Windows.Forms.Form
 Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
     e.Graphics.ScaleTransform(90, 90, MatrixOrder.Append)
     e.Graphics.TranslateTransform( _
         Me.ClientRectangle.Width \ 2, _
         Me.ClientRectangle.Height \ 2, _
         MatrixOrder.Append)
     For i As Integer = 5 To 90 Step 5
         e.Graphics.RotateTransform(5, MatrixOrder.Prepend)
         e.Graphics.DrawRectangle(New Pen(Color.Black, 0), -1, -1, 2, 2)
     Next i
 End Sub
 Public Sub New()
   MyBase.New()
   Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
   Me.ClientSize = New System.Drawing.Size(292, 273)
   Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
 End Sub

End Class</source>

Scale first, then Transform, then Rotate

<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class ScaleFirstThenTransformThenRotate

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class public class Form1

 Inherits System.Windows.Forms.Form
 Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
       e.Graphics.ScaleTransform(30, 30, MatrixOrder.Append)
       e.Graphics.TranslateTransform(150, 60, MatrixOrder.Append)
       e.Graphics.RotateTransform(30, MatrixOrder.Append)
       DrawArrow(e.Graphics, HatchStyle.Cross)
   End Sub
   Private Sub DrawArrow(ByVal gr As Graphics, ByVal hatch_style As HatchStyle)
       Dim pts() As Point = { _
           New Point(0, 1), _
           New Point(2, 1), _
           New Point(2, 0), _
           New Point(4, 2), _
           New Point(2, 4), _
           New Point(2, 3), _
           New Point(0, 3) _
       }
       gr.FillPolygon(New HatchBrush(hatch_style, Color.Black, Color.White), pts)
       gr.DrawPolygon(New Pen(Color.Black, 0), pts)
   End Sub
 Public Sub New()
   MyBase.New()
   Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
   Me.ClientSize = New System.Drawing.Size(292, 273)
   Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
 End Sub

End Class</source>