Differenze tra le versioni di "Ruotare un cerchio disegnato in una DrawingArea"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
Mostriamo un possibile codice [[#Nota|<SUP>Nota1</sup>]] per ottenere la rotazione <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span> di un cerchio, disegnato in una ''DrawingArea''. | Mostriamo un possibile codice [[#Nota|<SUP>Nota1</sup>]] per ottenere la rotazione <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span> di un cerchio, disegnato in una ''DrawingArea''. | ||
− | <BR>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. | + | <BR>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. |
+ | <BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera. | ||
<FONT Color=gray>' '''''Il fulcro di Translate agisce da vortice.'''''</font> | <FONT Color=gray>' '''''Il fulcro di Translate agisce da vortice.'''''</font> | ||
Riga 52: | Riga 53: | ||
.Rotate(Rad(fAngolo)) | .Rotate(Rad(fAngolo)) | ||
.Translate(fSotto1, fSotto2) | .Translate(fSotto1, fSotto2) | ||
+ | .LineWidth = 2.0 | ||
.Ellipse(x, y, iLarg, iAlt, Rad(360), Rad(360), True) | .Ellipse(x, y, iLarg, iAlt, Rad(360), Rad(360), True) | ||
.Stroke | .Stroke |
Versione delle 18:46, 2 giu 2021
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 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 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 With da .x = 0 .Y = 0 .W = Me.W .H = Me.H 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
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 .