Differenze tra le versioni di "Ruotare un cerchio disegnato in una DrawingArea"
Da Gambas-it.org - Wikipedia.
Riga 3: | Riga 3: | ||
<BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera. | <BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera. | ||
− | <FONT Color=gray>' '''''Il fulcro | + | <FONT Color=gray>' '''''Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza'''''</font> |
+ | Private da As DrawingArea | ||
Private x As Float <FONT Color=gray>' ''Memorizza l'inizio del cerchio.''</font> | Private x As Float <FONT Color=gray>' ''Memorizza l'inizio del cerchio.''</font> | ||
Private y As Float <FONT Color=gray>' ''Idem''</font> | Private y As Float <FONT Color=gray>' ''Idem''</font> | ||
Riga 18: | Riga 19: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
− | Me.Center | + | With Me |
− | + | .Center | |
− | With da | + | .Arrangement = Arrange.Fill |
+ | End With | ||
+ | |||
+ | With da = New DrawingArea(Me) As "da" | ||
.x = 0 | .x = 0 | ||
.Y = 0 | .Y = 0 | ||
− | |||
− | |||
End With | End With | ||
'''End''' | '''End''' | ||
− | + | ||
− | |||
'''Public''' Sub da_Draw() | '''Public''' Sub da_Draw() | ||
Riga 60: | Riga 61: | ||
'''End''' | '''End''' | ||
− | + | ||
− | |||
'''Public''' Sub Form_KeyPress() | '''Public''' Sub Form_KeyPress() | ||
Riga 76: | Riga 76: | ||
'''End''' | '''End''' | ||
− | + | ||
− | |||
'''Public''' Sub Form_Resize() <FONT Color=gray>' ''Con questo evento se cambia la dimensione del Form, il disegna non va perso.''</font> | '''Public''' Sub Form_Resize() <FONT Color=gray>' ''Con questo evento se cambia la dimensione del Form, il disegna non va perso.''</font> | ||
Versione delle 18:05, 9 nov 2021
Mostriamo un possibile codice [Nota 1] per ottenere la rotazione intorno al proprio asse centrale di un cerchio, disegnato in una DrawingArea. [Nota 2]
Nell'esempio la rotazione del cerchio potrà essere notata attraverso visualizzazione della rotazione del suo raggio e soprattutto mediante la visualizzazione della colorazione della sua circonferenza.
La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera.
' Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza Private da As DrawingArea 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() With Me .Center .Arrangement = Arrange.Fill End With With da = New DrawingArea(Me) As "da" .x = 0 .Y = 0 End With End Public Sub da_Draw() Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red] Dim f As Float[] = [0, 0.34, 0.67, 1] iLarg = 200 iAlt = 200 ' L'angolo di rotazione è posto al centro dell'area di disegno, così come le misure di partenza e di arrivo. 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 .Brush = .LinearGradient(0, 20, 15, 0, c, f) ' Vortice: .Translate(fSopra1, fSopra2) .Rotate(Rad(fAngolo)) .Translate(fSotto1, fSotto2) .LineWidth = 2.0 .Ellipse(x, y, iLarg, iAlt, Rad(360), Rad(360), True) .Stroke .End End With End Public Sub Form_KeyPress() Select Case Key.Code Case Key.Up fAngolo += 1 If fAngolo = 361 Then fAngolo = 1 da.Refresh Case Key.Down fAngolo -= 1 If fAngolo = -361 Then fAngolo = -1 da.Refresh End Select End Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso. da.Refresh End
Note
[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 .
[2] Vedere anche questa pagina: Ruotare qualsiasi elemento da disegnare in una DrawingArea