Ruotare un arco in una DrawingArea
Vai alla navigazione
Vai alla ricerca
Mostriamo un possibile codice Nota1 per ottenere la rotazione intorno al proprio asse centrale di un arco di cerchio (il centro di rotazione è posto sulla corda dell'arco), disegnato in una DrawingArea.
La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera.
' Il fulcro di Translate agisce da vortice. (L'arco ruota a seconda di dove esso si pone nel vortice: in questo caso al centro).
Private x As Float ' Memorizza l'inizio dell'arco.
Private y As Float ' Idem
Private iAlt As Integer ' Memorizza l'altezza dell'arco.
Private iLarg As Integer ' Memorizza la larghezza dell'arco.
Private fAngolo As Float ' Memorizza i gradi dell'angolo.
Private fSopra1 As Float ' Memorizza la posizione di partenza orizzontale della rotazione.
Private fSopra2 As Float ' Memorizza la posizione di partenza verticale della rotazione.
Private fSotto1 As Float ' Memorizza la posizione di arrivo orizzontale della rotazione.
Private fSotto2 As Float ' Memorizza la posizione di arrivo verticale della rotazione.
Public Sub Form_Open()
Me.Center
attivaDisegno()
End
Public Sub da_Draw()
iLarg = 200
iAlt = 200
' Posiziona l'angolo al centro dell'area di disegno, così come le misure di partenza e di arrivo;
' e siccome l'angolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza dell'angolo:
x = CFloat((da.W / 2) - (iLarg / 2))
y = CFloat((da.H / 2) - (iAlt / 2))
' In questa dimostrazione il fulcro (vortice) è sempre il centro dell'area di disegno:
fSopra1 = CFloat((da.W / 2))
fSopra2 = CFloat(da.H / 2)
fSotto1 = CFloat(- (da.W / 2))
fSotto2 = CFloat(- (da.H / 2))
With Paint
' Vortice:
.Translate(fSopra1, fSopra2)
.Rotate(Rad(fAngolo))
.Translate(fSotto1, fSotto2)
.Ellipse(x, y, iLarg, iAlt, Rad(180), Rad(180), True)
.Stroke
.End
End With
End
Public Sub attivaDisegno()
da.Clear
da.Refresh
End
Public Sub Form_KeyPress()
Select Case Key.Code
Case Key.Up
fAngolo += 1
If fAngolo = 361 Then fAngolo = 1
attivaDisegno()
Case Key.Down
fAngolo -= 1
If fAngolo = -361 Then fAngolo = -1
attivaDisegno()
End Select
End
Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso.
attivaDisegno()
End
Nota
[1] Il codice, presente in questa pagina, è tratto - con modifiche ed integrazioni - da analogo codice suggerito dal membro Gianluigi del forum di gambas-it.org .