VB.Net Tutorial/2D Graphics/TranslateTransform — различия между версиями

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

Текущая версия на 15:55, 26 мая 2010

Global transformation

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

  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)
       Dim g As Graphics = Me.CreateGraphics()
       g.Clear(Me.BackColor)
       Dim bluePen As New Pen(Color.Blue, 2)
       Dim pt1 As New Point(10, 10)
       Dim pt2 As New Point(20, 20)
       Dim lnColors As Color() = {Color.Black, Color.Red}
       Dim rect1 As New Rectangle(10, 10, 15, 15)
       Dim lgBrush1 As New LinearGradientBrush(rect1, Color.Blue, Color.Green, LinearGradientMode.BackwardDiagonal)
       Dim lgBrush As New LinearGradientBrush(pt1, pt2, Color.Red, Color.Green)
       lgBrush.LinearColors = lnColors
       lgBrush.GammaCorrection = True
       g.FillRectangle(lgBrush, 150, 0, 50, 100)
       g.DrawEllipse(bluePen, 0, 0, 100, 50)
       g.FillEllipse(lgBrush1, 300, 0, 100, 100)
       g.ScaleTransform(1, 0.5F)
       g.TranslateTransform(50, 0, MatrixOrder.Append)
       g.RotateTransform(30.0F, MatrixOrder.Append)
       g.FillEllipse(lgBrush1, 300, 0, 100, 100)
       g.RotateTransform(15.0F, MatrixOrder.Append)
       g.FillRectangle(lgBrush, 150, 0, 50, 100)
       g.RotateTransform(15.0F, MatrixOrder.Append)
       g.DrawEllipse(bluePen, 0, 0, 100, 50)
       lgBrush1.Dispose()
       lgBrush.Dispose()
       bluePen.Dispose()
       g.Dispose()
 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>

Local transformation

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

  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)
       Dim g As Graphics = Me.CreateGraphics()
       g.Clear(Me.BackColor)
       Dim path As New GraphicsPath
       path.AddEllipse(50, 50, 100, 150)
       path.AddLine(20, 20, 200, 20)
       Dim bluePen As New Pen(Color.Blue, 2)
       Dim X As New Matrix
       X.Rotate(30)
       X.Translate(50.0F, 0)
       path.Transform(X)
       g.DrawRectangle(Pens.Green, 200, 50, 100, 100)
       g.DrawLine(Pens.Green, 30, 20, 200, 20)
       g.DrawPath(bluePen, path)
       bluePen.Dispose()
       path.Dispose()
       g.Dispose()
 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>

Restore the saved transformation

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

  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)
     Dim trans As Matrix = e.Graphics.Transform
     For i As Integer = 5 To 90 Step 5
         e.Graphics.Transform = trans
         e.Graphics.RotateTransform(i, 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>

Transform and restore

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

  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(150, 150, MatrixOrder.Append)
     For i As Integer = 5 To 30 Step 5
         Dim graphics_state As GraphicsState = e.Graphics.Save()
         e.Graphics.RotateTransform(i, MatrixOrder.Prepend)
         e.Graphics.DrawRectangle(New Pen(Color.Black, 0), -1, -1, 2, 2)
         e.Graphics.Restore(graphics_state)
     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>