Ruotare un rombo in una DrawingArea

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca

Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una DrawingArea.

 Private DrawingArea1 As DrawingArea
Private Tmr As Timer
Private Const ScalaRaggio As Float = 0.2     ' Scala del raggio (dimensione del Rombo)
Private Rotazione As Float                   ' Angolo di rotazione in radianti


Public Sub Form_Open()

 With Me
   .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .Background = Color.Lighter(Color.Yellow)
 End With

 Tmr = New Timer As "Tmr"
 Tmr.Delay = 30             ' circa 33 FPS
 Tmr.Start()

End


Public Sub DrawingArea1_Draw()

 Dim cx As Float = DrawingArea1.W / 2
 Dim cy As Float = DrawingArea1.H / 2
 Dim w As Float = DrawingArea1.W * 0.4
 Dim h As Float = DrawingArea1.H * 0.3
 Dim r As Float = 5

 Dim points As New PointF[4]
 Dim i As Integer

 Dim basePoints As New PointF[4]
 basePoints[0] = New PointF(0, -h / 2)
 basePoints[1] = New PointF(w / 2, 0)
 basePoints[2] = New PointF(0, h / 2)
 basePoints[3] = New PointF(-w / 2, 0)

 For i = 0 To 3
   Dim xRot As Float = basePoints[i].X * Cos(Rotazione) - basePoints[i].Y * Sin(Rotazione)
   Dim yRot As Float = basePoints[i].X * Sin(Rotazione) + basePoints[i].Y * Cos(Rotazione)
   points[i] = New PointF(cx + xRot, cy + yRot)
 Next

 With Paint
' Disegna il rombo:
 .Brush = Paint.Color(Color.Black)
 .LineWidth = 2

 .MoveTo(points[0].X, points[0].Y)
 For i = 1 To 3
   .LineTo(points[i].X, points[i].Y)
 Next
 .LineTo(points[0].X, points[0].Y)
 .Stroke

' Disegna il punto nero al centro:
 .Ellipse(cx - r, cy - r, 2 * r, 2 * r)
 .Fill
 End With

End