Ruotare un arco in una DrawingArea
Vai alla navigazione
Vai alla ricerca
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 DrawingAra, potremo utilizzare il seguente codice: Nota1
' Il fulcro di Translate agisce da vortice. l'arco ruoterà a seconda di dove esso si pone nel vortice.'
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
' Se la rotazione è centrale, 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
.Begin(da)
' 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 btSinistra_Click()
' Ogni volta che si agisce sul tasto incrementa il valore di un grado:
' (positivo = senso antiorario)
fAngolo += 1
If fAngolo = 405 Then fAngolo = 1
attivaDisegno()
End
Public Sub btDestra_Click()
' Ogni volta che si agisce sul tasto decrementa il valore di un grado:
' (negativo = senso orario)
fAngolo -= 1
If fAngolo = -405 Then fAngolo = -1
attivaDisegno()
End
Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso.
attivaDisegno()
End
Nota
[1] I codici, presenti in questa pagina, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro Gianluigi del forum di gambas-it.org e del membro Shell del forum gambas-es.org .