Ruotare un rombo in una DrawingArea: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
Riga 1: Riga 1:
Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una ''DrawingArea''.
Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una ''DrawingArea''.
  Private DrawingArea1 As DrawingArea
Private DrawingArea1 As DrawingArea
  Private Tmr As Timer
  Private Tmr As Timer
  Private Const ScalaRaggio As Float = 0.2    <FONT Color=gray>' ''Scala del raggio (dimensione del Rombo)''</font>
  Private Const ScalaRaggio As Float = 0.2    <FONT Color=gray>' ''Scala del raggio (dimensione del Rombo)''</font>

Versione attuale delle 18:48, 10 ago 2025

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