Ruotare un cerchio disegnato in una DrawingArea
Da Gambas-it.org - Wikipedia.
Versione del 3 ott 2015 alle 18:49 di Vuott (Discussione | contributi)
Mostriamo un possibile codice Nota1 per ottenere la rotazione intorno al proprio asse centrale di un cerchio, disegnato in una DrawingArea.
Nell'esempio la rotazione del cerchio potrà essere notata attraverso visualizzazione della rotazione del suo raggio. La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera.
' Il fulcro di Translate agisce da vortice. Private x As Float ' Memorizza l'inizio del cerchio. Private y As Float ' Idem Private iAlt As Integer ' Memorizza l'altezza del cerchio. Private iLarg As Integer ' Memorizza la larghezza del cerchio. 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 ' L'angolo di rotazione è posto 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(360), Rad(360), 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 un analogo codice suggerito dal membro Gianluigi del forum di gambas-it.org .